redis整合spring(redisTemplate工具类)

转载至 : https://blog.csdn.net/qq_34021712/article/details/75949706

前言

关于哨兵模式的配置,我是参考网上的,只是把配置拿到了这里,本人并没有亲测是否有效,代码是注释掉的,需要配置哨兵模式的,可以参考一下。

完整项目下载:
在测试包下有一个TestRedis.java这个类,可以使用这个类main方法测试

maven依赖


  
  
  1. <!– Redis客户端 –>
  2. <dependency>
  3. <groupId>redis.clients </groupId>
  4. <artifactId>jedis </artifactId>
  5. <version>2.9.0 </version>
  6. </dependency>
  7. <!– redis Spring 基于注解配置 –>
  8. <dependency>
  9. <groupId>org.springframework.data </groupId>
  10. <artifactId>spring-data-redis </artifactId>
  11. <version>1.7.2.RELEASE </version>
  12. </dependency>

redis.properties


  
  
  1. #ip地址
  2. redis.hostName= 172.20. 1.205
  3. #端口号
  4. redis.port= 6379
  5. #如果有密码
  6. redis.password= 123456
  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.sentinel.host1=172.20.1.230
  28. #redis.sentinel.port1=26379
  29. #redis.sentinel.host2=172.20.1.231
  30. #redis.sentinel.port2=26379
  31. #redis.sentinel.host3=172.20.1.232
  32. #redis.sentinel.port3=26379

applicationContext-redis.xml


  
  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns:p= "http://www.springframework.org/schema/p"
  4. xmlns:context= "http://www.springframework.org/schema/context"
  5. xmlns:mvc= "http://www.springframework.org/schema/mvc"
  6. xmlns:cache= "http://www.springframework.org/schema/cache"
  7. xsi:schemaLocation= "http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-4.2.xsd
  11. http://www.springframework.org/schema/mvc
  12. http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
  13. http://www.springframework.org/schema/cache
  14. http://www.springframework.org/schema/cache/spring-cache-4.2.xsd">
  15. <!-- 加载配置文件 -->
  16. <context:property-placeholder location="classpath:properties/*.properties" />
  17. <!-- redis连接池配置-->
  18. <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig" >
  19. <!--最大空闲数-->
  20. <property name="maxIdle" value="${redis.maxIdle}"</span> /&gt;</span> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="24"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment">&lt;!--连接池的最大数据库连接数 --&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="25"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"maxTotal"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"${redis.maxTotal}" />
  21. <!--最大建立连接等待时间-->
  22. <property name="maxWaitMillis" value="${redis.maxWaitMillis}"</span> /&gt;</span> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="28"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment">&lt;!--逐出连接的最小空闲时间 默认1800000毫秒(30分钟)--&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="29"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"minEvictableIdleTimeMillis"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"${redis.minEvictableIdleTimeMillis}" />
  23. <!--每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3-->
  24. <property name="numTestsPerEvictionRun" value="${redis.numTestsPerEvictionRun}"</span> /&gt;</span> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="32"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment">&lt;!--逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1--&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="33"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"timeBetweenEvictionRunsMillis"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"${redis.timeBetweenEvictionRunsMillis}" />
  25. <!--是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个-->
  26. <property name="testOnBorrow" value="${redis.testOnBorrow}"</span> /&gt;</span> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="36"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment">&lt;!--在空闲时检查有效性, 默认false --&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="37"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"testWhileIdle"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"${redis.testWhileIdle}" />
  27. </bean >
  28. <!-- redis集群配置 哨兵模式 -->
  29. <!-- <bean id="sentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
  30. <property name="master">
  31. <bean class="org.springframework.data.redis.connection.RedisNode">
  32. 这个值要和Sentinel中指定的master的值一致,不然启动时找不到Sentinel会报错的
  33. <property name="name" value="mymaster"></property>
  34. </bean>
  35. </property>
  36. 记住了,这里是指定Sentinel的IP和端口,不是Master和Slave的
  37. <property name="sentinels">
  38. <set>
  39. <bean class="org.springframework.data.redis.connection.RedisNode">
  40. <constructor-arg name="host" value="${redis.sentinel.host1}"&gt;&lt;/constructor-arg&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="54"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> &lt;constructor-arg name="port" value="${redis.sentinel.port1}"></constructor-arg>
  41. </bean>
  42. <bean class="org.springframework.data.redis.connection.RedisNode">
  43. <constructor-arg name="host" value="${redis.sentinel.host2}"&gt;&lt;/constructor-arg&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="58"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> &lt;constructor-arg name="port" value="${redis.sentinel.port2}"></constructor-arg>
  44. </bean>
  45. <bean class="org.springframework.data.redis.connection.RedisNode">
  46. <constructor-arg name="host" value="${redis.sentinel.host3}"&gt;&lt;/constructor-arg&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="62"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> &lt;constructor-arg name="port" value="${redis.sentinel.port3}"></constructor-arg>
  47. </bean>
  48. </set>
  49. </property>
  50. </bean>
  51. <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
  52. <constructor-arg name="sentinelConfig" ref="sentinelConfiguration"></constructor-arg>
  53. <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
  54. </bean> -->
  55. <!--redis连接工厂 -->
  56. <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy">
  57. <property name="poolConfig" ref="jedisPoolConfig"> </property>
  58. <!--IP地址 -->
  59. <property name="hostName" value="${redis.hostName}"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">property</span>&gt;</span> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="77"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment">&lt;!--端口号 --&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="78"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"port"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"${redis.port}"> </property>
  60. <!--如果Redis设置有密码 -->
  61. <property name="password" value="${redis.password}"</span> /&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="81"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment">&lt;!--客户端超时时间单位是毫秒 --&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="82"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"timeout"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"${redis.timeout}"> </property>
  62. </bean>
  63. <!--redis操作模版,使用该对象可以操作redis -->
  64. <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
  65. <property name="connectionFactory" ref="jedisConnectionFactory" />
  66. <!--如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!! -->
  67. <property name="keySerializer" >
  68. <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
  69. </property>
  70. <property name="valueSerializer" >
  71. <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
  72. </property>
  73. <property name="hashKeySerializer">
  74. <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
  75. </property>
  76. <property name="hashValueSerializer">
  77. <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
  78. </property>
  79. <!--开启事务 -->
  80. <property name="enableTransactionSupport" value="true"> </property>
  81. </bean >
  82. <!--自定义redis工具类,在需要缓存的地方注入此类 -->
  83. <bean id="redisUtil" class="com.ryx.global.util.RedisUtil">
  84. <property name="redisTemplate" ref="redisTemplate" />
  85. </bean>
  86. </beans>

