使用RedisTemplate存儲Map集合的一點注意


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] 迭代哈希表中的鍵值對。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM