SpringBoot整合Redis

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/cool_summer_moon/article/details/87283346

一、引言

    记录工作中springboot使用的redis配置,后面少采坑,本篇使用的是RedisTemplate来实现springboot和redis的单机版、集群版和哨兵模式。

二、步骤

1、maven依赖


 
 
  1. <dependency>
  2. <groupId>org.springframework.boot </groupId>
  3. <artifactId>spring-boot-starter-data-redis </artifactId>
  4. </dependency>

2、创建一个redis.properties的配置文件


 
 
  1. #Matser的ip地址
  2. redis.hostName= 192.168 .177 .128
  3. #端口号
  4. redis.port= 6382
  5. #如果有密码
  6. redis.password=
  7. #客户端超时时间单位是毫秒 默认是2000
  8. redis.timeout= 10000
  9. #最大空闲数
  10. redis.maxIdle= 300
  11. #连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal
  12. #redis.maxActive=600
  13. #控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性
  14. redis.maxTotal= 1000
  15. #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
  16. redis.maxWaitMillis= 1000
  17. #连接的最小空闲时间 默认1800000毫秒(30分钟)
  18. redis.minEvictableIdleTimeMillis= 300000
  19. #每次释放连接的最大数目,默认3
  20. redis.numTestsPerEvictionRun= 1024
  21. #逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
  22. redis.timeBetweenEvictionRunsMillis= 30000
  23. #是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
  24. redis.testOnBorrow= true
  25. #在空闲时检查有效性, 默认false
  26. redis.testWhileIdle= true
  27. #redis集群配置
  28. spring.redis.cluster.nodes= 192.168 .177 .128: 7001, 192.168 .177 .128: 7002, 192.168 .177 .128: 7003, 192.168 .177 .128: 7004, 192.168 .177 .128: 7005, 192.168 .177 .128: 7006
  29. spring.redis.cluster.max-redirects= 3
  30. #哨兵模式
  31. #redis.sentinel.host1=192.168.177.128
  32. #redis.sentinel.port1=26379
  33. #redis.sentinel.host2=172.20.1.231
  34. #redis.sentinel.port2=26379

