1.在pom文件中加入redis依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>redis.clients</groupId>
  7. <artifactId>jedis</artifactId>
  8. <version>3.0.1</version>
  9. </dependency>

2.在application.yml文件中配置redis属性

  1. spring:
  2. redis:
  3. database: 0 # Redis数据库索引(默认为0
  4. host: 127.0.0.1 # Redis服务器地址
  5. port: 6379 # Redis服务器连接端口
  6. password: huang # Redis服务器连接密码(默认为空)
  7. jedis:
  8. pool:
  9. max-active: 500 # 连接池最大连接数(使用负值表示没有限制)
  10. max-wait: 10000 # 连接池最大阻塞等待时间(使用负值表示没有限制)
  11. max-idle: 500 # 连接池中的最大空闲连接
  12. min-idle: 8 # 连接池中的最小空闲连接
  13. timeout: 1000 # 连接超时时间(毫秒)

3.使用

1.简单实用jedis

  1. public void test(){
  2. Jedis jedis= new Jedis("127.0.0.1");
  3. jedis.auth("huang");
  4. System.out.println("服务正在运行: "+jedis.ping());
  5. Set<String> keys = jedis.keys("*");
  6. for (String key : keys) {
  7. System.out.println(key+"-"+jedis.get(key));
  8. }
  9. // 字符串实例
  10. jedis.set("myKey","myKey");
  11. System.out.println("redis 存储的字符串为:"+jedis.get("myKey"));
  12. // List实例
  13. jedis.lpush("myList", "list1");
  14. jedis.lpush("myList", "list2");
  15. jedis.lpush("myList", "list3");
  16. List<String> list = jedis.lrange("myList", 0 ,2);
  17. for (String s : list) {
  18. System.out.println("列表项为: " + s);
  19. }
  20. }

2.配置Redis,创建redisUitls工具类

