中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springboot~redis正確(que)的使用

redis實(shi)現(xian)了(le)對數(shu)據的(de)緩存(cun),在項(xiang)目里一(yi)些字典(dian)數(shu)據,會話數(shu)據,臨時性數(shu)據都會向redis來存(cun)儲(chu),而(er)在springboot里對redis也有(you)支(zhi)持,一(yi)般來說多個(ge)線(xian)(xian)程共同使(shi)用一(yi)個(ge)redis實(shi)現(xian)是有(you)線(xian)(xian)程安全的(de)風險的(de),而(er)每個(ge)實(shi)現(xian)一(yi)個(ge)線(xian)(xian)程又太浪費資源,無(wu)法(fa)控制線(xian)(xian)程數(shu)量是非(fei)常危險的(de),所以就出現(xian)了(le)一(yi)些redis線(xian)(xian)程池組(zu)件,下面說一(yi)下兩個(ge)主要的(de)組(zu)件。

  • jedis 線程池主要是每個實例有自己的線程,線程可以從它建立的池子里獲取
  • lettuce lettuce是 apache推出的線程池工具,它的redis實例是可以被多個線程共享訪問的,提高了資源使用率

redis序列化配置

一(yi)般來說, redis-key采用字符串序列化; redis-value采用json序列化, json的體積(ji)小,可讀性(xing)高(gao),不需要實現serializer接口。

/**
 * 對redis的配置.
 */
@Configuration
public class RedisConfig {

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;

    /**
     * redis重寫RedisTemplate.
     */
    @Bean
    public RedisTemplate redisTemplate() {
        RedisTemplate redisTemplate = new RedisTemplate();
        RedisSerializer<String> stringSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        //序列化時允許非常量字段均輸出類型,即redis序列化后帶有類型
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // redis key的序列化
        redisTemplate.setKeySerializer(stringSerializer);
        redisTemplate.setHashKeySerializer(stringSerializer);

        // redis value的序列化
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }
}

上面代碼中,om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL)產生(sheng)的json串是帶有類(lei)型的,這樣再反序列化時可以(yi)直接通過(guo)類(lei)型去推斷(duan)。

[
  "com.lind.basic.entity.Token",
  {
    "credentials": "ok",
    "region": "hello",
    "bucket": null
  }
]

看一下添(tian)加和(he)讀(du)取的代碼

 @GetMapping("set")
    public String set() throws JsonProcessingException {
        Token token = Token.builder()
                .credentials("ok")
                .region("hello")
                .build();
        redisTemplate.opsForValue().set("test:user", token);//redisTemplate幫我們序列化
        redisTemplate.opsForHash().put("author", "zzl", token);
        return "OK";
    }

    @GetMapping("get")
    public Token get() throws IOException {
        return (Token) redisTemplate.opsForValue().get("test:user");
    }

注意:對(dui)于實(shi)體(ti)類Token它(ta)應該有一個無參構造方法,這是反序列化時需要的。

posted @ 2020-05-28 09:47  張占嶺  閱讀(1633)  評論(0)    收藏  舉報