自己開發環境需要安裝 redis 服務,百度一下很多,下面主要說明Springboot 集成 redis 講解
我的版本 java8 + redis3.0 + springboot 1.5.9。 Spring redis 集成了 jedis
redis 中存儲的是 bytes
1 spring boot已經支持集成 redis,在 mvn 中只需添加依賴即可。pom 配置片段如下
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> ... <!-- 添加 redis 緩存支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
1.2 對 redis 進行配置,修改配置文件 application.properties
## Redis 配置 ## Redis數據庫索引(默認為0) spring.redis.database=0 ## Redis服務器地址 spring.redis.host=127.0.0.1 ## Redis服務器連接端口 spring.redis.port=6379 ## Redis服務器連接密碼(默認為空) spring.redis.password= ## 連接池最大連接數(使用負值表示沒有限制) spring.redis.pool.max-active=8 ## 連接池最大阻塞等待時間(使用負值表示沒有限制) spring.redis.pool.max-wait=-1 ## 連接池中的最大空閑連接 spring.redis.pool.max-idle=8 ## 連接池中的最小空閑連接 spring.redis.pool.min-idle=0 ## 連接超時時間(毫秒) spring.redis.timeout=0
2 連接 redis 需要 RedisConnection 和 RedisConnectionFactory,
RedisConnection 是通過 RedisConnectionFactory 進行創建。
RedisConnection 提供較低級的數據操作 (byte
arrays)
2.1 創建配置類 RedisConfig
@Configuration public class RedisConfig { @Autowired private RedisConnectionFactory redisConnectionFactory; }
3 RedisTemplate
RedisTemplate 是 redis 模塊的核心類,是對 redis 操作的較高抽象具有豐富的特性。他關注的是序列化和連接管理。他是線程安全的,提供了如下操作接口
HashOperations
HyperLogLogOperations
ListOperations
SetOperations
ValueOperations
ZSetOperations
Spring 還提供了一個 StringRedisTemplate,方便對 String 進行處理。java 中經常遇到對象,可以使用 jackson 進行對象-字符串 轉化。可以提供一個工具類。
JsonUtil
public class JsonUtil { private static ObjectMapper objectMapper = new ObjectMapper(); public static String convertObj2String(Object object) { String s = null; try { s = objectMapper.writeValueAsString(object); } catch (JsonProcessingException e) { e.printStackTrace(); } return s; } public static <T> T convertString2Obj(String s, Class<T> clazz) { T t = null; try { t = objectMapper.readValue(s, clazz); } catch (IOException e) { e.printStackTrace(); } return t; } }
至此,redis 配置如下
@Configuration public class RedisConfig { @Autowired private RedisConnectionFactory redisConnectionFactory; @Bean public RedisTemplate<String, String> redisTemplate(){ StringRedisTemplate redisTemplate = new StringRedisTemplate(redisConnectionFactory); return redisTemplate; } }
說明:默認情況下bean的名稱和方法名稱相同,你也可以使用name屬性來指定。上面的 IOC 容器中注冊了 ID為 redisTemplate 的 bean。
4 使用 redisTemplate 進行增刪改查
@Service public class RedisService { @Autowired private StringRedisTemplate redisTemplate; /** * 一周有多少秒 */ private static final long WEEK_SECONDS = 7 * 24 * 60 * 60; /** * 將 key,value 存放到redis數據庫中,默認設置過期時間為一周 * * @param key * @param value */ public void set(String key, Object value) { redisTemplate.opsForValue().set(key, JsonUtil.convertObj2String(value), WEEK_SECONDS, TimeUnit.SECONDS); } /** * 將 key,value 存放到redis數據庫中,設置過期時間單位是秒 * * @param key * @param value * @param expireTime */ public void set(String key, Object value, long expireTime) { redisTemplate.opsForValue().set(key, JsonUtil.convertObj2String(value), expireTime, TimeUnit.SECONDS); } /** * 判斷 key 是否在 redis 數據庫中 * * @param key * @return */ public boolean exists(final String key) { return redisTemplate.hasKey(key); } /** * 獲取與 key 對應的對象 * @param key * @param clazz 目標對象類型 * @param <T> * @return */ public <T> T get(String key, Class<T> clazz) { String s = get(key); if (s == null) { return null; } return JsonUtil.convertString2Obj(s, clazz); } /** * 獲取 key 對應的字符串 * @param key * @return */ public String get(String key) { return redisTemplate.opsForValue().get(key); } /** * 刪除 key 對應的 value * @param key */ public void delete(String key) { redisTemplate.delete(key); } }