RedisUtil.java


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

TestRedis.java


  
  
  1. package com.ryx.test;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import org.springframework.context.ApplicationContext;
  7. import org.springframework.context.support.ClassPathXmlApplicationContext;
  8. import com.ryx.global.util.RedisUtil;
  9. public class TestRedis {
  10. public static void main(String[] args) throws Exception {
  11. @SuppressWarnings( "resource")
  12. ApplicationContext context= new ClassPathXmlApplicationContext( "classpath:spring/applicationContext-redis.xml");
  13. RedisUtil redisUtil=(RedisUtil) context.getBean( "redisUtil");
  14. //=====================testString======================
  15. //redisUtil.set("name", "王赛超");
  16. //redisUtil.set("age", 24);
  17. //redisUtil.set("address", "河北邯郸");
  18. //System.out.println(redisUtil.set("address", "河北邯郸", 50));
  19. //System.out.println(redisUtil.get("age"));
  20. //redisUtil.set("age", 1000);
  21. //Object object = redisUtil.get("user2");
  22. //System.out.println(object);
  23. //redisUtil.del("address");
  24. //redisUtil.set("class", 15);
  25. //long incr = redisUtil.incr("a", 1);
  26. //System.out.println(incr);
  27. //Thread.sleep(5000);
  28. /*Map<String,Object> map=new HashMap<>();
  29. map.put("name", "王赛超");
  30. map.put("age", 24);
  31. map.put("address", "河北邯郸666");
  32. redisUtil.hmset("15532002725", map,1000);*/
  33. //redisUtil.del("15532002725");
  34. //redisUtil.hset("15532002725","address","河北邯郸",1000);
  35. //redisUtil.hdel("15532002725", "name");
  36. //System.out.println(redisUtil.sSetAndTime("15532002727",1000,"haha"));
  37. //System.out.println(redisUtil.sGet("15532002727"));
  38. //System.out.println(redisUtil.sHasKey("15532002727","name"));
  39. System.out.println(redisUtil.lRemove( "15532002728", 1, 2));
  40. System.out.println(redisUtil.lGet( "15532002728", 0,- 1));
  41. System.out.println(redisUtil.lGetListSize( "15532002728"));
  42. System.out.println(redisUtil.lGetIndex( "15532002728", 1));
  43. //System.out.println(redisUtil.getExpire("15532002725"));
  44. //System.out.println(redisUtil.hget("15532002725","name"));
  45. //System.out.println(redisUtil.hmget("15532002725"));
  46. }
  47. }
  48. class User{
  49. private String name;
  50. private Integer age;
  51. private String address;
  52. private Double classz;
  53. private Float classz2;
  54. public User() {
  55. super();
  56. }
  57. public User(String name, Integer age, String address, Double classz,
  58. Float classz2) {
  59. super();
  60. this.name = name;
  61. this.age = age;
  62. this.address = address;
  63. this.classz = classz;
  64. this.classz2 = classz2;
  65. }
  66. public String getName() {
  67. return name;
  68. }
  69. public void setName(String name) {
  70. this.name = name;
  71. }
  72. public Integer getAge() {
  73. return age;
  74. }
  75. public void setAge(Integer age) {
  76. this.age = age;
  77. }
  78. public String getAddress() {
  79. return address;
  80. }
  81. public void setAddress(String address) {
  82. this.address = address;
  83. }
  84. public Double getClassz() {
  85. return classz;
  86. }
  87. public void setClassz(Double classz) {
  88. this.classz = classz;
  89. }
  90. public Float getClassz2() {
  91. return classz2;
  92. }
  93. public void setClassz2(Float classz2) {
  94. this.classz2 = classz2;
  95. }
  96. }



            </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值