概述
- Spring Data Redis 是 Spring Data大家庭中的一员,和Spring 生态结合的很好,它提供了低级别(RedisTemplate ...)和高级别(ListOperations )的抽象,使我们很方便的就可以和Redis交互
- 2.X后的版本需要Java 8 支持
- 同时支持 Jedis和Lettuce(这个没怎么用过),2.X以后默认实现是Lettuce,使用Jedis的话需要手动改下(引入Jedis的包)
使用:
引入包:
org.springframework.boot spring-boot-starter-parent 2.0.5.RELEASE `复制代码 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.springframework.data spring-data-redis redis.clients jedis 2.9.0
配置文件
# REDIS (RedisProperties)# Redis数据库索引(默认为0)spring.redis.database=5# Redis服务器地址spring.redis.host=127.0.0.1# Redis服务器连接端口spring.redis.port=6379# Redis服务器连接密码(默认为空)spring.redis.password=*****# 连接池最大连接数(使用负值表示没有限制)spring.redis.pool.max-active=8# 连接池最大阻塞等待时间(使用负值表示没有限制)spring.redis.pool.max-wait=-1# 连接池中的最大空闲连接spring.redis.pool.max-idle=8# 连接池中的最小空闲连接spring.redis.pool.min-idle=0# 连接超时时间(毫秒)spring.redis.timeout=0复制代码
Config
@Configurationpublic class RedisConfig extends CachingConfigurerSupport { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory factory) { RedisTemplate redisTemplate=new RedisTemplate(); redisTemplate.setConnectionFactory(factory); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new StringRedisSerializer()); System.out.println("suscessful"); return redisTemplate; }}复制代码
测试类:
@Autowired private RedisTemplate redisTemplate; @Resource(name="redisTemplate") private HashOperations hashOperations; @Resource(name="redisTemplate") private ZSetOperations zSetOperations; @Test public void test1(){ redisTemplate.opsForValue().set("my","my"); Assert.assertEquals("my",redisTemplate.opsForValue().get("my")); } @Test public void test2() { Mapmap = new HashMap<>(); map.put("age", "13"); map.put("name", "selrain"); hashOperations.putAll("test2", map); Assert.assertEquals("13",hashOperations.get("test2","age")); hashOperations.delete("test2","age","name"); } @Test public void test3(){ zSetOperations.add("selrain","selraion",1); Assert.assertEquals("selraion",zSetOperations.range("selrain",0,1).iterator().next()); zSetOperations.remove("selrain","selraion"); } @Test public void test4(){ redisTemplate.execute((RedisConnection connection)->{ Jedis jedis=(Jedis)connection.getNativeConnection(); String s=jedis.set("test4","selrain","NX","EX",6000); return s; }); }复制代码
序列化:
- 数据会转换成字节在Redis存储,在Spring Data中,序列化的核心包是org.springframework.data.redis.serializer,想要自定义自己的序列化,实现RedisSerializer即可,默认有2种实现
- JdkSerializationRedisSerializer:RedisTemplate默认使用这个
- StringRedisSerializer:针对String类型的序列化实现,大部分的情况下使用这个就好了
Api:
RedisTemplate:
opsForValue、opsForHash、opsForZSet方法分别获取对String、hash、Zset数据结构的操作实现,一般感觉用这个就好了
HashOperations、ZSetOperations等
还可以直接注入这些抽象,这样就不用opsForHash,可以直接用,为什么不同的类型可以直接注入?看下这篇文章:
execute():
execute方法给我们暴露了RedisConnection,拿到链接后,我们可以转换成Jedis的原始链接,从而可以使用data redis不支持但是jedis支持的命令:比如测试代码test4
其他:
想不想了解Redis的配置是如何初始化的?看这篇文章:
最后
小尾巴走一波,欢迎关注我的公众号,不定期分享编程、投资、生活方面的感悟:)