2.1配置Redis

  1. package com.example.demo.redis;
  2. import com.fasterxml.jackson.annotation.JsonAutoDetect;
  3. import com.fasterxml.jackson.annotation.PropertyAccessor;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.cache.annotation.CachingConfigurerSupport;
  7. import org.springframework.cache.annotation.EnableCaching;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.data.redis.connection.RedisConnectionFactory;
  11. import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
  12. import org.springframework.data.redis.core.*;
  13. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  14. import org.springframework.data.redis.serializer.StringRedisSerializer;
  15. import redis.clients.jedis.JedisPoolConfig;
  16. @Configuration
  17. @EnableCaching
  18. public class RedisConfig extends CachingConfigurerSupport {
  19. @Value("${spring.redis.host}")
  20. private String host;
  21. @Value("${spring.redis.port}")
  22. private Integer port;
  23. @Value("${spring.redis.password}")
  24. private String password;
  25. @Value("${spring.redis.timeout}")
  26. private Integer timout;
  27. @Value("${spring.redis.jedis.pool.max-idle}")
  28. private Integer maxIdl;//链接池最大空闲数
  29. @Value("${spring.redis.jedis.pool.min-idle}")
  30. private Integer minIdl;//链接池最小空闲数
  31. @Value("${spring.redis.jedis.pool.max-active}")
  32. private Integer maxActive;//链接池最大链接数
  33. @Value("${spring.redis.jedis.pool.max-wait}")
  34. private Integer maxWait;//连接池最大阻塞时间
  35. @Value("${spring.redis.database}")
  36. private Integer database;//redis数据库索引数
  37. @Bean
  38. public RedisConnectionFactory getfactory(){
  39. JedisPoolConfig config=new JedisPoolConfig();
  40. config.setMaxIdle(maxIdl);
  41. config.setMinIdle(minIdl);
  42. config.setMaxWaitMillis(maxWait);
  43. config.setMaxTotal(maxActive);
  44. //获取链接检查有效性
  45. config.setTestOnBorrow(false);
  46. //部署时为true
  47. // config.setTestOnCreate(false);
  48. //返回验证信息
  49. config.setTestOnReturn(false);
  50. //链接最近是否阻塞
  51. config.setBlockWhenExhausted(true);
  52. JedisConnectionFactory jedisConnectionFactory=new JedisConnectionFactory(config);
  53. jedisConnectionFactory.setHostName(host);
  54. jedisConnectionFactory.setPort(port);
  55. jedisConnectionFactory.setDatabase(database);
  56. if(!password.isEmpty()){
  57. jedisConnectionFactory.setPassword(password);
  58. }
  59. jedisConnectionFactory.setTimeout(timout);
  60. return jedisConnectionFactory;
  61. }
  62. @Bean
  63. public RedisTemplate<String,Object> redisTemplate(){
  64. RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();
  65. //配置链接工厂
  66. redisTemplate.setConnectionFactory(getfactory());
  67. //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
  68. Jackson2JsonRedisSerializer jsonRedisSerializer=new Jackson2JsonRedisSerializer(Object.class);
  69. ObjectMapper om=new ObjectMapper();
  70. // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
  71. om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  72. // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
  73. om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  74. jsonRedisSerializer.setObjectMapper(om);
  75. //值采用json系列化
  76. redisTemplate.setValueSerializer(jsonRedisSerializer);
  77. //使用StringRedisSerializer来序列化和反序列化redis的key值
  78. redisTemplate.setKeySerializer(new StringRedisSerializer());
  79. //设置hash key和value的序列化模式
  80. redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  81. redisTemplate.setHashValueSerializer(jsonRedisSerializer);
  82. redisTemplate.afterPropertiesSet();
  83. return redisTemplate;
  84. }
  85. /**
  86. * 对hash类型的数据操作
  87. * @param redisTemplate
  88. * @return
  89. */
  90. @Bean
  91. public HashOperations<String,String,Object> hashOperations(RedisTemplate<String,Object> redisTemplate){
  92. return redisTemplate.opsForHash();
  93. }
  94. /**
  95. * 对redis字符串类型的操作
  96. * @param redisTemplate
  97. * @return
  98. */
  99. @Bean
  100. public ValueOperations<String,Object> valueOperations(RedisTemplate<String,Object> redisTemplate){
  101. return redisTemplate.opsForValue();
  102. }
  103. /**
  104. * 对链表类型的操作
  105. * @param redisTemplate
  106. * @return
  107. */
  108. @Bean
  109. public ListOperations<String,Object> listOperations(RedisTemplate<String,Object> redisTemplate){
  110. return redisTemplate.opsForList();
  111. }
  112. /**
  113. * 对redis无序集合类型的数据操作
  114. * @param redisTemplate
  115. * @return
  116. */
  117. @Bean
  118. public SetOperations<String,Object> setOperations(RedisTemplate<String,Object> redisTemplate){
  119. return redisTemplate.opsForSet();
  120. }
  121. /**
  122. * 对redis有序集合类型的数据操作
  123. * @param redisTemplate
  124. * @return
  125. */
  126. public ZSetOperations<String,Object> zSetOperations(RedisTemplate<String,Object> redisTemplate){
  127. return redisTemplate.opsForZSet();
  128. }
  129. }

