springboot使用redis(StringRedisTemplate的常用方法)
1. 先了解RedisTemplate和StringRedisTemplate之間的關系:
- RedisTemplate是Spring對于Redis的封裝,而StringRedisTemplate繼承RedisTemplate。
- 兩者的數據是不共通的;也就是說StringRedisTemplate只能管理StringRedisTemplate里面的數據,
RedisTemplate只能管理RedisTemplate中的數據。 - StringRedisTemplate默認采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默認采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
2. RedisTemplate和StringRedisTemplate使用上的差別
- RedisTemplate:
redisTemplate中定義了對5種常用數據結構操作
- StringRedisTemplate
StringRedisTemplate中定義的5中數據結構,其實和redisTemplate一樣,只是參數改成了String,
兩者的使用就看大家的業務場景了,對筆者來說stringRedisTemplate也夠用了
3、在springboot 中使用RedisTemplate,StringRedisTemplate,
首先需要添加maven依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>4、在application.properties文件中配置redis
# Redis數據庫索引(默認為0) spring.redis.database=0 # Redis服務器地址 spring.redis.host=127.0.0.1 # Redis服務器連接端口 spring.redis.port=6379 # Redis服務器連接密碼(默認為空) spring.redis.password= # 連接池最大連接數(使用負值表示沒有限制) spring.redis.jedis.pool.max-idle=8 # 連接池最大阻塞等待時間(使用負值表示沒有限制) spring.redis.jedis.pool.max-wait=-1 # 連接池中的最小空閑連接 spring.redis.jedis.pool.min-idle=0 # 連接超時時間(毫秒) spring.redis.jedis.timeout=50005. RedisConfig配置類,相當于配置了RedisTemplate、和StringRedisTemplate
@Configuration public class RedisConfig{@AutowiredRedisConnectionFactory redisConnectionFactory;@Beanpublic RedisTemplate<String, Object> functionDomainRedisTemplate() {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();initDomainRedisTemplate(redisTemplate, redisConnectionFactory);return redisTemplate;}/**設置redisTemplate序列化策略,否則在使用redisTemplate的時候在redis的客戶端查看會出現亂碼*/private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());redisTemplate.setConnectionFactory(factory);} }6、到這一步就可以在代碼上就使用redis了,下面簡單演示StringRedisTemplate方法使用,如設置過期時間600秒
//先引入StringRedisTemplate@Autowiredprivate StringRedisTemplate stringRedisTemplate; 123 //向redis里存入數據和設置緩存時間 stringRedisTemplate.opsForValue().set("redis", "100", 60 * 10, TimeUnit.SECONDS); //val做-1操作 stringRedisTemplate.boundValueOps("redis").increment(-1); //根據key獲取緩存中的val stringRedisTemplate.opsForValue().get("redis") //val +1 stringRedisTemplate.boundValueOps("redis").increment(1); //根據key獲取過期時間 stringRedisTemplate.getExpire("redis"); //根據key獲取過期時間并換算成指定單位 stringRedisTemplate.getExpire("redis",TimeUnit.SECONDS); //根據key刪除緩存 stringRedisTemplate.delete("redis"); //檢查key是否存在,返回boolean值 stringRedisTemplate.hasKey("redis"); //向指定key中存放set集合 stringRedisTemplate.opsForSet().add("redis", "1","2","3"); //設置過期時間 stringRedisTemplate.expire("redis",1000 , TimeUnit.MILLISECONDS); //根據key查看集合中是否存在指定數據 stringRedisTemplate.opsForSet().isMember("redis", "1"); //根據key獲取set集合 stringRedisTemplate.opsForSet().members("redis"); //驗證有效時間 Long expire = stringRedisTemplate.boundHashOps("redis").getExpire(); System.out.println("redis有效時間:"+expire+"秒");7. 現在來介紹RedisTemplate()方法的一些常用方法,大家可以根據需求來使用
//先引入RedisTemplate@Autowiredprivate RedisTemplate redisTemplate;1、add(K key, V value, double score) 添加元素到變量中同時指定元素的分值
redisTemplate.opsForZSet().add("value","A",1); redisTemplate.opsForZSet().add("value","B",3); redisTemplate.opsForZSet().add("value","C",2);2、add(K key, Set<ZSetOperations.TypedTuple> tuples) 添加tuples到排序集key,或者score如果已存在則更新它。
ZSetOperations.TypedTuple<Object> typedTuple1 = new DefaultTypedTuple<Object>("A",6.0); ZSetOperations.TypedTuple<Object> typedTuple2 = new DefaultTypedTuple<Object>("B",7.0); ZSetOperations.TypedTuple<Object> typedTuple3 = new DefaultTypedTuple<Object>("C",5.0); Set<ZSetOperations.TypedTuple<Object>> typedTupleSet = new HashSet<ZSetOperations.TypedTuple<Object>>(); typedTupleSet.add(typedTuple1); typedTupleSet.add(typedTuple2); typedTupleSet.add(typedTuple3); redisTemplate.opsForZSet().add("typedTupleSet",typedTupleSet); Set valueSet = redisTemplate.opsForZSet().range("typedTupleSet",0,-1); System.out.println(valueSet);3、rank(K key, Object o) 獲取變量中元素的索引值
long index = redisTemplate.opsForZSet().rank("value","B"); System.out.println(index);4、count(K key, double min, double max) 獲取區間值的個數。
long count = redisTemplate.opsForZSet().count("zSetValue",1,5); System.out.println(count);5、range(K key, long start, long end) 獲取變量指定區間的元素
Set valueSet = redisTemplate.opsForZSet().range("value",0,-1); System.out.println(valueSet);6、rangeByLex(K key, RedisZSetCommands.Range range) 用于獲取滿足非score的排序取值。
這個排序只有在有相同分數的情況下才能使用,如果有不同的分數則返回值不確定。
7、rangeByScore(K key, double min, double max)
//根據設置的score獲取區間值。 Set valueSet = redisTemplate.opsForZSet().rangeByScore("zSetValue",1,2); System.out.println(valueSet);8、incrementScore(K key, V value, double delta) 修改元素的分值。
double incrementScore = redisTemplate.opsForZSet().incrementScore("zSetValue","A",5); //獲取元素的分值 score = redisTemplate.opsForZSet().score("zSetValue","A"); System.out.println("修改后A的分值:" + score);9、rangeByScoreWithScores(K key, double min, double max)
正序獲取RedisZSetCommands.Tuples的區間值通過分值。
10.reverseRangeByScoreWithScores(K key, double min, double max)
倒序排序獲取RedisZSetCommands.Tuples的分值區間值。
總結
以上是生活随笔為你收集整理的springboot使用redis(StringRedisTemplate的常用方法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 喜报!第四范式助力宁波银行荣获2020
- 下一篇: mysql 统计当天,本周,本月,上一月