3、封装redis工具类


 
 
  1. public class RedisUtil {
  2. private RedisTemplate<String, Object> redisTemplate;
  3. public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
  4. this.redisTemplate = redisTemplate;
  5. }
  6. //=============================common============================
  7. /**
  8. * 设置缓存时间
  9. *
  10. * @param key
  11. * @param timeout
  12. * @return
  13. */
  14. public Boolean expire(String key, long timeout) {
  15. try {
  16. if (timeout > 0) {
  17. redisTemplate.expire(key, timeout, TimeUnit.SECONDS);
  18. }
  19. return true;
  20. } catch (Exception e) {
  21. return false;
  22. }
  23. }
  24. /**
  25. * 获取缓存有效时间
  26. *
  27. * @param key 键 不能为null
  28. * @return 时间(秒) 返回0代表为永久有效
  29. */
  30. public long getExpire(String key) {
  31. return redisTemplate.getExpire(key, TimeUnit.SECONDS);
  32. }
  33. /**
  34. * 判断key是否存在
  35. *
  36. * @param key
  37. * @return true 存在 false不存在
  38. */
  39. public boolean hasKey(String key) {
  40. return redisTemplate.hasKey(key);
  41. }
  42. public void delete(String... key) {
  43. if (key != null && key.length >= 1) {
  44. if (key.length == 1) {
  45. redisTemplate.delete(key[ 1]);
  46. } else {
  47. redisTemplate.delete(CollectionUtils.arrayToList(key));
  48. }
  49. }
  50. }
  51. //============================String=============================
  52. /**
  53. * 普通缓存获取
  54. *
  55. * @param key
  56. * @return
  57. */
  58. public Object get(String key) {
  59. return key == null ? null : redisTemplate.opsForValue().get(key);
  60. }
  61. /**
  62. * 普通缓存存入
  63. *
  64. * @param key
  65. * @param value
  66. * @return
  67. */
  68. public boolean set(String key, Object value) {
  69. try {
  70. redisTemplate.opsForValue().set(key, value);
  71. return true;
  72. } catch (Exception e) {
  73. return false;
  74. }
  75. }
  76. /**
  77. * 普通缓存放入设置缓存时间
  78. *
  79. * @param key
  80. * @param value
  81. * @param time
  82. * @return
  83. */
  84. public boolean set(String key, String value, long time) {
  85. try {
  86. if (time > 0) {
  87. redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
  88. } else {
  89. set(key, value);
  90. }
  91. return true;
  92. } catch (Exception e) {
  93. return false;
  94. }
  95. }
  96. /**
  97. * 递增
  98. *
  99. * @param key
  100. * @param increData
  101. * @return
  102. */
  103. public long increment(String key, long increData) {
  104. if (increData < 0) {
  105. throw new RuntimeException( "数值必须大于0");
  106. }
  107. return redisTemplate.opsForValue().increment(key, increData);
  108. }
  109. /**
  110. * 递减
  111. *
  112. * @param key
  113. * @param increData
  114. * @return
  115. */
  116. public long decr(String key, long increData) {
  117. if (increData < 0) {
  118. throw new RuntimeException( "数值必须大于0");
  119. }
  120. return redisTemplate.opsForValue().increment(key, -increData);
  121. }
  122. //================================Map=================================
  123. /**
  124. * hashset
  125. *
  126. * @param key
  127. * @param map
  128. */
  129. public boolean hmset(String key, Map<String, Object> map) {
  130. try {
  131. redisTemplate.opsForHash().putAll(key, map);
  132. return true;
  133. } catch (Exception e) {
  134. return false;
  135. }
  136. }
  137. /**
  138. * hashset 放入并设置有效期
  139. *
  140. * @param key
  141. * @param map
  142. * @param time
  143. * @return
  144. */
  145. public boolean hmset(String key, Map<String, Object> map, long time) {
  146. try {
  147. redisTemplate.opsForHash().putAll(key, map);
  148. if (time > 0) {
  149. expire(key, time);
  150. }
  151. return true;
  152. } catch (Exception e) {
  153. return false;
  154. }
  155. }
  156. /**
  157. * 获取hashKey对应的所有键值
  158. * @param key
  159. * @return
  160. */
  161. public Map<Object, Object> hmget(String key) {
  162. return redisTemplate.opsForHash().entries(key);
  163. }
  164. /**
  165. * 获取hashKey对应的值
  166. * @param key 键 不能为null
  167. * @param item 项 不能为null
  168. * @return
  169. */
  170. public Object hget(String key,String item){
  171. return redisTemplate.opsForHash().get(key,item);
  172. }
  173. /**
  174. * 向一张hash表中放入数据,如果不存在将创建
  175. * @param key 键
  176. * @param item 项
  177. * @param value 值
  178. * @return
  179. */
  180. public boolean hset(String key,String item,String value){
  181. try {
  182. redisTemplate.opsForHash().put(key,item,value);
  183. return true;
  184. } catch (Exception e) {
  185. return false;
  186. }
  187. }
  188. /**
  189. * 向一张hash表中放入数据,如果不存在将创建
  190. * @param key 键
  191. * @param item 项
  192. * @param value 值
  193. * @param time 有效时间
  194. * @return
  195. */
  196. public boolean hset(String key,String item,String value,long time){
  197. try {
  198. redisTemplate.opsForHash().put(key,item,value);
  199. if(time > 0){
  200. expire(key,time);
  201. }
  202. return true;
  203. } catch (Exception e) {
  204. return false;
  205. }
  206. }
  207. /**
  208. * hash删除
  209. * @param key
  210. * @return
  211. */
  212. public void hdel(String key, Object... items){
  213. redisTemplate.opsForHash().delete(key,items);
  214. }
  215. /**
  216. * 判断hash表中是否有该项的值
  217. * @param key 键 不能为null
  218. * @param item 项 不能为null
  219. * @return true 存在 false不存在
  220. */
  221. public boolean hHasKey(String key,String item){
  222. return redisTemplate.opsForHash().hasKey(key,item);
  223. }
  224. /**
  225. * hash递增 如果不存在,就会创建一个 并把新增后的值返回
  226. * @param key 键
  227. * @param item 项
  228. * @param time 要增加几(大于0)
  229. * @return
  230. */
  231. public long hincre(String key,String item,long time){
  232. return redisTemplate.opsForHash().increment(key,item,time);
  233. }
  234. /**
  235. * hash递减 把减少后的值返回
  236. * @param key 键
  237. * @param item 项
  238. * @param time 要增加几(大于0)
  239. * @return
  240. */
  241. public long hdecr(String key,String item,long time){
  242. return redisTemplate.opsForHash().increment(key,item,-time);
  243. }
  244. //============================set=============================
  245. /**
  246. * 根据key获取Set中的所有值
  247. * @param key 键
  248. * @return
  249. */
  250. public Set<Object> sGet(String key){
  251. try {
  252. return redisTemplate.opsForSet().members(key);
  253. } catch (Exception e){
  254. return null;
  255. }
  256. }
  257. /**
  258. * 根据value从一个set中查询,是否存在
  259. * @param key 键
  260. * @param value 值
  261. * @return true 存在 false不存在
  262. */
  263. public boolean sHasKey(String key,String value){
  264. try {
  265. return redisTemplate.opsForSet().isMember(key, value);
  266. } catch (Exception e){
  267. return false;
  268. }
  269. }
  270. /**
  271. * 将数据放入set缓存
  272. * @param key 键
  273. * @param values 值 可以是多个
  274. * @return 成功个数
  275. * */
  276. public long sSet(String key,Object... values){
  277. return redisTemplate.opsForSet().add(key,values);
  278. }
  279. /**
  280. * 将set数据放入缓存
  281. * @param key 键
  282. * @param time 时间(秒)
  283. * @param values 值 可以是多个
  284. * @return 成功个数
  285. * */
  286. public long sSetAndTime(String key,long time,Object... values){
  287. try {
  288. Long count = redisTemplate.opsForSet().add(key, values);
  289. if(time > 0){
  290. expire(key,time);
  291. }
  292. return count;
  293. } catch (Exception e) {
  294. return 0;
  295. }
  296. }
  297. /**
  298. * 获取set缓存的长度
  299. * @param key 键
  300. * @return
  301. * */
  302. public long sGetSetSize(String key){
  303. try {
  304. Long count = redisTemplate.opsForSet().size(key);
  305. return count;
  306. } catch (Exception e) {
  307. return 0;
  308. }
  309. }
  310. /**
  311. * 移除值为value的
  312. * @param key 键
  313. * @param values 值 可以是多个
  314. * @return 移除的个数
  315. */
  316. public long setRemove(String key,Object... values){
  317. try {
  318. Long count = redisTemplate.opsForSet().remove(key,values);
  319. return count;
  320. } catch (Exception e) {
  321. return 0;
  322. }
  323. }
  324. //===============================list=================================
  325. /**
  326. * 获取list缓存的内容
  327. * @param key 键
  328. * @param start 开始
  329. * @param end 结束 0 到 -1代表所有值
  330. * @return
  331. */
  332. public List<Object> lGet(String key,long start,long end){
  333. try {
  334. return redisTemplate.opsForList().range(key, start, end);
  335. } catch (Exception e) {
  336. return null;
  337. }
  338. }
  339. /**
  340. * 获取list缓存的长度
  341. * @param key 键
  342. * @return
  343. */
  344. public long lGetSize(String key){
  345. try {
  346. return redisTemplate.opsForList().size(key);
  347. } catch (Exception e){
  348. return 0;
  349. }
  350. }
  351. /**
  352. * 通过索引 获取list中的值
  353. * @param key 键
  354. * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推
  355. * @return
  356. */
  357. public Object lIndex(String key,long index){
  358. try {
  359. return redisTemplate.opsForList().index(key,index);
  360. } catch (Exception e){
  361. return null;
  362. }
  363. }
  364. /**
  365. * 将list放入缓存
  366. * @param key 键
  367. * @param value 值
  368. */
  369. public boolean lSet(String key,String value){
  370. try {
  371. redisTemplate.opsForList().rightPush(key,value);
  372. return true;
  373. } catch (Exception e){
  374. return false;
  375. }
  376. }
  377. /**
  378. * 将list放入缓存
  379. * @param key 键
  380. * @param value 值
  381. * @param time 时间(秒)
  382. * @return
  383. */
  384. public boolean lSet(String key,String value,long time){
  385. try {
  386. redisTemplate.opsForList().rightPush(key,value);
  387. if(time > 0) expire(key,time);
  388. return true;
  389. } catch (Exception e){
  390. return false;
  391. }
  392. }
  393. /**
  394. * 将list放入缓存
  395. * @param key 键
  396. * @param list 值
  397. */
  398. public boolean lSet(String key,List<Object> list){
  399. try {
  400. redisTemplate.opsForList().rightPushAll(key,list);
  401. return true;
  402. } catch (Exception e){
  403. return false;
  404. }
  405. }
  406. /**
  407. * 将list放入缓存
  408. * @param key 键
  409. * @param list 值
  410. * @param time 时间(秒)
  411. */
  412. public boolean lSet(String key,List<Object> list,long time){
  413. try {
  414. redisTemplate.opsForList().rightPushAll(key,list);
  415. if(time > 0) expire(key,time);
  416. return true;
  417. } catch (Exception e){
  418. return false;
  419. }
  420. }
  421. /**
  422. * 根据索引修改list中的某条数据
  423. * @param key 键
  424. * @param index 索引
  425. * @param value 值
  426. * @return
  427. */
  428. public boolean lUpdateIndex(String key,long index,String value){
  429. try {
  430. redisTemplate.opsForList().set(key,index,value);
  431. return true;
  432. } catch (Exception e){
  433. return false;
  434. }
  435. }
  436. /**
  437. * 移除N个值为value
  438. * @param key 键
  439. * @param count 移除多少个
  440. * @param value 值
  441. * @return 移除的个数
  442. */
  443. public long lRemove(String key,long count,String value){
  444. try {
  445. Long remove = redisTemplate.opsForList().remove(key, count, value);
  446. return remove;
  447. } catch (Exception e){
  448. return 0;
  449. }
  450. }
  451. }

