Springboot如何操作redis數據
StringRedisTemplate與RedisTemplate區別點
兩者的關系是StringRedisTemplate繼承RedisTemplate。
兩者的數據是不共通的;也就是說StringRedisTemplate只能管理StringRedisTemplate里面的數據,RedisTemplate只能管理RedisTemplate中的數據。
其實他們兩者之間的區別主要在于他們使用的序列化類:
RedisTemplate使用的是JdkSerializationRedisSerializer 存入數據會將數據先序列化成字節數組然后在存入Redis數據庫。
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(); //操作有序setStringRedisTemplate常用操作
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 即可
@Autowiredpublic 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; }}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。
相關文章: