StringRedisTemplate操做redis數據

StringRedisTemplate與RedisTemplate區別點

  • 二者的關係是StringRedisTemplate繼承RedisTemplate。java

  • 二者的數據是不共通的;也就是說StringRedisTemplate只能管理StringRedisTemplate裏面的數據,RedisTemplate只能管理RedisTemplate中的數據。redis

  • 其實他們二者之間的區別主要在於他們使用的序列化類:

    RedisTemplate使用的是JdkSerializationRedisSerializer    存入數據會將數據先序列化成字節數組而後在存入Redis數據庫。 spring

      StringRedisTemplate使用的是StringRedisSerializer數據庫

  • 使用時注意事項:
   當你的redis數據庫裏面原本存的是字符串數據或者你要存取的數據就是字符串類型數據的時候,那麼你就使用StringRedisTemplate便可。
   可是若是你的數據是複雜的對象類型,而取出的時候又不想作任何的數據轉換,直接從Redis裏面取出一個對象,那麼使用RedisTemplate是更好的選擇。
  • RedisTemplate使用時常見問題:

    redisTemplate 中存取數據都是字節數組。當redis中存入的數據是可讀形式而非字節數組時,使用redisTemplate取值的時候會沒法獲取導出數據,得到的值爲null。能夠使用 StringRedisTemplate 試試。數組

RedisTemplate中定義了5種數據結構操做

redisTemplate.opsForValue();  //操做字符串
redisTemplate.opsForHash();   //操做hash
redisTemplate.opsForList();   //操做list
redisTemplate.opsForSet();    //操做set
redisTemplate.opsForZSet();   //操做有序set

StringRedisTemplate經常使用操做

stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis裏存入數據和設置緩存時間  

stringRedisTemplate.boundValueOps("test").increment(-1);//val作-1操做

stringRedisTemplate.opsForValue().get("test")//根據key獲取緩存中的val

stringRedisTemplate.boundValueOps("test").increment(1);//val +1

stringRedisTemplate.getExpire("test")//根據key獲取過時時間

stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根據key獲取過時時間並換算成指定單位 

stringRedisTemplate.delete("test");//根據key刪除緩存

stringRedisTemplate.hasKey("546545");//檢查key是否存在,返回boolean值 

stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合

stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//設置過時時間

stringRedisTemplate.opsForSet().isMember("red_123", "1")//根據key查看集合中是否存在指定數據

stringRedisTemplate.opsForSet().members("red_123");//根據key獲取set集合

 StringRedisTemplate的使用 

 springboot中使用註解@Autowired 便可緩存

@Autowired 
public StringRedisTemplate stringRedisTemplate;	

使用樣例:

 

@RestController
@RequestMapping("/user")
public class UserResource {
    private static final Logger log = LoggerFactory.getLogger(UserResource.class);
    @Autowired
    private UserService userService;
    
    @Autowired 
    public StringRedisTemplate stringRedisTemplate;    
    
    @RequestMapping("/num")
    public String countNum() {
        String userNum = stringRedisTemplate.opsForValue().get("userNum");
        if(StringUtils.isNull(userNum)){
            stringRedisTemplate.opsForValue().set("userNum", userService.countNum().toString());
        }
        return  userNum;
    }
}
相關文章
相關標籤/搜索