4、redis单机版配置文件


 
 
  1. @Configuration
  2. @PropertySource("classpath:config/redis.properties")
  3. public class RedisConfig extends CachingConfigurerSupport {
  4. @Value("${spring.redis.host}")
  5. private String host;
  6. @Value("${spring.redis.timeout}")
  7. private Integer timeout;
  8. @Value("${spring.redis.port}")
  9. private Integer port;
  10. @Value("${spring.redis.jedis.pool.max-idle}")
  11. private Integer maxIdle;
  12. @Value("${spring.redis.jedis.pool.min-idle}")
  13. private Integer minIdle;
  14. @Value("${spring.redis.jedis.pool.max-wait}")
  15. private Integer maxWait;
  16. @Value("${spring.redis.jedis.pool.max-active}")
  17. private Integer maxActive;
  18. @Autowired
  19. private JedisConnectionFactory jedisConnectionFactory;
  20. @Bean
  21. @Override
  22. public CacheManager cacheManager(){
  23. RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(jedisConnectionFactory);
  24. return builder.build();
  25. }
  26. @Bean
  27. public RedisTemplate<String,Object> redisTemplate(JedisConnectionFactory jedisConnectionFactory){
  28. RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
  29. redisTemplate.setConnectionFactory(jedisConnectionFactory);
  30. redisTemplate.setKeySerializer(new StringRedisSerializer());
  31. redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
  32. redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  33. redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
  34. //开启事务
  35. redisTemplate.setEnableTransactionSupport( true);
  36. return redisTemplate;
  37. }
  38. @Bean
  39. public JedisPoolConfig jedisPoolConfig(){
  40. JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  41. jedisPoolConfig.setMaxIdle(maxIdle);
  42. jedisPoolConfig.setMinIdle(minIdle);
  43. jedisPoolConfig.setMaxWaitMillis(maxWait);
  44. jedisPoolConfig.setMaxTotal(maxActive);
  45. return jedisPoolConfig;
  46. }
  47. @Bean
  48. public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig){
  49. JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig);
  50. jedisConnectionFactory.setPort(port);
  51. jedisConnectionFactory.setPoolConfig(jedisPoolConfig);
  52. jedisConnectionFactory.setHostName(host);
  53. jedisConnectionFactory.setTimeout(timeout);
  54. return jedisConnectionFactory;
  55. }
  56. @Bean(name = "redisUtil")
  57. public RedisUtil redisUtil(RedisTemplate<String,Object> redisTemplate){
  58. RedisUtil redisUtil = new RedisUtil();
  59. redisUtil.setRedisTemplate(redisTemplate);
  60. return redisUtil;
  61. }
  62. }

