什么是spring-data-redis

spring-data-redis是spring-data模块的一部分,专门用来支持在spring管理项目对redis的操作,使用java操作redis最常用的是使用jedis,但并不是只有jedis可以使用,像jdbc-redis,jredis也都属于redis的java客户端,他们之间是无法兼容的,如果你在一个项目中使用了jedis,然后后来决定弃用掉改用jdbc-redis就比较麻烦了,spring-data-redis提供了redis的java客户端的抽象,在开发中可以忽略掉切换具体的客户端所带来的影响,而且他本身就属于spring的一部分,比起单纯的使用jedis,更加稳定.管理起来更加自动化.(当然jedis的缺点不止以上).
spring-data-redis的特性
1.自动管理连接池,提供了一个高度封装的RedisTemplate类
2.针对jedis客户端的大量api进行了归类封装,把同一类型的操作封装成了Operation接口.支持redis中的五种数据类型的操作.
3.针对数据的"序列化与反序列化",提供了多种可以选择的策略(RedisSerializer)
JdkSerializationRedisSerializer:当需要存储java对象时使用.
StringRedisSerializer:当需要存储string类型的字符串时使用.
JacksonJsonRedisSerializer:将对象序列化成json的格式存储在redis中,需要jackson-json工具的支持,(目前我还没使用过,不了解)
Operations
redisTemplate有两个方法经常用到,一个是opsForXXX一个是boundXXXOps,XXX是value的类型,前者获取到一个Opercation,但是没有指定操作的key,可以在一个连接(事务)内操作多个key以及对应的value;后者会获取到一个指定了key的operation,在一个连接内只操作这个key对应的value.
ValueOperation和BoundValueOperation
ValueOperations valueOperations = redisTemplate.opsForValue();
BoundValueOperations<String, User> boundValueOps = redisTemplate.boundValueOps("key");
ValueOperation可以缓存Integer,String,java对象等类型.使用.set(key,value)方法进行设置,get(key)方法用来获取.
同样的方式可以获取ListOperations对象,可以用来缓存List,此外还有SetOperation,HashOperation
在spring+springmvc项目中使用spring-data-redis
1.maven配置,添加pom依赖
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.3.4.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.4.2</version> </dependency>
2.spring-redis.xml配置:
<!--JedisPoolConfig 连接池参数配置--> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!--最大空闲实例数--> <property name="maxIdle" value="300" /> <!--最大活跃实例数--> <property name="maxTotal" value="600" /> <!--创建实例时最长等待时间--> <property name="maxWaitMillis" value="1000" /> <!--创建实例时是否验证--> <property name="testOnBorrow" value="true" /> </bean> <!--JedisConnectionFactory 跟配置数据库连接池类似,需要配置JedisConnectionFactory来通过服务器或者连接池的方式获取redis服务器的连接--> <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="127.0.0.1"/> <property name="port" value="6379"/> <property name="usePool" value="true"/> <property name="poolConfig" ref="poolConfig"/> </bean> <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/> <bean id="valueSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/> <!-- redis模板配置 spring-data-redis提供了一个基础的泛型RedisTemplate封装了基础的crud操作--> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="connectionFactory"/> <property name="defaultSerializer" ref="stringRedisSerializer"/> <property name="keySerializer" ref="stringRedisSerializer"/> <property name="valueSerializer" ref="valueSerializer"/> </bean>
以上配置完成后,就可以使用spring-data-redis了,为了演示一下具体的使用,这里接着写一个简单地demo.
3.创建实体类User
public class User implements Serializable {
private static final long serialVersionUID = 1L;
/** 用户ID */
private Long id;
/** 用户名 */
private String name;
/** 用户年龄 */
private Integer age;
}
注意:如果需要向redis内存储pojo对象,那么该对象必须要实现Serializable接口,因为在redis中存储pojo类仍然存储的是string,它会把数据转化成byte[]数组的形式,在存取的时候就要对数据格式进行转化,就涉及到了序列化与反序列化.
4.创建UserCcontroller
@Controller
public class UserController extends BaseController {
@Autowired
private IUserService userService;
@Autowired
private RedisTemplate<String,User> redisTemplate;
@ResponseBody
@RequestMapping("/redis")
public Object redis() {
User u1=new User();
u1.setId(1L);
u1.setName("wang");
u1.setAge(22);
redisTemplate.opsForValue().set("user:wang",u1);
User u2=redisTemplate.opsForValue().get("user:wang");
return u2;
}
}
这里我们将user对象存储到redis中,再读出来,运行项目,测试这个接口,就可以在浏览器中看到json格式的user对象.
常见报错及解决方案
最开始我测试spring-data-redis的功能是从一个空项目一点点配置的,启动时报了很多异常,下面一个一个来.
1.启动tomcat报错
复制代码 代码如下:
Caused by: java.lang.VerifyError: (class: org/springframework/data/redis/connection/jedis/JedisConnectionFactory,
method: afterPropertiesSet signature: ()V) Incompatible argument to function
原因及解决方案:
在pom中我最开始配置的jedis版本是2.7.3,spring-data-redis版本是1.1.1,网上搜索了一翻,发现有一个说法是jedis-2.7.3.jar 和 spring-data-redis-1.1.1.RELEASE.jar 无法搭配使用,于是我把spring-data-redis的版本设成比较高的1.3.4,重新部署,果然此问题解决,紧接着问题又来了.
2.启动tomcat报错
复制代码 代码如下:
Caused by: Java.lang.NoSuchMethodError: redis.clients.jedis.JedisShardInfo.setTimeout(I)V
原因及解决方案:同样是版本的问题(没错,都被我撞上了),jedis版本是2.7.3,太高了,改成2.4.3以后,问题解决.
3.启动tomcat报错
复制代码 代码如下:
java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
原因及解决方案:这个GenericObjectPool使用到了commons-pool.jar中的类,我们的依赖中没有这个jar,所以添加commons-pool的dependency即可.
4.运行接口报错
复制代码 代码如下:
HTTP Status 500 - Request processing failed; nested exception is java.lang.ClassCastException: com.baomidou.springmvc.model.system.User cannot be cast to java.lang.String
原因及解决方案:在spring-redis配置文件中的redisTemplate的property中缺少name="valueSerializer"的配置,因为存储在redis的value是user对象,需要使用JdkSerializationRedisSerializer对象进行对象的序列化操作,解决方案就是配置成上面spring-redis.xml的方式.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关文章:
如何在景安云服务器上绑定域名并配置虚拟主机?
建站之星伪静态规则如何正确配置?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何彻底删除建站之星生成的Banner?
如何在阿里云虚拟服务器快速搭建网站?
如何用虚拟主机快速搭建网站?详细步骤解析
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
Android滚轮选择时间控件使用详解
成都响应式网站开发,dw怎么把手机适应页面变成网页?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
宝塔新建站点为何无法访问?如何排查?
上海网站制作开发公司,上海买房比较好的网站有哪些?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
网页设计网站制作软件,microsoft office哪个可以创建网页?
建站之星如何通过成品分离优化网站效率?
如何通过二级域名建站提升品牌影响力?
购物网站制作公司有哪些,哪个购物网站比较好?
如何快速搭建FTP站点实现文件共享?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
,如何利用word制作宣传手册?
开封网站制作公司,网络用语开封是什么意思?
做企业网站制作流程,企业网站制作基本流程有哪些?
如何在IIS服务器上快速部署高效网站?
c++ stringstream用法详解_c++字符串与数字转换利器
潮流网站制作头像软件下载,适合母子的网名有哪些?
北京网站制作网页,网站升级改版需要多久?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
学校为何禁止电信移动建设网站?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何在腾讯云免费申请建站?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
如何快速使用云服务器搭建个人网站?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
如何在万网自助建站中设置域名及备案?
微课制作网站有哪些,微课网怎么进?
内网网站制作软件,内网的网站如何发布到外网?
网站制作公司排行榜,四大门户网站排名?
网站制作公司排行榜,抖音怎样做个人官方网站
如何通过FTP空间快速搭建安全高效网站?
广州美橙建站如何快速搭建多端合一网站?
建站主机空间推荐 高性价比配置与快速部署方案解析
如何在阿里云服务器自主搭建网站?
建站主机SSH密钥生成步骤及常见问题解答?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
建站之星2.7模板:企业网站建设与h5定制设计专题
*请认真填写需求信息,我们会在24小时内与您取得联系。