使用Redis进行简单的数据缓存
引入spring-data-redis包、jedis、connection-pool包
applicationContext.xml的配置
<!-- redis Connection -->
<bean id="redisConnection" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="localhost"></property>
<property name="port" value="6379"></property>
</bean>
<!-- redisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="redisConnection"></property>
</bean>
做一个简单的测试
@Test
public void test1() {
Jedis jd = new Jedis("localhost",6379);
String ping = jd.ping();
System.out.println(ping);
Set<String> keys = jd.keys("*");
for(String k:keys){
System.out.println(k + ":"+ jd.type(k));
}
jd.close(); } @Test
public void test2(){
Jedis j=new Jedis("localhost", 6379);
System.out.println(j.ping());
Set<String> filed= j.hkeys("dept");
System.out.println(filed);
for(String s:filed){
System.out.println(j.hget("dept", s));
}
j.close();
}
自己写一个工具类将,进行序列化与反序列化,
public class SerializableUtil {
public static byte[] objectToBytes(Object obj) {// 将对象转换为byte数组
ByteArrayOutputStream baos = null;
ObjectOutputStream oos = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(obj);// 将数据序列化后写入到baos中
byte[] byte1 = baos.toByteArray();
return byte1;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} finally {
try {
baos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
oos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static Object byteToObject(byte[] bytes) {
ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
try {
bais = new ByteArrayInputStream(bytes);
ois = new ObjectInputStream(bais);
Object obj = ois.readObject();
return obj;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} finally {
try {
bais.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
测试:
@Test
public void test4(){ DeptBean bean=new DeptBean(124, "zhangsan1", "shanghai");
Jedis j=new Jedis("localhost", 6379);
j.set("dept".getBytes(), SerializableUtil.objectToBytes(bean));
j.close();
} @Test
public void test5(){
Jedis j=new Jedis("localhost", 6379);
byte[] bean=j.get("dept".getBytes());//获取到的是byte数组
//在将byte数组反序列化
DeptBean byteToObject = (DeptBean) SerializableUtil.byteToObject(bean);
System.out.println(byteToObject);
j.close();
}
上面只是简单的使用自己写的一个工具类进行序列化与反序列化,实际开发中还是使用工具进行的,
写一个控制器,对其进行单元测试
@RunWith(SpringJUnit4ClassRunner.class)//这里的意思是进行一个spring环境的配置
@ContextConfiguration(locations = "classpath:applicationContext.xml")//让其能不启动tomcat服务器的情况下进行测试
public class TestRedis_Data { @Autowired//自动装载
public RedisTemplate<Object, Object> tem; @Test
public void test1() {
// tem.setConnectionFactory(connectionFactory);
// RedisTemplate
DeptBean dept = new DeptBean(10, "傻强", "上海");
tem.opsForValue().set("mydeptsingle", dept);//直接可以设置对象,将其进行序列化
DeptBean object = (DeptBean) tem.opsForValue().get("mydeptsingle");// 底层已经序列化了
System.out.println(object.getDeptno() + " " + object.getDname() + " " + object.getLoc());
} }
然后在对自己有缓存需求的方法进行开启Redis缓存,
//@Controller
@RestController //相当于@Controller 和 @ResponseBody 相结合的功能
public class DeptController { @Autowired //自动装载
private DeptDao dao; //使用redis
@Autowired
private RedisTemplate<Object, Object> temp; @RequestMapping(value = "/dept/all", method = RequestMethod.GET) // @ResponseBody
public List<DeptBean> selectAll() {
List<DeptBean> Deptlist = (List<DeptBean>) temp.opsForValue().get("Deptlist");
List<DeptBean> list = null;
if (Deptlist.isEmpty()) {
list = dao.findAll();
temp.opsForValue().set("Deptlist", list);
return list;
}
return Deptlist;
} // 查询
@RequestMapping(value = "/dept/get", method = RequestMethod.GET)
public DeptBean selelctDeptById(@RequestParam("no") int id) {
// 从Redis中取出来
DeptBean bean = (DeptBean) temp.opsForValue().get("dept" + id);
// 如果没有,从数据库中取出来并返回
if (bean == null) {
System.out.println("从数据库中取");
DeptBean findbean = dao.findId(id);
temp.opsForValue().set("dept" + id, findbean);
return findbean;
}
System.out.println("从缓存中取的数据");
return bean;
} // 分页查询
// 骑牛地址: http://localhost:8060/Spring_Mybatis02/dept/list?page=3&size=3
@RequestMapping(value = "/dept/list", method = RequestMethod.GET)
public PageBean pageSelect(
@RequestParam(defaultValue = "1", required = false) int page,
@RequestParam(defaultValue = "5", required = false) int size) {
Page p = PageHelper.startPage(page, size);// 引入jar包中的jar文件,分页只对下一条查询代码有作用 List<DeptBean> list = dao.findAll();
System.out.println("当前页" + p.getPageNum() + " 总页数" + p.getPages() + " 总记录数" + p.getTotal());
PageBean bean = new PageBean();
bean.setList(list);
bean.setPagesize(size);
bean.setTotalpages(p.getPages());
bean.setTotalRecords(p.getTotal());
return bean;
} // 删除
@RequestMapping(value = "/dept/delete", method = RequestMethod.POST)
public int deleteDeptById(int deptno) {
//删除缓存
temp.delete("dept" + deptno);
//从数据库删除
return dao.deleteDeptById(deptno);
}
}
当然如果你需要在项目启动时候就加载到内存中,则可以这样,另写一个专门加载需要缓存的数据
@Component
public class InitLoadData {
@Resource //装载dao层
private DeptDao dao;
@Resource
private RedisTemplate<Object,Object> temp; //装载Redis中的bean配置 @PostConstruct//项目启动时候就会启动该方法 的注解
public void inint(){
System.out.println("查询数据库将数据加载到Redis中");
DeptBean dept=dao.findId(10);
temp.opsForValue().set("dept10", dept); }
}
使用Redis进行简单的数据缓存的更多相关文章
- redis实现mysql的数据缓存
环境设定base2 172.25.78.12 nginx+phpbase3 172.25.78.13 redis端base4 172.25.78.14 mysql端# 1.在base2(nginx+p ...
- springboot(12)Redis作为SpringBoot项目数据缓存
简介: 在项目中设计数据访问的时候往往都是采用直接访问数据库,采用数据库连接池来实现,但是如果我们的项目访问量过大或者访问过于频繁,将会对我们的数据库带来很大的压力.为了解决这个问题从而redis数据 ...
- Azure技术系列之Redis篇---第一章数据缓存
嘈杂和忙碌的生活占据占据了生活的每一天,好久没有静下心来对自己喜欢的技术进行归纳总结了.痛定思痛,今天开始开荒,把之前研究的技术进行归纳总结,先从Azure的Redis的开发技术开始. Azure 的 ...
- jQuery源码笔记——数据缓存
数据缓存是为了解决内存泄露,他的原理是,当我们将数据存储到一个对象上面,实际上是将所有的数据存到一个单独的数据对象里,而这个对象只提供一个接口,这个接口可以访问自己存在数据对象里自己的数据. 这是一个 ...
- 企业做数据缓存是使用Memcached还是选Redis?
企业是使用Memcached还是选Redis? 在构建一款现代且由数据库驱动的Web应用程序并希望使其拥有更为出色的性能表现时,这个问题总会时不时出现.并给每一位开发人员带来困扰.在考虑对应用程序的性 ...
- Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...
- 老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化
引言 今天周末,我在家坐着掐指一算,马上又要到一年一度的金九银十招聘季了,国内今年上半年受到 YQ 冲击,金三银四泡汤了,这就直接导致很多今年毕业的同学会和明年毕业的同学一起参加今年下半年的秋招,这个 ...
- Spring Boot使用redis做数据缓存
1 添加redis支持 在pom.xml中添加 <dependency> <groupId>org.springframework.boot</groupId> & ...
- 学习Spring Boot:(二十五)使用 Redis 实现数据缓存
前言 由于 Ehcache 存在于单个 java 程序的进程中,无法满足多个程序分布式的情况,需要将多个服务器的缓存集中起来进行管理,需要一个缓存的寄存器,这里使用的是 Redis. 正文 当应用程序 ...
随机推荐
- Java Web 学习与总结(一)Servlet基础
配置环境:https://www.cnblogs.com/qq965921539/p/9821374.html 简介: Servlet是Sun公司提供的一种实现动态网页的解决方案,在制定J2EE时引入 ...
- mxonline实战9,我要学习功能块,机构详情展示,收藏功能
对应github地址:第9天 一. 实现我要学习功能
- trunc 函数用法
转载至:http://blog.csdn.net/aqszhuaihuai/article/details/6303686 1.trunc用于日期,可精确到年,月和日. select trunc(sy ...
- java的应用,SVN客户端的安装教程
1.先注册一个百度云账号,然后打开https://console.bce.baidu.com 这个网站,按照下面的图形点击 !!!!请注意这是要收钱的,但能学习到那用微信打开你的网站也是值得的. 2. ...
- Spring+SpringMVC+Mybatis整合redis
SSM整合redis redis是一种非关系型数据库,与mongoDB不同的是redis是内存数据库,所以访问速度很快.常用作缓存和发布-订阅式的消息队列. 这里用的是ssm框架+maven构建的项目 ...
- Java操作数据库实现"增删改查"
本文主要讲解JDBC操作数据库 主要实现对MySql数据库的"增删改查" 综合概述: JDBC的常用类和接口 一 DriverManager类 DriverManage类 ...
- hibernate调用mysql自己手动创建函数报错
split为自己手动在mysql中创建的函数,在hibernate调用时出错,解决方案如下: jdbc调用可以.不用改hibernate的方言. 正常的为:
- Cisco ASA 8.3前及8.3后版本Access-list 变化
8.2及之前 access-list:源地址是真实IP地址,目的地址是映射地址packet-tracer:源地址为真实IP地址,目的地址为映射地址 8.3及之后access-list:源地址和目的地址 ...
- 正则表达式 IP域名
不废话,我这个起码不坑人,有的把我坑死 var objRegExp = /^((([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5]))))\.)((([0-9]|([ ...
- 开源.net 混淆器ConfuserEx介绍 [转]
今天给大家介绍一个开源.net混淆器——ConfuserEx http://yck1509.github.io/ConfuserEx/ 由于项目中要用到.net 混淆器,网上搜寻了很多款,比如Dotf ...