使用spring-data-redis進行對redis的操作,封裝的一些操作方法
阿新 • • 發佈:2019-02-01
這個算是工作筆記吧,因為是我的實際工作內容
spring-data-redis api地址 http://docs.spring.io/spring-data/redis/docs/current/api/
依賴maven包(當前spring-data-redis的最新版本是1.7.2.RELEASE, jedis的最新版本是2.9.0):
spring-data-redis的maven倉庫地址是: https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis
jedis的maven倉庫地址是: https://mvnrepository.com/artifact/redis.clients/jedis
<!-- spring-data --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.6.4.RELEASE</version> </dependency> <!-- redis客戶端 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.5.2</version> </dependency>
spring-data-redis的配置檔案:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <util:properties id="redisProps" location="classpath:redis.properties"/> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" id="stringRedisSerializer"/> <bean class="org.springframework.data.redis.serializer.JacksonJsonRedisSerializer" id="jacksonJsonRedisSerializer"> <constructor-arg type="java.lang.Class" value="java.lang.Object"/> </bean> <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" id="jdkSerializationRedisSerializer"/> <!-- <bean class="org.codehaus.jackson.map.ObjectMapper" id="jackObjMapper"/> --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="#{redisProps['redis.pool.maxActive']}"/> <property name="maxIdle" value="#{redisProps['redis.pool.maxIdle']}"/> <property name="maxWaitMillis" value="#{redisProps['redis.pool.maxWait']}"/> <property name="testOnBorrow" value="#{redisProps['redis.pool.testOnBorrow']}"/> </bean> <bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:hostName="#{redisProps['redis.ip']}" p:port="#{redisProps['redis.port']}" p:timeout="#{redisProps['redis.timeout']}" p:password="#{redisProps['redis.password']}" p:database="#{redisProps['redis.database']}" p:poolConfig-ref="jedisPoolConfig" p:usePool="true"/> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connectionFactory-ref="redisConnectionFactory" p:keySerializer-ref="stringRedisSerializer" p:valueSerializer-ref="jacksonJsonRedisSerializer" p:hashKeySerializer-ref="stringRedisSerializer" p:hashValueSerializer-ref="jacksonJsonRedisSerializer"/> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg ref="jedisPoolConfig"/> <constructor-arg value="#{redisProps['redis.ip']}"/> <constructor-arg type="int" value="#{redisProps['redis.port']}"/> <constructor-arg type="int" value="#{redisProps['redis.timeout']}"/> <constructor-arg type="java.lang.String" value="#{redisProps['redis.password']}"/> <constructor-arg type="int" value="#{redisProps['redis.database']}"/> </bean> </beans>
redis.properties的檔案內容如下,maven管理的話,可以分別設定開發環境,測試環境,預釋出環境,生產環境等
redis.pool.maxActive=1024 redis.pool.maxIdle=200 redis.pool.maxWait=1000 redis.pool.testOnBorrow=true redis.pool.testOnReturn=true #database redis.ip=192.168.0.246 redis.port=6378 redis.password= redis.timeout=5000 redis.database=1
工具類如下:
package com.yjy.dg.app.report.dao; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.ListOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.SetOperations; import org.springframework.data.redis.core.ValueOperations; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; /** * ParentDao 操作字串redis快取方法 * list中的操作全是按照right方式 * * @author littlehow * @time 2016-08-12 09:02 */ public class RedisParentDao { /** * 日誌記錄 */ private Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired protected RedisTemplate<String, String> redisTemplate; /** * 字首 */ public static final String KEY_PREFIX_VALUE = "dg:report:value:"; public static final String KEY_PREFIX_SET = "dg:report:set:"; public static final String KEY_PREFIX_LIST = "dg:report:list:"; /** * 快取value操作 * @param k * @param v * @param time * @return */ protected boolean cacheValue(String k, String v, long time) { String key = KEY_PREFIX_VALUE + k; try { ValueOperations<String, String> valueOps = redisTemplate.opsForValue(); valueOps.set(key, v); if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS); return true; } catch (Throwable t) { logger.error("快取[" + key + "]失敗, value[" + v + "]", t); } return false; } /** * 快取value操作 * @param k * @param v * @return */ protected boolean cacheValue(String k, String v) { return cacheValue(k, v, -1); } /** * 判斷快取是否存在 * @param k * @return */ protected boolean containsValueKey(String k) { return containsKey(KEY_PREFIX_VALUE + k); } /** * 判斷快取是否存在 * @param k * @return */ protected boolean containsSetKey(String k) { return containsKey(KEY_PREFIX_SET + k); } /** * 判斷快取是否存在 * @param k * @return */ protected boolean containsListKey(String k) { return containsKey(KEY_PREFIX_LIST + k); } protected boolean containsKey(String key) { try { return redisTemplate.hasKey(key); } catch (Throwable t) { logger.error("判斷快取存在失敗key[" + key + ", error[" + t + "]"); } return false; } /** * 獲取快取 * @param k * @return */ protected String getValue(String k) { try { ValueOperations<String, String> valueOps = redisTemplate.opsForValue(); return valueOps.get(KEY_PREFIX_VALUE + k); } catch (Throwable t) { logger.error("獲取快取失敗key[" + KEY_PREFIX_VALUE + k + ", error[" + t + "]"); } return null; } /** * 移除快取 * @param k * @return */ protected boolean removeValue(String k) { return remove(KEY_PREFIX_VALUE + k); } protected boolean removeSet(String k) { return remove(KEY_PREFIX_SET + k); } protected boolean removeList(String k) { return remove(KEY_PREFIX_LIST + k); } /** * 移除快取 * @param key * @return */ protected boolean remove(String key) { try { redisTemplate.delete(key); return true; } catch (Throwable t) { logger.error("獲取快取失敗key[" + key + ", error[" + t + "]"); } return false; } /** * 快取set操作 * @param k * @param v * @param time * @return */ protected boolean cacheSet(String k, String v, long time) { String key = KEY_PREFIX_SET + k; try { SetOperations<String, String> valueOps = redisTemplate.opsForSet(); valueOps.add(key, v); if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS); return true; } catch (Throwable t) { logger.error("快取[" + key + "]失敗, value[" + v + "]", t); } return false; } /** * 快取set * @param k * @param v * @return */ protected boolean cacheSet(String k, String v) { return cacheSet(k, v, -1); } /** * 快取set * @param k * @param v * @param time * @return */ protected boolean cacheSet(String k, Set<String> v, long time) { String key = KEY_PREFIX_SET + k; try { SetOperations<String, String> setOps = redisTemplate.opsForSet(); setOps.add(key, v.toArray(new String[v.size()])); if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS); return true; } catch (Throwable t) { logger.error("快取[" + key + "]失敗, value[" + v + "]", t); } return false; } /** * 快取set * @param k * @param v * @return */ protected boolean cacheSet(String k, Set<String> v) { return cacheSet(k, v, -1); } /** * 獲取快取set資料 * @param k * @return */ protected Set<String> getSet(String k) { try { SetOperations<String, String> setOps = redisTemplate.opsForSet(); return setOps.members(KEY_PREFIX_SET + k); } catch (Throwable t) { logger.error("獲取set快取失敗key[" + KEY_PREFIX_SET + k + ", error[" + t + "]"); } return null; } /** * list快取 * @param k * @param v * @param time * @return */ protected boolean cacheList(String k, String v, long time) { String key = KEY_PREFIX_LIST + k; try { ListOperations<String, String> listOps = redisTemplate.opsForList(); listOps.rightPush(key, v); if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS); return true; } catch (Throwable t) { logger.error("快取[" + key + "]失敗, value[" + v + "]", t); } return false; } /** * 快取list * @param k * @param v * @return */ protected boolean cacheList(String k, String v) { return cacheList(k, v, -1); } /** * 快取list * @param k * @param v * @param time * @return */ protected boolean cacheList(String k, List<String> v, long time) { String key = KEY_PREFIX_LIST + k; try { ListOperations<String, String> listOps = redisTemplate.opsForList(); long l = listOps.rightPushAll(key, v); if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS); return true; } catch (Throwable t) { logger.error("快取[" + key + "]失敗, value[" + v + "]", t); } return false; } /** * 快取list * @param k * @param v * @return */ protected boolean cacheList(String k, List<String> v) { return cacheList(k, v, -1); } /** * 獲取list快取 * @param k * @param start * @param end * @return */ protected List<String> getList(String k, long start, long end) { try { ListOperations<String, String> listOps = redisTemplate.opsForList(); return listOps.range(KEY_PREFIX_LIST + k, start, end); } catch (Throwable t) { logger.error("獲取list快取失敗key[" + KEY_PREFIX_LIST + k + ", error[" + t + "]"); } return null; } /** * 獲取總條數, 可用於分頁 * @param k * @return */ protected long getListSize(String k) { try { ListOperations<String, String> listOps = redisTemplate.opsForList(); return listOps.size(KEY_PREFIX_LIST + k); } catch (Throwable t) { logger.error("獲取list長度失敗key[" + KEY_PREFIX_LIST + k + "], error[" + t + "]"); } return 0; } /** * 獲取總條數, 可用於分頁 * @param listOps * @param k * @return */ protected long getListSize(ListOperations<String, String> listOps, String k) { try { return listOps.size(KEY_PREFIX_LIST + k); } catch (Throwable t) { logger.error("獲取list長度失敗key[" + KEY_PREFIX_LIST + k + "], error[" + t + "]"); } return 0; } /** * 移除list快取 * @param k * @return */ protected boolean removeOneOfList(String k) { String key = KEY_PREFIX_LIST + k; try { ListOperations<String, String> listOps = redisTemplate.opsForList(); listOps.rightPop(KEY_PREFIX_LIST + k); return true; } catch (Throwable t) { logger.error("移除list快取失敗key[" + KEY_PREFIX_LIST + k + ", error[" + t + "]"); } return false; } }
以上就是對redis的操作工具實現了,學習筆記over