引入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进行简单的数据缓存的更多相关文章

  1. redis实现mysql的数据缓存

    环境设定base2 172.25.78.12 nginx+phpbase3 172.25.78.13 redis端base4 172.25.78.14 mysql端# 1.在base2(nginx+p ...

  2. springboot(12)Redis作为SpringBoot项目数据缓存

    简介: 在项目中设计数据访问的时候往往都是采用直接访问数据库,采用数据库连接池来实现,但是如果我们的项目访问量过大或者访问过于频繁,将会对我们的数据库带来很大的压力.为了解决这个问题从而redis数据 ...

  3. Azure技术系列之Redis篇---第一章数据缓存

    嘈杂和忙碌的生活占据占据了生活的每一天,好久没有静下心来对自己喜欢的技术进行归纳总结了.痛定思痛,今天开始开荒,把之前研究的技术进行归纳总结,先从Azure的Redis的开发技术开始. Azure 的 ...

  4. jQuery源码笔记——数据缓存

    数据缓存是为了解决内存泄露,他的原理是,当我们将数据存储到一个对象上面,实际上是将所有的数据存到一个单独的数据对象里,而这个对象只提供一个接口,这个接口可以访问自己存在数据对象里自己的数据. 这是一个 ...

  5. 企业做数据缓存是使用Memcached还是选Redis?

    企业是使用Memcached还是选Redis? 在构建一款现代且由数据库驱动的Web应用程序并希望使其拥有更为出色的性能表现时,这个问题总会时不时出现.并给每一位开发人员带来困扰.在考虑对应用程序的性 ...

  6. Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

    mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...

  7. 老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化

    引言 今天周末,我在家坐着掐指一算,马上又要到一年一度的金九银十招聘季了,国内今年上半年受到 YQ 冲击,金三银四泡汤了,这就直接导致很多今年毕业的同学会和明年毕业的同学一起参加今年下半年的秋招,这个 ...

  8. Spring Boot使用redis做数据缓存

    1 添加redis支持 在pom.xml中添加 <dependency> <groupId>org.springframework.boot</groupId> & ...

  9. 学习Spring Boot:(二十五)使用 Redis 实现数据缓存

    前言 由于 Ehcache 存在于单个 java 程序的进程中,无法满足多个程序分布式的情况,需要将多个服务器的缓存集中起来进行管理,需要一个缓存的寄存器,这里使用的是 Redis. 正文 当应用程序 ...

随机推荐

  1. A - 最少拦截系统 (最长上升子序列)

    点击打开链接 A - 最少拦截系统 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度. ...

  2. 微信小程序下可以使用的MD5以及AES加密(通用)

    两段代码都来自网络 ,在小程序下的加解密结果与CS/BS等算出的结果都一致,支持汉字. 一.MD5: var rotateLeft = function (lValue, iShiftBits) { ...

  3. JavaScript(汇聚页)

    JavaScript对象 String 对象 RegExp 对象 \W 元字符

  4. 面向对象之-@classmethod、@staticmethod和@classonlymethod的区别

    实例方法.静态方法与类方法的含义 实例方法(普通方法)的含义就是需要类对象实例之后才能调用的方法,该方法的基本格式为: def test(self,*args,**kwargs): # 第一个参数必须 ...

  5. HTTP 缓存机制详解

    从这里看的 http://mp.weixin.qq.com/s/8UXEMQBkV9hHwtu9R7mV5w

  6. 总结day6 ---- set集合,基本类型的相互转化,编码,数据类型总结,循环时候不要动列表或者字典,深浅copy

    python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. 总结 一,id,is,== 在Python中,id是什么?id是内存地址,比如你利用id ...

  7. OO第二单元の小结

    第二单元(线程与电梯问题)总结博客 三次作业的设计策略 第一次:本次作业只有一部电梯,而且不用捎带.因此,我一共设计了两个线程:一个负责管理输入,一个负责电梯运行.同时,我将调度队列设置为单例模式,里 ...

  8. 《条目二十九:对于逐个字符的输入请考虑istreambuf_iterator》

    <条目二十九:对于逐个字符的输入请考虑istreambuf_iterator> 1.使用: ifstream inputfile("xxxx"); string fil ...

  9. [转] gitlab 的 CI/CD 配置管理

    [From] http://blog.51cto.com/flyfish225/2156602 gitlab 的 CI/CD 配置管理 (二) 标签(空格分隔):运维系列 一:gitlab CI/CD ...

  10. 第十篇--------javascript函数-参数

    javascript函数的参数:形参,实参 //function 参数 //形参列表 function test(a,b,c,d){ //alert(test.length); //形参个数,4个 / ...