SpringBoot框架無需進行復雜整合,可使用SpringBoot依賴所引入的 org.springframework.data.redis.core.RedisTemplate來直接進行操作,但需要一些特殊的配置:
配置類中,實例化時需要進行序列化配置:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.data.redis.connection.RedisConnectionFactory; @Configuration public class RedisConfig { /** * 實例化 RedisTemplate 對象 * * @return */ @Bean public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); initDomainRedisTemplate(redisTemplate, redisConnectionFactory); return redisTemplate; } /** * 設置數據存入 redis 的序列化方式,並開啟事務 * * @param redisTemplate * @param factory */ private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) { // 如果不配置Serializer,那么存儲的時候缺省使用String,如果用User類型存儲,那么會提示錯誤User can't cast to String! redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // 開啟事務 redisTemplate.setEnableTransactionSupport(true); redisTemplate.setConnectionFactory(factory); } }
使用其進行Map的操作
@Resource private RedisTemplate<String,Object> template; public void setKey(String key, Map<String, Object> map) { this.template.opsForHash().putAll(key, map); } public Map<Object, Object> getMapValue(String key) { return this.template.opsForHash().entries(key); } public Object getValue(String key, String hashKey) { return this.template.opsForHash().get(key, hashKey); } public void deleteData(List<String> keys) { // 執行批量刪除操作時先序列化template template.setKeySerializer(new JdkSerializationRedisSerializer()); template.delete(keys); }
附:Redis對map的一些常用操作命令
HDEL key field1 [field2] 刪除一個或多個哈希表字段 HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。 HGET key field 獲取存儲在哈希表中指定字段的值。 HGETALL key 獲取在哈希表中指定 key 的所有字段和值 HINCRBY key field increment 為哈希表 key 中的指定字段的整數值加上增量 increment 。 HINCRBYFLOAT key field increment 為哈希表 key 中的指定字段的浮點數值加上增量 increment 。 HKEYS key 獲取所有哈希表中的字段 HLEN key 獲取哈希表中字段的數量 HMGET key field1 [field2] 獲取所有給定字段的值 HMSET key field1 value1 [field2 value2 ] 同時將多個 field-value (域-值)對設置到哈希表 key 中。 HSET key field value 將哈希表 key 中的字段 field 的值設為 value 。 HSETNX key field value 只有在字段 field 不存在時,設置哈希表字段的值。 HVALS key 獲取哈希表中所有值 HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的鍵值對。