spring+redis的整合,使用spring-data-redis來整合
1、參考:https://www.cnblogs.com/qlqwjy/p/8562703.html
2、首先建立一個maven專案。然後加入依賴的jar包就行了。我加入的jar包很多,反正加入了也沒啥壞的影響。
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.charts</groupId> 5 <artifactId>com.fline.aic.charts</artifactId> 6 <packaging>war</packaging> 7 <version>0.0.1-SNAPSHOT</version> 8 <name>com.fline.aic.charts Maven Webapp</name> 9 <url>http://maven.apache.org</url> 10 11 <dependencies> 12 <dependency> 13 <groupId>junit</groupId> 14 <artifactId>junit</artifactId> 15 <version>3.8.1</version> 16 <scope>test</scope> 17 </dependency> 18 <!-- https://mvnrepository.com/artifact/log4j/log4j --> 19 <dependency> 20 <groupId>log4j</groupId> 21 <artifactId>log4j</artifactId> 22 <version>1.2.17</version> 23 </dependency> 24 <!-- https://mvnrepository.com/artifact/com.github.kstyrc/embedded-redis --> 25 <dependency> 26 <groupId>com.github.kstyrc</groupId> 27 <artifactId>embedded-redis</artifactId> 28 <version>0.6</version> 29 <scope>test</scope> 30 </dependency> 31 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> 32 <dependency> 33 <groupId>redis.clients</groupId> 34 <artifactId>jedis</artifactId> 35 <version>2.9.0</version> 36 </dependency> 37 <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis --> 38 <dependency> 39 <groupId>org.springframework.data</groupId> 40 <artifactId>spring-data-redis</artifactId> 41 <version>1.7.2.RELEASE</version> 42 </dependency> 43 <!-- https://mvnrepository.com/artifact/commons-pool/commons-pool --> 44 <dependency> 45 <groupId>commons-pool</groupId> 46 <artifactId>commons-pool</artifactId> 47 <version>1.5.4</version> 48 </dependency> 49 <dependency> 50 <groupId>com.fasterxml.jackson.core</groupId> 51 <artifactId>jackson-core</artifactId> 52 <version>2.1.0</version> 53 </dependency> 54 <dependency> 55 <groupId>com.fasterxml.jackson.core</groupId> 56 <artifactId>jackson-databind</artifactId> 57 <version>2.1.0</version> 58 </dependency> 59 <dependency> 60 <groupId>com.fasterxml.jackson.core</groupId> 61 <artifactId>jackson-annotations</artifactId> 62 <version>2.1.0</version> 63 </dependency> 64 65 <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> 66 <dependency> 67 <groupId>org.springframework</groupId> 68 <artifactId>spring-core</artifactId> 69 <version>4.3.18.RELEASE</version> 70 </dependency> 71 <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> 72 <dependency> 73 <groupId>org.springframework</groupId> 74 <artifactId>spring-context</artifactId> 75 <version>4.3.18.RELEASE</version> 76 </dependency> 77 <!-- https://mvnrepository.com/artifact/org.springframework/spring-web --> 78 <dependency> 79 <groupId>org.springframework</groupId> 80 <artifactId>spring-web</artifactId> 81 <version>4.3.18.RELEASE</version> 82 </dependency> 83 <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> 84 <dependency> 85 <groupId>org.springframework</groupId> 86 <artifactId>spring-aop</artifactId> 87 <version>4.3.18.RELEASE</version> 88 </dependency> 89 <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> 90 <dependency> 91 <groupId>org.springframework</groupId> 92 <artifactId>spring-webmvc</artifactId> 93 <version>4.3.18.RELEASE</version> 94 </dependency> 95 <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> 96 <dependency> 97 <groupId>org.springframework</groupId> 98 <artifactId>spring-beans</artifactId> 99 <version>4.3.18.RELEASE</version> 100 </dependency> 101 <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> 102 <dependency> 103 <groupId>org.springframework</groupId> 104 <artifactId>spring-jdbc</artifactId> 105 <version>4.3.18.RELEASE</version> 106 </dependency> 107 <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> 108 <dependency> 109 <groupId>org.springframework</groupId> 110 <artifactId>spring-webmvc</artifactId> 111 <version>4.3.18.RELEASE</version> 112 </dependency> 113 <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> 114 <dependency> 115 <groupId>org.springframework</groupId> 116 <artifactId>spring-test</artifactId> 117 <version>4.3.18.RELEASE</version> 118 <scope>test</scope> 119 </dependency> 120 <dependency> 121 <groupId>org.aspectj</groupId> 122 <artifactId>aspectjweaver</artifactId> 123 <version>1.8.13</version> 124 </dependency> 125 126 </dependencies> 127 <build> 128 <finalName>com.fline.aic.charts</finalName> 129 </build> 130 131 132 133 </project>
3、然後在web.xml裡面配置一下Spring框架listener配置。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 3 <display-name>Spring_Struts2_20170313</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 13 14 <!-- 1:spring配置 ,在spring-framework-3.2.5.RELEASE\docs\spring-framework-reference\htmlsingle 15 搜尋context-param找到下面這段話即可。記得就該param-value的值,如下所示; 16 2:param-value的值最好使用bean,這樣方便引用如/WEB-INF/classes/bean-*.xml 17 --> 18 <context-param> 19 <param-name>contextConfigLocation</param-name> 20 <!-- <param-value>classpath:applicationContext.xml</param-value> --> 21 <param-value>/WEB-INF/applicationContext.xml</param-value> 22 </context-param> 23 <listener> 24 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 25 </listener> 26 27 28 </web-app>
4、然後配置一下Spring的配置檔案。
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" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation=" 7 http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd"> 11 12 <!-- 開啟註解掃描 --> 13 <context:annotation-config/> 14 <context:component-scan base-package="com.fline.*"></context:component-scan> 15 16 <!-- <import resource="classpath:applicationContext-redis.xml" /> --> 17 18 </beans>
5、然後配置一下Redis的配置檔案redis.properties和applicationContext-redis.xml。
1 redis.host=127.0.0.1 2 redis.port=6379 3 redis.password=123456 4 5 redis.maxIdle=300 6 redis.maxActive=600 7 redis.maxWait=1000 8 redis.testOnBorrow=true
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd "> 6 7 <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig" > 8 <!--最大空閒數--> 9 <property name="maxIdle" value="10" /> 10 <!--連線池的最大資料庫連線數 --> 11 <property name="maxTotal" value="50" /> 12 <!--最大建立連線等待時間--> 13 <property name="maxWaitMillis" value="1500" /> 14 <!--逐出連線的最小空閒時間 預設1800000毫秒(30分鐘)--> 15 <property name="minEvictableIdleTimeMillis" value="1800000" /> 16 <!--每次逐出檢查時 逐出的最大數目 如果為負數就是 : 1/abs(n), 預設3--> 17 <property name="numTestsPerEvictionRun" value="1024" /> 18 <!--逐出掃描的時間間隔(毫秒) 如果為負數,則不執行逐出執行緒, 預設-1--> 19 <property name="timeBetweenEvictionRunsMillis" value="30000" /> 20 <!--是否在從池中取出連線前進行檢驗,如果檢驗失敗,則從池中去除連線並嘗試取出另一個--> 21 <property name="testOnBorrow" value="true" /> 22 <!--在空閒時檢查有效性, 預設false --> 23 <property name="testWhileIdle" value="true" /> 24 </bean > 25 26 <!--redis連線工廠 --> 27 <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy"> 28 <property name="poolConfig" ref="jedisPoolConfig"></property> 29 <!--IP地址 --> 30 <property name="hostName" value="127.0.0.1"></property> 31 <!--埠號 --> 32 <property name="port" value="6379"></property> 33 <!--如果Redis設定有密碼 --> 34 <property name="password" value="123456" /> 35 <!--客戶端超時時間單位是毫秒 --> 36 <property name="timeout" value="1000"></property> 37 </bean> 38 39 <!--redis操作模版,使用該物件可以操作redis --> 40 <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" > 41 <property name="connectionFactory" ref="jedisConnectionFactory" /> 42 <!--如果不配置Serializer,那麼儲存的時候預設使用String,如果用User型別儲存,那麼會提示錯誤User can't cast to String!! --> 43 <property name="keySerializer" > 44 <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> 45 </property> 46 <property name="valueSerializer" > 47 <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" /> 48 </property> 49 <property name="hashKeySerializer"> 50 <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/> 51 </property> 52 <property name="hashValueSerializer"> 53 <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/> 54 </property> 55 <!--開啟事務 --> 56 <property name="enableTransactionSupport" value="true"></property> 57 </bean > 58 59 <bean id="redisUtil" class="com.fline.aic.utils.RedisUtil"> 60 <property name="redisTemplate" ref="redisTemplate" /> 61 </bean> 62 63 </beans>
6、redis的工具類,可以直接拿到專案中使用的。
1 package com.fline.aic.utils; 2 3 import java.util.List; 4 import java.util.Map; 5 import java.util.Set; 6 import java.util.concurrent.TimeUnit; 7 8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.data.redis.core.RedisTemplate; 10 import org.springframework.stereotype.Component; 11 import org.springframework.util.CollectionUtils; 12 13 /** 14 * 15 * @author QLQ 基於spring和redis的redisTemplate工具類 針對所有的hash 都是以h開頭的方法 針對所有的Set 16 * 都是以s開頭的方法 不含通用方法 針對所有的List 都是以l開頭的方法 17 */ 18 @Component // 交給Spring管理(在需要快取的地方自動注入即可使用) 19 public class RedisUtil { 20 21 @Autowired // (自動注入redisTemplet) 22 private RedisTemplate<String, Object> redisTemplate; 23 24 public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) { 25 this.redisTemplate = redisTemplate; 26 } 27 // =============================common============================ 28 29 /** 30 * 指定快取失效時間 31 * 32 * @param key 33 * 鍵 34 * @param time 35 * 時間(秒) 36 * @return 37 */ 38 public boolean expire(String key, long time) { 39 try { 40 if (time > 0) { 41 redisTemplate.expire(key, time, TimeUnit.SECONDS); 42 } 43 return true; 44 } catch (Exception e) { 45 e.printStackTrace(); 46 return false; 47 } 48 } 49 50 /** 51 * 根據key 獲取過期時間 52 * 53 * @param key 54 * 鍵 不能為null 55 * @return 時間(秒) 返回0代表為永久有效 56 */ 57 public long getExpire(String key) { 58 return redisTemplate.getExpire(key, TimeUnit.SECONDS); 59 } 60 61 /** 62 * 判斷key是否存在 63 * 64 * @param key 65 * 鍵 66 * @return true 存在 false不存在 67 */ 68 public boolean hasKey(String key) { 69 try { 70 return redisTemplate.hasKey(key); 71 } catch (Exception e) { 72 e.printStackTrace(); 73 return false; 74 } 75 } 76 77 /** 78 * 刪除快取 79 * 80 * @param key 81 * 可以傳一個值 或多個 82 */ 83 @SuppressWarnings("unchecked") 84 public void del(String... key) { 85 if (key != null && key.length > 0) { 86 if (key.length == 1) { 87 redisTemplate.delete(key[0]); 88 } else { 89 redisTemplate.delete(CollectionUtils.arrayToList(key)); 90 } 91 } 92 } 93 94 // ============================String============================= 95 /** 96 * 普通快取獲取 97 * 98 * @param key 99 * 鍵 100 * @return 值 101 */ 102 public Object get(String key) { 103 return key == null ? null : redisTemplate.opsForValue().get(key); 104 } 105 106 /** 107 * 普通快取放入 108 * 109 * @param key 110 * 鍵 111 * @param value 112 * 值 113 * @return true成功 false失敗 114 */ 115 public boolean set(String key, Object value) { 116 try { 117 redisTemplate.opsForValue().set(key, value); 118 return true; 119 } catch (Exception e) { 120 e.printStackTrace(); 121 return false; 122 } 123 124 } 125 126 /** 127 * 普通快取放入並設定時間 128 * 129 * @param key 130 * 鍵 131 * @param value 132 * 值 133 * @param time 134 * 時間(秒) 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 } 149 } 150 151 /** 152 * 遞增 153 * 154 * @param key 155 * 鍵 156 * @param by 157 * 要增加幾(大於0) 158 * @return 159 */ 160 public long incr(String key, long delta) { 161 if (delta < 0) { 162 throw new RuntimeException("遞增因子必須大於0"); 163 } 164 return redisTemplate.opsForValue().increment(key, delta); 165 } 166 167 /** 168 * 遞減 169 * 170 * @param key 171 * 鍵 172 * @param by 173 * 要減少幾(小於0) 174 * @return 175 */ 176 public long decr(String key, long delta) { 177 if (delta < 0) { 178 throw new RuntimeException("遞減因子必須大於0"); 179 } 180 return redisTemplate.opsForValue().increment(key, -delta); 181 } 182 183 // ================================Map================================= 184 /** 185 * HashGet 186 * 187 * @param key 188 * 鍵 不能為null 189 * @param item 190 * 項 不能為null 191 * @return 值 192 */ 193 public Object hget(String key, String item) { 194 return redisTemplate.opsForHash().get(key, item); 195 } 196 197 /** 198 * 獲取hashKey對應的所有鍵值 199 * 200 * @param key 201 * 鍵 202 * @return 對應的多個鍵值 203 */ 204 public Map<Object, Object> hmget(String key) { 205 return redisTemplate.opsForHash().entries(key); 206 } 207 208 /** 209 * HashSet 210 * 211 * @param key 212 * 鍵 213 * @param map 214 * 對應多個鍵值 215 * @return true 成功 false 失敗 216 */ 217 public boolean hmset(String key, Map<String, Object> map) { 218 try { 219 redisTemplate.opsForHash().putAll(key, map); 220 return true; 221 } catch (Exception e) { 222 e.printStackTrace(); 223 return false; 224 } 225 } 226 227 /** 228 * HashSet 並設定時間 229 * 230 * @param key 231 * 鍵 232 * @param map 233 * 對應多個鍵值 234 * @param time 235 * 時間(秒) 236 * @return true成功 false失敗 237 */ 238 public boolean hmset(String key, Map<String, Object> map, long time) { 239 try { 240 redisTemplate.opsForHash().putAll(key, map); 241 if (time > 0) { 242 expire(key, time); 243 } 244 return true; 245 } catch (Exception e) { 246 e.printStackTrace(); 247 return false; 248 } 249 } 250 251 /** 252 * 向一張hash表中放入資料,如果不存在將建立 253 * 254 * @param key 255 * 鍵 256 * @param item 257 * 項 258 * @param value 259 * 值 260 * @return true 成功 false失敗 261 */ 262 public boolean hset(String key, String item, Object value) { 263 try { 264 redisTemplate.opsForHash().put(key, item, value); 265 return true; 266 } catch (Exception e) { 267 e.printStackTrace(); 268 return false; 269 } 270 } 271 272 /** 273 * 向一張hash表中放入資料,如果不存在將建立 274 * 275 * @param key 276 * 鍵 277 * @param item 278 * 項 279 * @param value 280 * 值 281 * @param time 282 * 時間(秒) 注意:如果已存在的hash表有時間,這裡將會替換原有的時間 283 * @return true 成功 false失敗 284 */ 285 public boolean hset(String key, String item, Object value, long time) { 286 try { 287 redisTemplate.opsForHash().put(key, item, value); 288 if (time > 0) { 289 expire(key, time); 290 } 291 return true; 292 } catch (Exception e) { 293 e.printStackTrace(); 294 return false; 295 } 296 } 297 298 /** 299 * 刪除hash表中的值 300 * 301 * @param key 302 * 鍵 不能為null 303 * @param item 304 * 項 可以使多個 不能為null 305 */ 306 public void hdel(String key, Object... item) { 307 redisTemplate.opsForHash().delete(key, item); 308 } 309 310 /** 311 * 判斷hash表中是否有該項的值 312 * 313 * @param key 314 * 鍵 不能為null 315 * @param item 316 * 項 不能為null 317 * @return true 存在 false不存在 318 */ 319 public boolean hHasKey(String key, String item) { 320 return redisTemplate.opsForHash().hasKey(key, item); 321 } 322 323 /** 324 * hash遞增 如果不存在,就會建立一個 並把新增後的值返回 325 * 326 * @param key 327 * 鍵 328 * @param item 329 * 項 330 * @param by 331 * 要增加幾(大於0) 332 * @return 333 */ 334 public double hincr(String key, String item, double by) { 335 return redisTemplate.opsForHash().increment(key, item, by); 336 } 337 338 /** 339 * hash遞減 340 * 341 * @param key 342 * 鍵 343 * @param item 344 * 項 345 * @param by 346 * 要減少記(小於0) 347 * @return 348 */ 349 public double hdecr(String key, String item, double by) { 350 return redisTemplate.opsForHash().increment(key, item, -by); 351 } 352 353 // ============================set============================= 354 /** 355 * 根據key獲取Set中的所有值 356 * 357 * @param key 358 * 鍵 359 * @return 360 */ 361 public Set<Object> sGet(String key) { 362 try { 363 return redisTemplate.opsForSet().members(key); 364 } catch (Exception e) { 365 e.printStackTrace(); 366 return null; 367 } 368 } 369 370 /** 371 * 根據value從一個set中查詢,是否存在 372 * 373 * @param key 374 * 鍵 375 * @param value 376 * 值 377 * @return true 存在 false不存在 378 */ 379 public boolean sHasKey(String key, Object value) { 380 try { 381 return redisTemplate.opsForSet().isMember(key, value); 382 } catch (Exception e) { 383 e.printStackTrace(); 384 return false; 385 } 386 } 387 388 /** 389 * 將資料放入set快取 390 * 391 * @param key 392 * 鍵 393 * @param values 394 * 值 可以是多個 395 * @return 成功個數 396 */ 397 public long sSet(String key, Object... values) { 398 try { 399 return redisTemplate.opsForSet().add(key, values); 400 } catch (Exception e) { 401 e.printStackTrace(); 402 return 0; 403 } 404 } 405 406 /** 407 * 將set資料放入快取 408 * 409 * @param key 410 * 鍵 411 * @param time 412 * 時間(秒) 413 * @param values 414 * 值 可以是多個 415 * @return 成功個數 416 */ 417 public long sSetAndTime(String key, long time, Object... values) { 418 try { 419 Long count = redisTemplate.opsForSet().add(key, values); 420 if (time > 0) 421 expire(key, time); 422 return count; 423 } catch (Exception e) { 424 e.printStackTrace(); 425 return 0; 426 } 427 } 428 429 /** 430 * 獲取set快取的長度 431 * 432 * @param key 433 * 鍵 434 * @return 435 */ 436 public long sGetSetSize(String key) { 437 try { 438 return redisTemplate.opsForSet().size(key); 439 } catch (Exception e) { 440 e.printStackTrace(); 441 return 0; 442 } 443 } 444 445 /** 446 * 移除值為value的 447 * 448 * @param key 449 * 鍵 450 * @param values 451 * 值 可以是多個 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 } 462 } 463 // ===============================list================================= 464 465 /** 466 * 獲取list快取的內容 467 * 468 * @param key 469 * 鍵 470 * @param start 471 * 開始 472 * @param end 473 * 結束 0 到 -1代表所有值 474 * @return 475 */ 476 public List<Object> lGet(String key, long start, long end) { 477 try { 478 return redisTemplate.opsForList().range(key, start, end); 479 } catch (Exception e) { 480 e.printStackTrace(); 481 return null; 482 } 483 } 484 485 /** 486 * 獲取list快取的長度 487 * 488 * @param key 489 * 鍵 490 * @return 491 */ 492 public long lGetListSize(String key) { 493 try { 494 return redisTemplate.opsForList().size(key); 495 } catch (Exception e) { 496 e.printStackTrace(); 497 return 0; 498 } 499 } 500 501 /** 502 * 通過索引 獲取list中的值 503 * 504 * @param key 505 * 鍵 506 * @param index 507 * 索引 index>=0時, 0 表頭,1 第二個元素,依次類推;index<0時,-1,表尾,-2倒數第二個元素,依次類推 508 * @return 509 */ 510 public Object lGetIndex(String key, long index) { 511 try { 512 return redisTemplate.opsForList().index(key, index); 513 } catch (Exception e) { 514 e.printStackTrace(); 515 return null; 516 } 517 } 518 519 /** 520 * 將list放入快取 521 * 522 * @param key 523 * 鍵 524 * @param value 525 * 值 526 * @param time 527 * 時間(秒) 528 * @return 529 */ 530 public boolean lSet(String key, Object value) { 531 try { 532 redisTemplate.opsForList().rightPush(key, value); 533 return true; 534 } catch (Exception e) { 535 e.printStackTrace(); 536 return false; 537 } 538 } 539 540 /** 541 * 將list放入快取 542 * 543 * @param key 544 * 鍵 545 * @param value 546 * 值 547 * @param time 548 * 時間(秒) 549 * @return 550 */ 551 public boolean rSet(String key, Object value) { 552 try { 553 redisTemplate.opsForList().rightPush(key, value); 554 return true; 555 } catch (Exception e) { 556 e.printStackTrace(); 557 return false; 558 } 559 } 560 561 /** 562 * 將list放入快取 563 * 564 * @param key 565 * 鍵 566 * @param value 567 * 值 568 * @param time 569 * 時間(秒) 570 * @return 571 */ 572 public boolean lSet(String key, Object value, long time) { 573 try { 574 redisTemplate.opsForList().rightPush(key, value); 575 if (time > 0) 576 expire(key, time); 577 return true; 578 } catch (Exception e) { 579 e.printStackTrace(); 580 return false; 581 } 582 } 583 584 /** 585 * 將list放入快取 586 * 587 * @param key 588 * 鍵 589 * @param value 590 * 值 591 * @param time 592 * 時間(秒) 593 * @return 594 */ 595 public boolean lSet(String key, List<Object> value) { 596 try { 597 redisTemplate.opsForList().rightPushAll(key, value); 598 return true; 599 } catch (Exception e) { 600 e.printStackTrace(); 601 return false; 602 } 603 } 604 605 /** 606 * 將list放入快取 607 * 608 * @param key 609 * 鍵 610 * @param value 611 * 值 612 * @param time 613 * 時間(秒) 614 * @return 615 */ 616 public boolean lSet(String key, List<Object> value, long time) { 617 try { 618 redisTemplate.opsForList().rightPushAll(key, value); 619 if (time > 0) 620 expire(key, time); 621 return true; 622 } catch (Exception e) { 623 e.printStackTrace(); 624 return false; 625 } 626 } 627 628 /** 629 * 根據索引修改list中的某條資料 630 * 631 * @param key 632 * 鍵 633 * @param index 634 * 索引 635 * @param value 636 * 值 637 * @return 638 */ 639 public boolean lUpdateIndex(String key, long index, Object value) { 640 try { 641 redisTemplate.opsForList().set(key, index, value); 642 return true; 643 } catch (Exception e) { 644 e.printStackTrace(); 645 return false; 646 } 647 } 648 649 /** 650 * 移除N個值為value 651 * 652 * @param key 653 * 鍵 654 * @param count 655 * 移除多少個 656 * @param value 657 * 值 658 * @return 移除的個數 659 */ 660 public long lRemove(String key, long count, Object value) { 661 try { 662 Long remove = redisTemplate.opsForList().remove(key, count, value); 663 return remove; 664 } catch (Exception e) { 665 e.printStackTrace(); 666 return 0; 667 } 668 } 669 670 }
7、最後是Redis的測試類,方便自己進行測試使用。
1 package com.fline.aic.utils; 2 3 import java.util.List; 4 import java.util.Map; 5 import java.util.Map.Entry; 6 import java.util.Set; 7 8 import org.junit.Before; 9 import org.junit.Test; 10 import org.springframework.context.ApplicationContext; 11 import org.springframework.context.support.ClassPathXmlApplicationContext; 12 13 /** 14 * 15 * @Description TODO 16 * @author biehl 17 * @Date 2018年12月7日 下午8:25:34 18 * 19 * 參考:https://www.cnblogs.com/qlqwjy/p/8562703.html 20 */ 21 public class RedisTest { 22 23 private RedisUtil redisUtils = null; 24 25 @Before 26 public void before() { 27 ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext-redis.xml"); 28 redisUtils = (RedisUtil) context.getBean("redisUtil"); 29 } 30 31 // redis存放String型別的 32 @Test 33 public void redisString() throws InterruptedException { 34 // 從redis資料庫中獲取到dd的字串 35 String str = (String) redisUtils.get("dd"); 36 // 如果獲取到的str字串不為空 37 if (str != null) { 38 // 就刪除這個str字串 39 redisUtils.del(str); 40 } 41 // 將key為dd和value為dd設定到redis裡面 42 redisUtils.set("dd", "dd"); 43 // 列印該key為dd的字串 44 System.out.println(redisUtils.get("dd")); 45 } 46 47 // redis存放List型別的 48 @Test 49 public void redisList() throws InterruptedException { 50 // 刪除key為list1 51 redisUtils.del("list1"); 52 redisUtils.lSet("list1", "list1"); 53 redisUtils.lSet("list1", "list2"); 54 redisUtils.lSet("list1", "list3"); 55 redisUtils.rSet("list1", "list4"); 56 List<Object> lGet = redisUtils.lGet("list1", 0, -1); 57 // redisTemplate.opsForList().range("myList", 0, -1); 58 for (Object s : lGet) { 59 System.out.println(s); 60 } 61 } 62 63 // redis存放Set型別的 64 @Test 65 public void redisSet() throws InterruptedException { 66 redisUtils.del("set1"); 67 redisUtils.sSet("set1", "set1"); 68 redisUtils.sSet("set1", "set2"); 69 redisUtils.sSet("set1", "set3"); 70 redisUtils.sSet("set1", "set4"); 71 Set<Object> sGet = redisUtils.sGet("set1"); 72 for (Object s : sGet) { 73 System.out.println(s); 74 } 75 } 76 77 // redis存放Hash型別的 78 @Test 79 public void redisHash() throws InterruptedException { 80 redisUtils.del("hash1"); 81 redisUtils.hset("hash1", "beijing", "北京"); 82 redisUtils.hset("hash1", "shanghai", "上海"); 83 redisUtils.hset("hash1", "chenzhen", "深圳"); 84 redisUtils.hset("hash1", "xinxiang", "新鄉"); 85 Map<Object, Object> hmget = redisUtils.hmget("hash1"); 86 Set<Entry<Object, Object>> entrySet = hmget.entrySet(); 87 for (Map.Entry<Object, Object> hash : entrySet) { 88 System.out.println(hash.getKey() + " : " + hash.getValue()); 89 } 90 } 91 92 }
效果如下所示:
待續.....
相關文章
- fastlane 的整合與使用AST
- Dozer的使用: 整合SpringSpring
- Mybatis 的使用(整合Spring、SpringBoot)MyBatisSpring Boot
- 使用IDEA的SpringBoot整合JDBCIdeaSpring BootJDBC
- springboot整合使用JdbcTemplateSpring BootJDBC
- asp.net core 使用 TestServer 來做整合測試ASP.NETServer
- Spring Cache + Caffeine的整合與使用Spring
- 【springboot】學習4:整合JDBC、整合druid、整合mybatis、整合 SpringSecuritySpring BootJDBCUIMyBatisGse
- 使用Apache SeaTunnel高效整合和管理SftpFile資料來源ApacheFTP
- OC 整合Charts 及使用
- 使用Spring Boot整合ConsulSpring Boot
- ActiveMQ的使用及整合spring的使用例項MQSpring
- SpringBoot整合Druid資料來源Spring BootUI
- MyBatis整合雙資料來源MyBatis
- Mybatis和其他主流框架的整合使用MyBatis框架
- Druid資料來源使用(一)---單獨使用與整合springboot+mybatisUISpring BootMyBatis
- springboot使用外部tomcat啟動,整合jsp,另有整合dubbo樣例Spring BootTomcatJS
- SpringBoot整合系列-整合JPASpring Boot
- 使用 Phalanger 整合 PHP 和 .NetPHP
- Spring Boot整合swagger使用教程Spring BootSwagger
- SpringBoot整合Activiti7使用Spring Boot
- springboot整合ES及其基本使用Spring Boot
- 使用FastAPI整合Gradio和DjangoASTAPIDjango
- Jenkins 持續整合使用教程Jenkins
- 使用Maven整合SSH總結Maven
- MyBatis(九) 整合Spring、整合SpringMVCMyBatisSpringMVC
- spring-data-redis 動態切換資料來源SpringRedis
- 一文看懂 Dubbo 的整合與使用
- spring boot使用註解的方式整合mybaitsSpring BootAI
- ElasticSearch與SpringBoot的整合與JPA方法的使用ElasticsearchSpring Boot
- WEEX-EROS | 整合並使用 bindingxROS
- iOS持續整合(一)——fastlane 使用iOSAST
- webStorm安裝以及整合git使用!WebORMGit
- DUBBO與ZOOKEEPER、SPRINGMVC整合和使用SpringMVC
- 使用xml檔案配置SSM整合XMLSSM
- Markdown與LaTex使用語法整合
- springboot(十八):使用Spring Boot整合FastDFSSpring BootAST
- 使用Spring Boot整合Apollo配置中心Spring Boot