5、redis集群版配置


 
 
  1. @Configuration
  2. @PropertySource("classpath:config/redis.properties")
  3. public class RedisConfig {
  4. @Value("${redis.maxIdle}")
  5. private Integer maxIdle;
  6. @Value("${redis.maxTotal}")
  7. private Integer maxTotal;
  8. @Value("${redis.maxWaitMillis}")
  9. private Integer maxWaitMillis;
  10. @Value("${redis.minEvictableIdleTimeMillis}")
  11. private Integer minEvictableIdleTimeMillis;
  12. @Value("${redis.numTestsPerEvictionRun}")
  13. private Integer numTestsPerEvictionRun;
  14. @Value("${redis.timeBetweenEvictionRunsMillis}")
  15. private long timeBetweenEvictionRunsMillis;
  16. @Value("${redis.testOnBorrow}")
  17. private boolean testOnBorrow;
  18. @Value("${redis.testWhileIdle}")
  19. private boolean testWhileIdle;
  20. @Value("${spring.redis.cluster.nodes}")
  21. private String clusterNodes;
  22. @Value("${spring.redis.cluster.max-redirects}")
  23. private Integer mmaxRedirectsac;
  24. /**
  25. * JedisPoolConfig 连接池
  26. * @return
  27. */
  28. @Bean
  29. public JedisPoolConfig jedisPoolConfig() {
  30. JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  31. // 最大空闲数
  32. jedisPoolConfig.setMaxIdle(maxIdle);
  33. // 连接池的最大数据库连接数
  34. jedisPoolConfig.setMaxTotal(maxTotal);
  35. // 最大建立连接等待时间
  36. jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
  37. // 逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
  38. jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
  39. // 每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
  40. jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
  41. // 逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
  42. jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
  43. // 是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
  44. jedisPoolConfig.setTestOnBorrow(testOnBorrow);
  45. // 在空闲时检查有效性, 默认false
  46. jedisPoolConfig.setTestWhileIdle(testWhileIdle);
  47. return jedisPoolConfig;
  48. }
  49. /**
  50. * Redis集群的配置
  51. * @return RedisClusterConfiguration
  52. * @autor lpl
  53. * @date 2017年12月22日
  54. * @throws
  55. */
  56. @Bean
  57. public RedisClusterConfiguration redisClusterConfiguration(){
  58. RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
  59. //Set<RedisNode> clusterNodes
  60. String[] serverArray = clusterNodes.split( ",");
  61. Set<RedisNode> nodes = new HashSet<RedisNode>();
  62. for(String ipPort:serverArray){
  63. String[] ipAndPort = ipPort.split( ":");
  64. nodes.add(new RedisNode(ipAndPort[ 0].trim(),Integer.valueOf(ipAndPort[ 1])));
  65. }
  66. redisClusterConfiguration.setClusterNodes(nodes);
  67. redisClusterConfiguration.setMaxRedirects(mmaxRedirectsac);
  68. return redisClusterConfiguration;
  69. }
  70. /**
  71. * 配置工厂
  72. * @Title: JedisConnectionFactory
  73. * @param @param jedisPoolConfig
  74. * @param @return
  75. * @return JedisConnectionFactory
  76. * @autor lpl
  77. * @date 2017年12月22日
  78. * @throws
  79. */
  80. @Bean
  81. public JedisConnectionFactory JedisConnectionFactory(JedisPoolConfig jedisPoolConfig,RedisClusterConfiguration redisClusterConfiguration){
  82. JedisConnectionFactory JedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration,jedisPoolConfig);
  83. return JedisConnectionFactory;
  84. }
  85. /**
  86. * 实例化 RedisTemplate 对象
  87. *
  88. * @return
  89. */
  90. @Bean
  91. public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
  92. RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
  93. initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
  94. return redisTemplate;
  95. }
  96. /**
  97. * 设置数据存入 redis 的序列化方式,并开启事务
  98. *
  99. * @param redisTemplate
  100. * @param factory
  101. */
  102. private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
  103. //如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!
  104. redisTemplate.setKeySerializer(new StringRedisSerializer());
  105. redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  106. redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
  107. redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
  108. // 开启事务
  109. redisTemplate.setEnableTransactionSupport( true);
  110. redisTemplate.setConnectionFactory(factory);
  111. }
  112. /**
  113. * 注入封装RedisTemplate
  114. * @Title: redisUtil
  115. * @return RedisUtil
  116. * @autor lpl
  117. * @date 2017年12月21日
  118. * @throws
  119. */
  120. @Bean(name = "redisUtil")
  121. public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {
  122. RedisUtil redisUtil = new RedisUtil();
  123. redisUtil.setRedisTemplate(redisTemplate);
  124. return redisUtil;
  125. }

