使用Leopard Cache学习如何使用Leopard Cache。本指南将引导您使用Leopard Cache操作缓存。
How to complete this guide你可以从头开始并完成每一个步骤,或者您可以绕过你已经熟悉的基本设置步骤。无论哪种方式,你最终都可以得到可工作的代码。
1、配置maven依赖在dao模块的pom.xml加入
<dependencies>
[...]
<dependency>
<groupId>io.leopard</groupId>
<artifactId>leopard-data</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
[...]
</dependencies>
<repositories>
<repository>
<id>leopard-snapshots</id>
<name>Leopard Snapshots</name>
<url>http://leopard.io/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
2、配置springsrc/main/resources/applicationContext-dao.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <span style='font-weight:bold;color:#ff0000'>xmlns:leopard="http://www.leopard.io/schema/leopard"</span>
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
<span style='font-weight:bold;color:#ff0000'>http://www.leopard.io/schema/leopard http://www.leopard.io/schema/leopard.xsd</span>">
<leopard:component-scan base-package="io.leopard.guides" />
<leopard:jdbc id="jdbc" host="112.126.75.27" database="example" user="example" password="leopard" />
<leopard:redis id="redis" server="112.126.75.27:6311" />
</beans>
3、创建UserDao接口,用到缓存必须实现IGet接口.此处为了展现更多接口直接实现了IDelete接口
创建src/main/java/io/leopard/guides/dao/UserDao.java
package io.leopard.guides.dao;
import io.leopard.data4j.cache.api.uid.IDelete;
import io.leopard.guides.model.User;
import java.util.Date;
public interface UserDao extends IDelete<User, Long> {
@Override
public boolean add(User user);
@Override
User get(Long uid);
@Override
boolean delete(Long uid, long opuid, Date lmodify);
}
4、创建UserDao接口Mysql实现创建src/main/java/io/leopard/guides/dao/mysql/UserDaoMysqlImpl.java
package io.leopard.guides.dao.mysql;
import io.leopard.data4j.jdbc.Jdbc;
import io.leopard.data4j.jdbc.builder.InsertBuilder;
import io.leopard.guides.dao.UserDao;
import io.leopard.guides.model.User;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoMysqlImpl implements UserDao {
@Resource
private Jdbc jdbc;
@Override
public boolean add(User user) {
InsertBuilder builder = new InsertBuilder("user");
builder.setLong("uid", user.getUid());
builder.setString("nickname", user.getNickname());
builder.setDate("posttime", user.getPosttime());
return this.jdbc.insertForBoolean(builder);
}
@Override
public User get(Long uid) {
String sql = "select * from user where uid=?;";
return jdbc.query(sql, User.class, uid);
}
@Override
public boolean delete(Long uid, long opuid, Date lmodify) {
String sql = "delete from user where uid=?;";
return jdbc.updateForBoolean(sql, uid);
}
}
5、创建UserDao接口Redis实现创建src/main/java/io/leopard/guides/dao/redis/UserDaoRedisImpl.java
package io.leopard.guides.dao.redis;
import io.leopard.burrow.lang.Json;
import io.leopard.burrow.util.NumberUtil;
import io.leopard.data4j.redis.Redis;
import io.leopard.guides.dao.UserDao;
import io.leopard.guides.model.User;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoRedisImpl implements UserDao {
@Resource
private Redis redis;
@Override
public boolean add(User user) {
String key = this.getKey(user.getUid());
redis.set(key, Json.toJson(user));
return true;
}
@Override
public User get(Long uid) {
String key = this.getKey(uid);
String json = redis.get(key);
return Json.toObject(json, User.class);
}
@Override
public boolean delete(Long uid, long opuid, Date lmodify) {
String key = this.getKey(uid);
Long result = redis.del(key);
return NumberUtil.toBool(result);
}
protected String getKey(long uid) {
return "user:" + uid;
}
}
6、创建UserDao接口Cache实现创建src/main/java/io/leopard/guides/dao/cache/UserDaoCacheImpl.java
package io.leopard.guides.dao.cache;
import io.leopard.data4j.cache.CacheLoader;
import io.leopard.guides.dao.UserDao;
import io.leopard.guides.model.User;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoCacheImpl implements UserDao {
@Resource
private UserDao userDaoMysqlImpl;
@Resource
private UserDao userDaoRedisImpl;
@Override
public boolean add(User user) {
return userDaoMysqlImpl.add(user);
}
@Override
public User get(Long uid) {
// 先到userDaoRedisImpl.get方法查,有数据直接返回
// 如果redis实现没有数据,就到userDaoMysqlImpl.get方法查询数据。如果有数据将数据传给userDaoRedisImpl.add方法保存并返回。如果mysql实现也没有数据则返回null.
return CacheLoader.get(userDaoRedisImpl, userDaoMysqlImpl, uid);
}
@Override
public boolean delete(Long uid, long opuid, Date lmodify) {
userDaoRedisImpl.delete(uid, opuid, lmodify);
return this.userDaoMysqlImpl.delete(uid, opuid, lmodify);
}
}
7、在UserService使用UserDao接口创建src/main/java/io/leopard/guides/service/UserService.java
package io.leopard.guides.service;
import io.leopard.guides.dao.UserDao;
import io.leopard.guides.model.User;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Resource
// 当有xxxDaoCacheImpl存在时,Leopard自动为它增加了@Primary注解
// 这里会自动注入userDaoCacheImpl.
private UserDao userDao;
public boolean add(User user) {
return this.userDao.add(user);
}
public User get(long uid) {
return this.userDao.get(uid);
}
public boolean delete(long uid) {
return this.userDao.delete(uid, 0, new Date());
}
}
8、编写UserService测试代码创建src/test/java/io/leopard/guides/service/UserServiceTest.java
package io.leopard.guides.service;
import io.leopard.guides.model.User;
import io.leopard.test.IntegrationTests;
import java.util.Date;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
public class UserServiceTest extends IntegrationTests {
@Autowired
private UserService userService;
@Test
public void get() {
this.userService.delete(1);// 先删除记录
{
User user = new User();
user.setUid(1);
user.setNickname("Leopard");
user.setPosttime(new Date());
userService.add(user);
}
{
User user = userService.get(1);
Assert.assertNotNull(user);
Assert.assertEquals("Leopard", user.getNickname());
}
}
}
总结恭喜你!您已经可以配置使用Leopard Cache,虽然功能比较简单,你可以在这个基础上扩展出你的业务系统,祝您好运。
分享到:
相关推荐
用于Ruby框架的Redis存储 Redis Store为现代Ruby框架提供了全套存储( Cache , I18n ,... 如果您在Snow Leopard上,则必须运行env ARCHFLAGS="-arch x86_64" ruby ci/run.rb 贡献者 版本控制 redis商店的宝石家族使用
对于运行 macOS 10.5.x(Snow Leopard)及以上的用户,可以使用 Java 6 VM。若需要更改默认的 Java VM 版本,可以通过 `/Applications/Utilities/Java/Java Preferences` 应用程序进行设置,将 Java SE 6 移动至 ...
add_header Cache-Control public; } ``` 2. **合并CSS和JavaScript**:减少HTTP请求次数,提高页面加载速度。可以通过concat插件或构建工具实现。 3. **开启文件MD5校验**:启用HTTP_ETAG,根据文件内容生成...
基于S7-300PLC与MCGS6.2的饮料罐装生产线自动化控制系统设计,包含仿真、程序、IO表与电气原理,实现自动操作、灌装报警及瓶数记录功能。,基于PLC的饮料罐装生产线控制系统设计。 S7-300PLC MCGS6.2仿真 仿真,程序,IO表,电气原理图,6500字说明。 实现功能有: (1)系统通过开关设定为自动操作模式,一旦启动,则传送带的驱动电机启动并一直保持到停止开关动作或罐装设备下的传感器检测到一个瓶子时停止;瓶子装满饮料后,传送带驱动电机必须自动启动,并保持到又检测到一个瓶子或停止开关动作。 (2)当瓶子定位在灌装设备下时,停顿1秒,罐装设备开始工作,灌装过程为5秒钟,罐装过程应有报警显示,5秒后停止并不再显示报警。 (2)用两个传感器和若干个加法器检测并记录空瓶数和满瓶数,一旦系统启动,必须记录空瓶和满瓶数,设最多不超过99999999瓶。 (4)可以手动对计数器清零(复位)。 ,关键词:S7-300PLC; MCGS6.2仿真; 传送带驱动电机; 传感器检测; 瓶装; 空瓶数; 满瓶数; 报警显示; 自动操作模式; 灌装设备。,基于S7-300PLC的饮料罐装
python加密货币时间序列预测源码+数据集-最新出炉 加密货币分析: 对各种加密货币的数据进行分析和研究。可能会使用到从各种来源收集的数据,包括但不限于加密货币的价格、市值、交易量、交易时间等信息。 探索加密货币市场的趋势和模式,例如价格的波动情况、不同加密货币之间的相关性等。 数据处理与操作: 可能使用 Python 语言(Kaggle 上常用的数据分析语言),并运用一些数据处理和分析的库,如 pandas 用于数据的读取、清洗、整理和转换操作,将原始的加密货币数据转换为更易于分析的格式。 可视化展示: 通过可视化工具,如 matplotlib 或 seaborn 库,将加密货币的信息以图表的形式展示出来,以帮助直观地理解数据中的关系和趋势。 统计分析或预测: 可能会进行一些基本的统计分析,如计算加密货币价格的均值、中位数、标准差等统计量,以描述数据的特征。 或者使用机器学习或时间序列分析的方法对加密货币的价格进行预测,根据历史数据预测未来价格走势。 例如,使用 scikit-learn 进行简单的回归分析: 数据挖掘与特征提取: 挖掘加密货币数据中的特征,如找出影响价格的关键因素,对数据中的特征进行筛选和提取,以帮助更好地理解加密货币的市场行为。
类和对象、继承、封装、多态、接口、异常
gee python相关教程
夜间灯光强度(平均灯光强度)的高低反映了一个地区城市化发展的水平,平均灯光强度越高,说明该地区城市群越多,城市化程度越高。夜间灯光数据现在越来越广泛地应用于经济增长分析、经济地理、城市经济学、数字经济等众多领域。 本数据包括三套: [1]中国类DMSP-OLS灯光数据1992-202 [2]中国超长序列灯光数据1984-2020 [3]全球类NPP-VIIRS夜间灯光数据2000-2022 包括:全国各省、市、县夜间灯光数据 矫正后夜间灯光数据 细分:标准差、平均值、总值、最大值和最小值
工程项目总监绩效考核表
首先解释一下什么叫转移支付。其实,这和养老金的中央调剂是一样的。 每年,地方都要向中央缴纳财政。而中央又要根据各地方的财政实力,给予转移支付。比如一些经济弱省,本身财政收入就不够支出的,还得上交一部分给中央,怎么维持财政运转?由于各省市直接的财政收入能力存在差异,中央为实现各个地方的公共服务水平平等,于是便有了财政转移支付制度。 简单理解就是富省养穷省。 2022年全国一般预算内财政收入203703亿元,给地方转移支付了97144.75亿元,转移支付数额创下新高。
基于门控卷积和堆叠自注意力的离线手写汉字识别算法研究.pdf
【数据介绍】 作为第二大人类部门用水,高质量的工业用水格网数据对于水资源研究和管理至关重要。中国工业用水格网数据(China Industrial Water Withdrawal dataset, CIWW)基于超过 40 万家企业数据、月度工业产品产量数据和连续工业用水统计数据制作得到的一套1965-2020年逐月中国工业用水数据集,其空间分辨率为 0.1°和 0.25°。数据集包括工业用水、企业数量和企业生产总值(辅助数据)等变量,可被用于水文、地理学、环境、可持续发展等方面科学研究。 【数据来源】 数据来源为《中国经济普查年鉴》(省级工业取水量、工业产出)、《中国工业企业数据库》(企业地理位置、产值)、《中国工业产品产量数据库》(工业产品月生产量),以及《中国水资源公报》和(Zhou et al, 2020, PNAS)的工业用水量数据。 【数据处理】 首先通过2008年企业分布数据、经济普查年鉴中分省分部门的工业用水量和工业产值计算得到分省分部门工业用水效率和工业产品产量数据,得到了2008年逐月工业用水数据。然后结合中国水资源公报和相关文献中省级工业用水数据,以2008年工业用水的时空格局作为基础分配工业用水数据,最终得到1965-2020年逐月工业用水的格网数据。详细方法见High-resolution mapping of monthly industrial water withdrawal in China from 1965 to 2020 (Hou et al, 2024, ESSD). 将数据集与统计数据记录和其他数据集进行了验证,结果表示在时间尺度和空间尺度上都与统计数据具有一致性,相比已有工业用水数据有更好的精度。
65 -质量管理部经理绩效考核表1
11 -电脑部经理绩效考核表1
内容概要:本文提供了针对大学生英语竞赛写作准备的重要资源——一系列通用的英文句子模板。这些模板涵盖了现代经济社会的各种话题,从科技进步到环境保护,以及个人品质和社会责任等,并且适用于论述类文章、观点对比和个人见解的表达。文章通过对每一句话的应用环境解释和语法提示,确保使用者可以在实际写作中正确且有效地应用这些表达方式。 适合人群:正在准备参加大学生英语竞赛的学生及其他希望提高书面表达能力的学习者。 使用场景及目标:考生能够在竞赛时间内迅速构建思路完整的文章,增强语言表达的流利性和规范性;帮助学习者积累高级词汇,提升英语写作水平并培养良好的思维逻辑。 阅读建议:结合历年优秀范文进行深入学习,熟悉不同类型话题下的表述方法;练习将提供的句子融入自身创作的文章中,通过不断修订和完善来巩固记忆。同时也可以用于日常的英语写作训练当中。
法律事务专员绩效考核表
1、文件内容:apache-commons-digester-javadoc-1.8.1-19.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apache-commons-digester-javadoc-1.8.1-19.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装