2.2创建redisUitls工具类

  1. package com.example.demo.redis;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.data.redis.core.BoundListOperations;
  4. import org.springframework.data.redis.core.RedisConnectionUtils;
  5. import org.springframework.data.redis.core.RedisTemplate;
  6. import org.springframework.stereotype.Component;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.Set;
  10. import java.util.concurrent.TimeUnit;
  11. @Component
  12. public class RedisUtil {
  13. @Autowired
  14. private RedisTemplate<String,Object> redisTemplate;
  15. public RedisUtil(RedisTemplate<String,Object> redisTemplate) {
  16. this.redisTemplate=redisTemplate;
  17. }
  18. //释放连接池资源
  19. public void backRedis(){
  20. RedisConnectionUtils.unbindConnection(redisTemplate.getConnectionFactory());
  21. }
  22. /**
  23. * 指定缓存失效时间
  24. * @param key 键
  25. * @param time 时间(秒)
  26. * @return
  27. */
  28. public boolean expire(String key,long time){
  29. try {
  30. if(time>0){
  31. redisTemplate.expire(key,time, TimeUnit.SECONDS);
  32. }
  33. return true;
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. return false;
  37. }finally{
  38. backRedis();//释放连接资源
  39. }
  40. }
  41. /**
  42. * 根据key 获取过期时间
  43. * @param key 键 不能为null
  44. * @return 时间(秒) 返回0代表为永久有效
  45. */
  46. public long getExpire(String key){
  47. try {
  48. return redisTemplate.getExpire(key,TimeUnit.SECONDS);
  49. } catch (Exception e) {
  50. e.printStackTrace();
  51. return 0;
  52. }finally{
  53. backRedis();//释放连接资源
  54. }
  55. }
  56. /**
  57. * 判断key是否存在
  58. * @param key 键
  59. * @return true 存在 false不存在
  60. */
  61. public boolean hasKey(String key){
  62. try {
  63. return redisTemplate.hasKey(key);
  64. } catch (Exception e) {
  65. e.printStackTrace();
  66. return false;
  67. }finally{
  68. backRedis();//释放连接资源
  69. }
  70. }
  71. /**
  72. * 删除一个缓存
  73. * @param key 可以传一个值
  74. */
  75. public void delOne(String key){
  76. try {
  77. redisTemplate.delete(key);
  78. } catch (Exception e) {
  79. e.printStackTrace();
  80. }finally{
  81. backRedis();//释放连接资源
  82. }
  83. }
  84. /**
  85. * 删除多个缓存
  86. * @param keys
  87. */
  88. public void delKeys(List<String> keys){
  89. try {
  90. redisTemplate.delete(keys);
  91. } catch (Exception e) {
  92. e.printStackTrace();
  93. }finally{
  94. backRedis();//释放连接资源
  95. }
  96. }
  97. //***************** String **********************
  98. /**
  99. * 普通缓存获取
  100. * @param key 键
  101. * @return 值
  102. */
  103. public Object get(String key){
  104. try {
  105. return key==null?null:redisTemplate.opsForValue().get(key);
  106. } catch (Exception e) {
  107. e.printStackTrace();
  108. return null;
  109. }finally{
  110. backRedis();//释放连接资源
  111. }
  112. }
  113. /**
  114. * 普通缓存放入
  115. * @param key 键
  116. * @param value 值
  117. * @return true成功 false失败
  118. */
  119. public boolean set(String key,Object value) {
  120. try {
  121. redisTemplate.opsForValue().set(key, value);
  122. return true;
  123. } catch (Exception e) {
  124. e.printStackTrace();
  125. return false;
  126. }finally{
  127. backRedis();//释放连接资源
  128. }
  129. }
  130. /**
  131. * 普通缓存放入并设置时间
  132. * @param key 键
  133. * @param value 值
  134. * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
  135. * @return true成功 false 失败
  136. */
  137. public boolean set(String key,Object value,long time){
  138. try {
  139. if(time>0){
  140. redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
  141. }else{
  142. set(key, value);
  143. }
  144. return true;
  145. } catch (Exception e) {
  146. e.printStackTrace();
  147. return false;
  148. }finally{
  149. backRedis();
  150. }
  151. }
  152. /**
  153. * 递增
  154. * @param key 键
  155. * @param delta 要增加几(大于0)
  156. * @return
  157. */
  158. public long incr(String key, long delta){
  159. if(delta<0){
  160. throw new RuntimeException("递增因子必须大于0");
  161. }
  162. try {
  163. return redisTemplate.opsForValue().increment(key, delta);
  164. } catch (Exception e) {
  165. e.printStackTrace();
  166. return 0;
  167. }finally{
  168. backRedis();//释放连接资源
  169. }
  170. }
  171. /**
  172. * 递减
  173. * @param key 键
  174. * @param delta 要减少几(小于0)
  175. * @return
  176. */
  177. public long decr(String key, long delta){
  178. if(delta<0){
  179. throw new RuntimeException("递减因子必须大于0");
  180. }
  181. try {
  182. return redisTemplate.opsForValue().increment(key, -delta);
  183. } catch (Exception e) {
  184. e.printStackTrace();
  185. return 0;
  186. }finally{
  187. backRedis();//释放连接资源
  188. }
  189. }
  190. //============================== Hash ===============================
  191. /**
  192. * HashGet
  193. * @param key 键 不能为null
  194. * @param item 项 不能为null
  195. * @return 值
  196. */
  197. public Object hGet(String key,String item){
  198. try {
  199. return redisTemplate.opsForHash().get(key, item);
  200. } catch (Exception e) {
  201. e.printStackTrace();
  202. return null;
  203. }finally{
  204. backRedis();//释放连接资源
  205. }
  206. }
  207. /**
  208. * 获取hashKey对应的所有键值
  209. * @param key 键
  210. * @return 对应的多个键值
  211. */
  212. public Map<Object,Object> hmGet(String key){
  213. try {
  214. return redisTemplate.opsForHash().entries(key);
  215. } catch (Exception e) {
  216. e.printStackTrace();
  217. return null;
  218. }finally{
  219. backRedis();//释放连接资源
  220. }
  221. }
  222. /**
  223. * HashSet
  224. * @param key 键
  225. * @param map 对应多个键值
  226. * @return true 成功 false 失败
  227. */
  228. public boolean hMapSet(String key, Map<String,Object> map){
  229. try {
  230. redisTemplate.opsForHash().putAll(key, map);
  231. return true;
  232. } catch (Exception e) {
  233. e.printStackTrace();
  234. return false;
  235. }finally{
  236. backRedis();
  237. }
  238. }
  239. /**
  240. * HashSet 并设置时间
  241. * @param key 键
  242. * @param map 对应多个键值
  243. * @param time 时间(秒)
  244. * @return true成功 false失败
  245. */
  246. public boolean hmSetTime(String key, Map<String,Object> map, long time){
  247. try {
  248. redisTemplate.opsForHash().putAll(key, map);
  249. if(time>0){
  250. expire(key, time);
  251. }
  252. return true;
  253. } catch (Exception e) {
  254. e.printStackTrace();
  255. return false;
  256. }finally{
  257. backRedis();
  258. }
  259. }
  260. /**
  261. * 向一张hash表中放入数据,如果不存在将创建
  262. * @param key 键
  263. * @param item 项
  264. * @param value 值
  265. * @return true 成功 false失败
  266. */
  267. public boolean hSave(String key,String item,Object value) {
  268. try {
  269. redisTemplate.opsForHash().put(key, item, value);
  270. return true;
  271. } catch (Exception e) {
  272. e.printStackTrace();
  273. return false;
  274. }finally{
  275. backRedis();
  276. }
  277. }
  278. /**
  279. * 向一张hash表中放入数据,如果不存在将创建
  280. * @param key 键
  281. * @param item 项
  282. * @param value 值
  283. * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
  284. * @return true 成功 false失败
  285. */
  286. public boolean hSaveTime(String key,String item,Object value,long time) {
  287. try {
  288. redisTemplate.opsForHash().put(key, item, value);
  289. if(time>0){
  290. expire(key, time);
  291. }
  292. return true;
  293. } catch (Exception e) {
  294. e.printStackTrace();
  295. return false;
  296. }finally{
  297. backRedis();
  298. }
  299. }
  300. /**
  301. * 删除hash表中的值
  302. * @param key 键 不能为null
  303. * @param item 项 可以使多个 不能为null
  304. */
  305. public void hDel(String key, Object item){
  306. try {
  307. redisTemplate.opsForHash().delete(key,item);
  308. } catch (Exception e) {
  309. e.printStackTrace();
  310. }finally{
  311. backRedis();
  312. }
  313. }
  314. /**
  315. * 判断hash表中是否有该项的值
  316. * @param key 键 不能为null
  317. * @param item 项 不能为null
  318. * @return true 存在 false不存在
  319. */
  320. public boolean hHasKey(String key, String item){
  321. try {
  322. return redisTemplate.opsForHash().hasKey(key, item);
  323. } catch (Exception e) {
  324. e.printStackTrace();
  325. return false;
  326. }finally{
  327. backRedis();
  328. }
  329. }
  330. /**
  331. * hash递增 如果不存在,就会创建一个 并把新增后的值返回
  332. * @param key 键
  333. * @param item 项
  334. * @param by 要增加几(大于0)
  335. * @return
  336. */
  337. public double hIncr(String key, String item,double by){
  338. try {
  339. return redisTemplate.opsForHash().increment(key, item, by);
  340. } catch (Exception e) {
  341. e.printStackTrace();
  342. return 0;
  343. }finally{
  344. backRedis();
  345. }
  346. }
  347. /**
  348. * hash递减
  349. * @param key 键
  350. * @param item 项
  351. * @param by 要减少记(小于0)
  352. * @return
  353. */
  354. public double hDecr(String key, String item,double by){
  355. try {
  356. return redisTemplate.opsForHash().increment(key, item,-by);
  357. } catch (Exception e) {
  358. e.printStackTrace();
  359. return 0;
  360. }finally{
  361. backRedis();
  362. }
  363. }
  364. //=========================== set ============================
  365. /**
  366. * 根据key获取Set中的所有值
  367. * @param key 键
  368. * @return
  369. */
  370. public Set<Object> sGet(String key){
  371. try {
  372. return redisTemplate.opsForSet().members(key);
  373. } catch (Exception e) {
  374. e.printStackTrace();
  375. return null;
  376. }finally{
  377. backRedis();
  378. }
  379. }
  380. /**
  381. * 根据value从一个set中查询,是否存在
  382. * @param key 键
  383. * @param value 值
  384. * @return true 存在 false不存在
  385. */
  386. public boolean sHasKey(String key,Object value){
  387. try {
  388. return redisTemplate.opsForSet().isMember(key, value);
  389. } catch (Exception e) {
  390. e.printStackTrace();
  391. return false;
  392. }finally{
  393. backRedis();
  394. }
  395. }
  396. /**
  397. * 将数据放入set缓存
  398. * @param key 键
  399. * @param values 值 可以是多个
  400. * @return 成功个数
  401. */
  402. public long sSet(String key, Object values) {
  403. try {
  404. return redisTemplate.opsForSet().add(key, values);
  405. } catch (Exception e) {
  406. e.printStackTrace();
  407. return 0;
  408. }finally{
  409. backRedis();
  410. }
  411. }
  412. /**
  413. * 将set数据放入缓存
  414. * @param key 键
  415. * @param time 时间(秒)
  416. * @param values 值 可以是多个
  417. * @return 成功个数
  418. */
  419. public long sSetAndTime(String key,long time,Object values) {
  420. try {
  421. Long count = redisTemplate.opsForSet().add(key, values);
  422. if(time>0) {
  423. expire(key, time);
  424. }
  425. return count;
  426. } catch (Exception e) {
  427. e.printStackTrace();
  428. return 0;
  429. }finally{
  430. backRedis();
  431. }
  432. }
  433. /**
  434. * 获取set缓存的长度
  435. * @param key 键
  436. * @return
  437. */
  438. public long sGetSetSize(String key){
  439. try {
  440. return redisTemplate.opsForSet().size(key);
  441. } catch (Exception e) {
  442. e.printStackTrace();
  443. return 0;
  444. }finally{
  445. backRedis();
  446. }
  447. }
  448. /**
  449. * 移除值为value的
  450. * @param key 键
  451. * @param values 值 可以是多个
  452. * @return 移除的个数
  453. */
  454. public long setRemove(String key, Object values) {
  455. try {
  456. Long count = redisTemplate.opsForSet().remove(key, values);
  457. return count;
  458. } catch (Exception e) {
  459. e.printStackTrace();
  460. return 0;
  461. }finally{
  462. backRedis();
  463. }
  464. }
  465. //===============================list=================================
  466. /**
  467. * 获取list缓存的内容
  468. * @param key 键
  469. * @param start 开始
  470. * @param end 结束 0 到 -1代表所有值
  471. * @return
  472. */
  473. public List<Object> lGet(String key, long start, long end){
  474. try {
  475. return redisTemplate.opsForList().range(key, start, end);
  476. } catch (Exception e) {
  477. e.printStackTrace();
  478. return null;
  479. }finally{
  480. backRedis();
  481. }
  482. }
  483. /**
  484. * 获取list缓存的长度
  485. * @param key 键
  486. * @return
  487. */
  488. public long lGetListSize(String key){
  489. try {
  490. return redisTemplate.opsForList().size(key);
  491. } catch (Exception e) {
  492. e.printStackTrace();
  493. return 0;
  494. }finally{
  495. backRedis();
  496. }
  497. }
  498. /**
  499. * 通过索引 获取list中的值
  500. * @param key 键
  501. * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推
  502. * @return
  503. */
  504. public Object lGetIndex(String key,long index){
  505. try {
  506. return redisTemplate.opsForList().index(key, index);
  507. } catch (Exception e) {
  508. e.printStackTrace();
  509. return null;
  510. }finally{
  511. backRedis();
  512. }
  513. }
  514. /**
  515. * 将list放入缓存
  516. * @param key 键
  517. * @param value 值
  518. * @return
  519. */
  520. public boolean lpush(String key, Object value) {
  521. try {
  522. redisTemplate.opsForList().rightPush(key, value);
  523. return true;
  524. } catch (Exception e) {
  525. e.printStackTrace();
  526. return false;
  527. }finally{
  528. backRedis();
  529. }
  530. }
  531. /**
  532. * 将list放入缓存
  533. * @param key 键
  534. * @param value 值
  535. * @param time 时间(秒)
  536. * @return
  537. */
  538. public boolean lpushTime(String key, Object value, long time) {
  539. try {
  540. redisTemplate.opsForList().rightPush(key, value);
  541. if (time > 0) {
  542. expire(key, time);
  543. }
  544. return true;
  545. } catch (Exception e) {
  546. e.printStackTrace();
  547. return false;
  548. }finally{
  549. backRedis();
  550. }
  551. }
  552. /**
  553. * 将list放入缓存
  554. * @param key 键
  555. * @param value 值
  556. * @return
  557. */
  558. public boolean lpushAll(String key, List value) {
  559. try {
  560. redisTemplate.opsForList().rightPushAll(key, value);
  561. return true;
  562. } catch (Exception e) {
  563. e.printStackTrace();
  564. return false;
  565. }finally{
  566. backRedis();
  567. }
  568. }
  569. /**
  570. * 将list放入缓存
  571. * @param key 键
  572. * @param value 值
  573. * @param time 时间(秒)
  574. * @return
  575. */
  576. public boolean lpushAllTime(String key, List<Object> value, long time) {
  577. try {
  578. redisTemplate.opsForList().rightPushAll(key, value);
  579. if (time > 0) {
  580. expire(key, time);
  581. }
  582. return true;
  583. } catch (Exception e) {
  584. e.printStackTrace();
  585. return false;
  586. }finally{
  587. backRedis();
  588. }
  589. }
  590. /**
  591. * 根据索引修改list中的某条数据
  592. * @param key 键
  593. * @param index 索引
  594. * @param value 值
  595. * @return
  596. */
  597. public boolean lUpdateIndex(String key, long index,Object value) {
  598. try {
  599. redisTemplate.opsForList().set(key, index, value);
  600. return true;
  601. } catch (Exception e) {
  602. e.printStackTrace();
  603. return false;
  604. }finally{
  605. backRedis();
  606. }
  607. }
  608. /**
  609. * 移除N个值为value
  610. * @param key 键
  611. * @param count 移除多少个
  612. * @param value 值
  613. * @return 移除的个数
  614. */
  615. public long lRemove(String key,long count,Object value) {
  616. try {
  617. Long remove = redisTemplate.opsForList().remove(key, count, value);
  618. return remove;
  619. } catch (Exception e) {
  620. e.printStackTrace();
  621. return 0;
  622. }finally{
  623. backRedis();
  624. }
  625. }
  626. /**
  627. * 模糊查询获取key值
  628. * @param pattern
  629. * @return
  630. */
  631. public Set keys(String pattern){
  632. try {
  633. return redisTemplate.keys(pattern);
  634. } catch (Exception e) {
  635. e.printStackTrace();
  636. return null;
  637. }finally{
  638. backRedis();
  639. }
  640. }
  641. /**
  642. * 使用Redis的消息队列
  643. * @param channel
  644. * @param message 消息内容
  645. */
  646. public void convertAndSend(String channel, Object message){
  647. try {
  648. redisTemplate.convertAndSend(channel,message);
  649. } catch (Exception e) {
  650. e.printStackTrace();
  651. }finally{
  652. backRedis();
  653. }
  654. }
  655. //=========BoundListOperations 用法 start============
  656. /**
  657. *将数据添加到Redis的list中(从右边添加)
  658. * @param listKey
  659. * @param values 待添加的数据
  660. */
  661. public void addToListRight(String listKey,Object values) {
  662. //绑定操作
  663. BoundListOperations<String, Object> boundValueOperations = redisTemplate.boundListOps(listKey);
  664. //插入数据
  665. boundValueOperations.rightPushAll(values);
  666. //设置过期时间
  667. }
  668. /**
  669. * 根据起始结束序号遍历Redis中的list
  670. * @param listKey
  671. * @param start 起始序号
  672. * @param end 结束序号
  673. * @return
  674. */
  675. public List<Object> rangeList(String listKey, long start, long end) {
  676. //绑定操作
  677. BoundListOperations<String, Object> boundValueOperations = redisTemplate.boundListOps(listKey);
  678. //查询数据
  679. return boundValueOperations.range(start, end);
  680. }
  681. /**
  682. * 弹出右边的值 --- 并且移除这个值
  683. * @param listKey
  684. */
  685. public Object rifhtPop(String listKey){
  686. //绑定操作
  687. BoundListOperations<String, Object> boundValueOperations = redisTemplate.boundListOps(listKey);
  688. return boundValueOperations.rightPop();
  689. }
  690. //=========BoundListOperations 用法 End============
  691. }