6、redis哨兵版配置


 
 
  1. @Configuration
  2. @PropertySource("classpath:config/redis.properties")
  3. public class RedisConfig {
  4. @Value("${redis.maxIdle}")
  5. private Integer maxIdle;
  6. @Value("${redis.maxTotal}")
  7. private Integer maxTotal;
  8. @Value("${redis.maxWaitMillis}")
  9. private Integer maxWaitMillis;
  10. @Value("${redis.minEvictableIdleTimeMillis}")
  11. private Integer minEvictableIdleTimeMillis;
  12. @Value("${redis.numTestsPerEvictionRun}")
  13. private Integer numTestsPerEvictionRun;
  14. @Value("${redis.timeBetweenEvictionRunsMillis}")
  15. private long timeBetweenEvictionRunsMillis;
  16. @Value("${redis.testOnBorrow}")
  17. private boolean testOnBorrow;
  18. @Value("${redis.testWhileIdle}")
  19. private boolean testWhileIdle;
  20. @Value("${spring.redis.cluster.nodes}")
  21. private String clusterNodes;
  22. @Value("${spring.redis.cluster.max-redirects}")
  23. private Integer mmaxRedirectsac;
  24. /**
  25. * JedisPoolConfig 连接池
  26. * @return
  27. */
  28. @Bean
  29. public JedisPoolConfig jedisPoolConfig() {
  30. JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  31. // 最大空闲数
  32. jedisPoolConfig.setMaxIdle(maxIdle);
  33. // 连接池的最大数据库连接数
  34. jedisPoolConfig.setMaxTotal(maxTotal);
  35. // 最大建立连接等待时间
  36. jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
  37. // 逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
  38. jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
  39. // 每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
  40. jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
  41. // 逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
  42. jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
  43. // 是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
  44. jedisPoolConfig.setTestOnBorrow(testOnBorrow);
  45. // 在空闲时检查有效性, 默认false
  46. jedisPoolConfig.setTestWhileIdle(testWhileIdle);
  47. return jedisPoolConfig;
  48. }
  49. /**
  50. * 配置redis的哨兵
  51. * @return RedisSentinelConfiguration
  52. * @autor lpl
  53. * @date 2017年12月21日
  54. * @throws
  55. */
  56. @Bean
  57. public RedisSentinelConfiguration sentinelConfiguration(){
  58. RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();
  59. //配置matser的名称
  60. RedisNode redisNode = new RedisNode(hostName, port);
  61. redisNode.setName( "mymaster");
  62. redisSentinelConfiguration.master(redisNode);
  63. //配置redis的哨兵sentinel
  64. RedisNode senRedisNode = new RedisNode(senHost1,senPort1);
  65. Set<RedisNode> redisNodeSet = new HashSet<>();
  66. redisNodeSet.add(senRedisNode);
  67. redisSentinelConfiguration.setSentinels(redisNodeSet);
  68. return redisSentinelConfiguration;
  69. }
  70. /**
  71. * 配置工厂
  72. * @param jedisPoolConfig
  73. * @return
  74. */
  75. @Bean
  76. public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig,RedisSentinelConfiguration sentinelConfig) {
  77. JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(sentinelConfig,jedisPoolConfig);
  78. return jedisConnectionFactory;
  79. }
  80. /**
  81. * 实例化 RedisTemplate 对象
  82. *
  83. * @return
  84. */
  85. @Bean
  86. public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
  87. RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
  88. initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
  89. return redisTemplate;
  90. }
  91. /**
  92. * 设置数据存入 redis 的序列化方式,并开启事务
  93. *
  94. * @param redisTemplate
  95. * @param factory
  96. */
  97. private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
  98. //如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!
  99. redisTemplate.setKeySerializer(new StringRedisSerializer());
  100. redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  101. redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
  102. redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
  103. // 开启事务
  104. redisTemplate.setEnableTransactionSupport( true);
  105. redisTemplate.setConnectionFactory(factory);
  106. }
  107. /**
  108. * 封装RedisTemplate
  109. * @Title: redisUtil
  110. * @return RedisUtil
  111. * @autor lpl
  112. * @date 2017年12月21日
  113. * @throws
  114. */
  115. @Bean(name = "redisUtil")
  116. public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {
  117. RedisUtil redisUtil = new RedisUtil();
  118. redisUtil.setRedisTemplate(redisTemplate);
  119. return redisUtil;
  120. }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值