近期想系统的学习下公司所用的框架结构,简单先用spring boot+mybatis打起来一个简单的工程。
使用的redis版本:
[root@localhost src]# ./redis-server -v
Redis server v=5.0.5 sha=00000000:0 malloc=libc bits=64 build=58be8d10ae8a0f31
spring-boot版本:
redis运行在centos7的虚拟机上,ip地址为192.168.31.132
看资料学习了解到mybatis的一级缓存是默认开启的,二级缓存开启需在工程启动类添加如下注解
以单节点redis作为mybatis的二级缓存的配置信息如下:
spring.redis.timeout=5000
#redis数据库索引(默认为0),使用索引为3的数据库,避免冲突
#spring.redis.database=3
#redis服务器地址
#spring.redis.host=192.168.31.132
#redis端口
#spring.redis.port=6379
#redis访问密码(默认为空)
#spring.redis.password=
#redis连接池配置
#最大可用连接数
#spring.redis.jedis.pool.max-active=8
#最大空闲连接数(默认为8,负数表示无限制)
#spring.redis.jedis.pool.max-idle=8
#最小空闲连接数(默认为0,只有正数起作用)
#spring,redis.jedis.min-idle=0
#从连接池中获取最大等待时间(默认为-1,单位为毫秒,负数表示无限制)
#spring.redis.jedis.pool.max-wait=-1
单节点使用比较简单,配置信息写好后,直接可以使用。单点测试完成后,下面是集群方式的使用:
redis集群模式配置参考如下两篇文章:
https://blog.csdn.net/huwh_/article/details/79242625这篇文章介绍的是通过redis-trib构建redis集群
https://www.cnblogs.com/gavanwanggw/p/7161000.html这篇文章介绍的直接通过redis操作命令构建集群
先通过第二篇文章的方式构建集群,操作没问题,通过本地主机192.168.50.231的windows版本的redis客户端,可以正常操作redis服务器。
然后通过程序访问,集群信息配置如下
spring.redis.cluster.max-redirects=3 spring.redis.cluster.nodes=192.168.31.132:7000,192.168.31.132:7001,192.168.31.132:7002
简单的数据库查询实现(mapper文件及相关访问swagger访问页面不在赘述)
通过swager程序访问,后台异常:
too many Cluster redirections?; nested exception is redis.clients.jedis.exceptions.JedisClusterMaxRedirectionsException: Too many Cluster redirections?
通过https://github.com/xetorthio/jedis/issues/943链接提供的回答
配置文件的路径
在nodes-7000.conf中,里面确实是127.0.0.1:7000诸如此类的ip地址加端口号,感觉应该是程序读取了这个配置文件的信息导致的错误。
然后按第一篇文章提供的方式配置集群,在执行如下命令之前一切都很顺利,出现的错误也和这位博主描述的一模一样:
./redis-trib.rb create --replicas 1 192.168.31.132:7000 192.168.31.132:7001 192.168.31.132:7002
返回的提示信息:
当前版本的redis已不再支持通过redis-trib.rb创建集群,应改为如下为方式:
redis-cli --cluster create 192.168.31.132:7000 192.168.31.132:7001 192.168.31.132:7002 --cluster-replicas 1
官方提示还是很温馨的,一遍成功,构建的集群信息如下:
从这里看 集群信息应该是对了
程序配置redis集群信息(参考spring.io的cluster操作):
从程序访问:
第一次查询结果,仍从数据库访问:
第二次的结果
可以看到,是直接从缓存查询的,应用成功。
从配置类获取connectionFactory后测试连通性的结果
测试代码:
测试结果:
连通无误。
此次主要记录了redis集群配置中的一些问题。但对于redisClusterConnection的一些api(本文的set方法),仍存在一些问题,待后续研究。