spring-data-redis的使用/redis缓存
1.导入依赖
<properties>
<junit.version>4.12</junit.version>
<spring.version>4.2.4.RELEASE</spring.version>
</properties> <dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
<!--Redis依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.7.2.RELEASE</version>
</dependency>
</dependencies>
2.在resources文件夹下添加配置文件
redis-config.properties
redis.host=192.168.200.128
redis.port=6379
#redis有验证添加,无验证不添加
redis.pass=
redis.database=0
redis.maxIdle=300
redis.maxWait=3000
redis.testOnBorrow=true
applicationContext-redis.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" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache.xsd"> <context:property-placeholder location="classpath*:redis-config.properties" /> <!-- redis 相关配置 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="${redis.maxIdle}" />
<property name="maxWaitMillis" value="${redis.maxWait}" />
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean> <bean id="JedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:pool-config-ref="poolConfig"/> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="JedisConnectionFactory" />
</bean> </beans>
3.测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/spring/applicationContext-redis.xml")
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate; //1.redis简单数据类型
@Test
public void test01(){ redisTemplate.opsForValue().set("key1", "华为"); //向redis中添加数据
String key1 = (String) redisTemplate.opsForValue().get("key1"); //获取redis中的数据
System.out.println(key1); redisTemplate.delete("key1"); //删除redis中的数据
Object key2 = redisTemplate.opsForValue().get("key1"); //获取redis中的数据
System.out.println(key2); //若redis中无对应的值,则返回null
}
//2.redis值类型操作
@Test
public void test02(){
redisTemplate.boundValueOps("key").set("spring-data-redis"); //向redis中添加数据
Object key = redisTemplate.boundValueOps("key").get(); //获取redis中的数据
System.out.println(key); redisTemplate.delete("key"); //删除redis中的数据
Object key1 = redisTemplate.boundValueOps("key").get(); //获取redis中的数据
System.out.println(key1); //若redis中无对应的值,则返回null
} //3.redis Set类型操作
@Test
public void test03(){
redisTemplate.boundSetOps("set").add("华为");
redisTemplate.boundSetOps("set").add("苹果");
redisTemplate.boundSetOps("set").add("三星");
redisTemplate.boundSetOps("set").add("小米");
redisTemplate.boundSetOps("set").add("vivo");
redisTemplate.boundSetOps("set").add("魅族"); Set set = redisTemplate.boundSetOps("set").members();
System.out.println(set); //redisTemplate.boundSetOps("set").remove("魅族");
redisTemplate.delete("set");
Set set1 = redisTemplate.boundSetOps("set").members();
System.out.println(set1);
}
//4.redis List类型操作
@Test
public void test04(){
redisTemplate.boundListOps("list").leftPush("a"); //从左边添加数据
redisTemplate.boundListOps("list").leftPush("b");
redisTemplate.boundListOps("list").leftPush("c");
redisTemplate.boundListOps("list").rightPush("1"); //从右边添加数据
redisTemplate.boundListOps("list").rightPush("2");
redisTemplate.boundListOps("list").rightPush("3"); List list = redisTemplate.boundListOps("list").range(0, -1);
System.out.println(list); redisTemplate.delete("list");
List list1 = redisTemplate.boundListOps("list").range(0, -1);
System.out.println(list1); }
//5.Hash类型操作
@Test
public void test05(){
redisTemplate.boundHashOps("hash").put("name", "张三");
redisTemplate.boundHashOps("hash").put("sex", "男");
redisTemplate.boundHashOps("hash").put("age", "18"); Map map = redisTemplate.boundHashOps("hash").entries();
for (Object key : map.keySet()) {
System.out.println(key +" : " + map.get(key) );
}
redisTemplate.boundHashOps("hash").delete("sex");
Map map1 = redisTemplate.boundHashOps("hash").entries();
for (Object o : map1.entrySet()) {
Map.Entry entry = (Map.Entry) o;
System.out.println(entry.getKey()+":"+entry.getValue());
} }
}
4.项目中的使用
先从redis中查询数据,若为null,则表示redis中无数据,然后从mysql数据库中查找数据,再将数据存入redis缓存中。数据库进行增删改操作之后都要清除redis缓存,以防数据不一致。
public class ContentServiceImpl implements ContentService {
@Autowired
private ContentMapper contentMapper;
@Autowired
private RedisTemplate redisTemplate;
@Override
public void insert(Content content) { //redis缓存
contentMapper.insertSelective(content);
//清楚缓存
redisTemplate.boundHashOps(RedisConst.CONTENT).delete(content.getCategoryId());
} @Override
public void delete(Long[] ids) {
//清空缓存
for (Long id : ids) {
Long categoryId = contentMapper.selectByPrimaryKey(id).getCategoryId();
redisTemplate.boundHashOps(RedisConst.CONTENT).delete(categoryId);
} //从数据库删除记录
List<Long> list = Arrays.asList(ids);
ContentExample example = new ContentExample();
example.createCriteria().andIdIn(list);
contentMapper.deleteByExample(example);
} @Override
public void update(Content content) {
//查询修改前的分类id
Long oldCategoryId = contentMapper.selectByPrimaryKey(content.getId()).getCategoryId();
redisTemplate.boundHashOps(RedisConst.CONTENT).delete(oldCategoryId); //清除缓存
contentMapper.updateByPrimaryKeySelective(content); //如果修改后的分类id发生修改,清除修改后的分类id的缓存
if(oldCategoryId.longValue() != content.getCategoryId().longValue()){
redisTemplate.boundHashOps(RedisConst.CONTENT).delete(content.getCategoryId());
}
}
//根据广告分类id查询广告列表
@Override
public List<Content> findByCategoryId(long categoryId) { //redis缓存机制
//1.从redis中取数据
List<Content> contents = (List<Content>) redisTemplate.boundHashOps(RedisConst.CONTENT).get(categoryId);
//2.判断redis中是否有数据
if(contents == null){
//3.从mysql数据库中查找数据
ContentExample example = new ContentExample();
ContentExample.Criteria criteria = example.createCriteria();
criteria.andCategoryIdEqualTo(categoryId);
criteria.andStatusEqualTo("1");//开启状态
example.setOrderByClause("sort_order");
contents = contentMapper.selectByExample(example);
//4.将查询到的数据库保存到Redis数据库中
redisTemplate.boundHashOps(RedisConst.CONTENT).put(categoryId, contents);
}
return contents;
} }
spring-data-redis的使用/redis缓存的更多相关文章
- 使用Spring Data Redis时,遇到的几个问题
需求: 1,保存一个key-value形式的结构到redis 2,把一个对象保存成hash形式的结构到redis 代码如下: // 保存key-value值 pushFrequency ...
- hibernate、mybatis、spring data 的对比
转: 1.概念: Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库.着力 ...
- ORM--------Hibernate、Mybatis与Spring Data的区别
1.概念: Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库.着力点对象 ...
- 使用 Spring data redis 结合 Spring cache 缓存数据配置
使用 JavaConfig 方式配置 依赖 jar 包: jedis.spring-data-redis 首先需要进行 Redis 相关配置 @Configuration public class R ...
- 分布式缓存技术redis学习系列(五)——redis实战(redis与spring整合,分布式锁实现)
本文是redis学习系列的第五篇,点击下面链接可回看系列文章 <redis简介以及linux上的安装> <详细讲解redis数据结构(内存模型)以及常用命令> <redi ...
- spring + redis 实现数据的缓存
1.实现目标 通过redis缓存数据.(目的不是加快查询的速度,而是减少数据库的负担) 2.所需jar包 注意:jdies和commons-pool两个jar的版本是有对应关系的,注意引入jar包是要 ...
- spring data redis RedisTemplate操作redis相关用法
http://blog.mkfree.com/posts/515835d1975a30cc561dc35d spring-data-redis API:http://docs.spring.io/sp ...
- Spring data redis的一个bug
起因 前两天上线了一个新功能,导致线上业务的缓存总是无法更新,报错也是非常奇怪,redis.clients.jedis.exceptions.JedisConnectionException: Unk ...
- Spring Data操作Redis详解
Spring Data操作Redis详解 Redis是一种NOSQL数据库,Key-Value形式对数据进行存储,其中数据可以以内存形式存在,也可以持久化到文件系统.Spring data对Redis ...
- Spring Data Redis 让 NoSQL 快如闪电(2)
[编者按]本文作者为 Xinyu Liu,文章的第一部分重点概述了 Redis 方方面面的特性.在第二部分,将介绍详细的用例.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 把 Redis ...
随机推荐
- springboot 初探 、基础及配置
一.spring boot 的核心功能 独立运行的spring项目.内嵌servlet容器.提供starter简化maven配置.自动配置Spring.准生产的应用监控.无代码生成和xml配置二.sp ...
- Postman—cookie
postman中可以直接添加cookie.查看响应中的cookie: 什么是cookie HTTP协议本身是无状态的.什么是无状态呢,即服务器无法判断用户身份.Cookie实际上是一小段的文本信息(k ...
- linux运维、架构之路-jumpserver
一.jumpserver介绍 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能.基于ssh协议来管理,客户端无需安装agent. 特点: 完全开源,GPL ...
- extjs计算两个DateField所间隔的月份(天数)
需求:两个DateField控件,分别为开始时间和结束时间.当选择完结束时间后,自动计算这两个时间段所间隔的月或天数. 需要解决的问题: 1.直接使用Ext.getCmp('endDate').get ...
- makefile 赋值
= 是最基本的赋值:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值
- websocket 传输数据帧打包 (client端)
/* Vertion: 0.2.1 date: 2015.8.11 content: gcc 编译通过 */ //websocket 传输数据帧打包 client端 //参数:src 为输入字符串 / ...
- 3D Computer Grapihcs Using OpenGL - 08 Text File Shaders
使用之前的方法写Shader是一件很痛苦的事情,把Shader代码直接卸载C++文件中,需要使用很多引号来包裹,既不美观也不方便. 我们这节的目的是使用纯文本文件保存Shader. 首先在工程中创建两 ...
- Oracle Select语句
Oracle Select语句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,将学习如何使用Oracle SELECT语句从单个表中查询数据. ...
- 转:SqlBulkCopy类进行大数据(一万条以上)插入测试
转自:https://www.cnblogs.com/LenLi/p/3903641.html 结合博主实例,自己测试了一下,把数据改为3万行更明显!! 关于上一篇博客中提到的,在进行批量数据插入数据 ...
- Linux动态库和静态库
Linux下动态库查看办法:nm -D libavformat.so Linux下静态库查看办法:ar -t libavformat.a ------------------------------- ...