博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring-Data-Redis 解析
阅读量:5986 次
发布时间:2019-06-20

本文共 3673 字,大约阅读时间需要 12 分钟。

概述

  • 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() {        Map
map = 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的配置是如何初始化的?看这篇文章:

最后

小尾巴走一波,欢迎关注我的公众号,不定期分享编程、投资、生活方面的感悟:)

转载地址:http://npflx.baihongyu.com/

你可能感兴趣的文章
社交化分享SDK for Unity
查看>>
7、Libgdx网络操作
查看>>
创建线程的方法 Thread Runnable
查看>>
微信公众平台开发(79) 每日宜忌
查看>>
Android多线程研究(9)——读写锁
查看>>
Android中的动画详解系列【4】——Activity之间切换动画
查看>>
简明Python3教程 18.下一步是什么
查看>>
Python 3 下载安装和环境搭建
查看>>
10071 - Back to High School Physics
查看>>
DDD的好文章
查看>>
cocos2d-x改底层之动态改变UIListView中的某项在链表中的位置
查看>>
第八周学习总结
查看>>
3.Linux常用基本命令
查看>>
input输入框下拉显示tree树
查看>>
MPTCP 源码分析(一) MPTCP的三次握手
查看>>
Android EditText的设置[转]
查看>>
webstorm 10 出现不能run cordova项目
查看>>
iOS-仿智联字符图片验证码
查看>>
模块和包
查看>>
服务器托管你考虑过这些吗?
查看>>