springboot使用redis(StringRedisTemplate的常用方法)
1. 先了解RedisTemplate和StringRedisTemplate之間的關(guān)系:
- RedisTemplate是Spring對于Redis的封裝,而StringRedisTemplate繼承RedisTemplate。
- 兩者的數(shù)據(jù)是不共通的;也就是說StringRedisTemplate只能管理StringRedisTemplate里面的數(shù)據(jù),
RedisTemplate只能管理RedisTemplate中的數(shù)據(jù)。 - StringRedisTemplate默認(rèn)采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默認(rèn)采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
2. RedisTemplate和StringRedisTemplate使用上的差別
- RedisTemplate:
redisTemplate中定義了對5種常用數(shù)據(jù)結(jié)構(gòu)操作
- StringRedisTemplate
StringRedisTemplate中定義的5中數(shù)據(jù)結(jié)構(gòu),其實(shí)和redisTemplate一樣,只是參數(shù)改成了String,
兩者的使用就看大家的業(yè)務(wù)場景了,對筆者來說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數(shù)據(jù)庫索引(默認(rèn)為0) spring.redis.database=0 # Redis服務(wù)器地址 spring.redis.host=127.0.0.1 # Redis服務(wù)器連接端口 spring.redis.port=6379 # Redis服務(wù)器連接密碼(默認(rèn)為空) spring.redis.password= # 連接池最大連接數(shù)(使用負(fù)值表示沒有限制) spring.redis.jedis.pool.max-idle=8 # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制) spring.redis.jedis.pool.max-wait=-1 # 連接池中的最小空閑連接 spring.redis.jedis.pool.min-idle=0 # 連接超時(shí)時(shí)間(毫秒) spring.redis.jedis.timeout=50005. RedisConfig配置類,相當(dāng)于配置了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;}/**設(shè)置redisTemplate序列化策略,否則在使用redisTemplate的時(shí)候在redis的客戶端查看會出現(xiàn)亂碼*/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方法使用,如設(shè)置過期時(shí)間600秒
//先引入StringRedisTemplate@Autowiredprivate StringRedisTemplate stringRedisTemplate; 123 //向redis里存入數(shù)據(jù)和設(shè)置緩存時(shí)間 stringRedisTemplate.opsForValue().set("redis", "100", 60 * 10, TimeUnit.SECONDS); //val做-1操作 stringRedisTemplate.boundValueOps("redis").increment(-1); //根據(jù)key獲取緩存中的val stringRedisTemplate.opsForValue().get("redis") //val +1 stringRedisTemplate.boundValueOps("redis").increment(1); //根據(jù)key獲取過期時(shí)間 stringRedisTemplate.getExpire("redis"); //根據(jù)key獲取過期時(shí)間并換算成指定單位 stringRedisTemplate.getExpire("redis",TimeUnit.SECONDS); //根據(jù)key刪除緩存 stringRedisTemplate.delete("redis"); //檢查key是否存在,返回boolean值 stringRedisTemplate.hasKey("redis"); //向指定key中存放set集合 stringRedisTemplate.opsForSet().add("redis", "1","2","3"); //設(shè)置過期時(shí)間 stringRedisTemplate.expire("redis",1000 , TimeUnit.MILLISECONDS); //根據(jù)key查看集合中是否存在指定數(shù)據(jù) stringRedisTemplate.opsForSet().isMember("redis", "1"); //根據(jù)key獲取set集合 stringRedisTemplate.opsForSet().members("redis"); //驗(yàn)證有效時(shí)間 Long expire = stringRedisTemplate.boundHashOps("redis").getExpire(); System.out.println("redis有效時(shí)間:"+expire+"秒");7. 現(xiàn)在來介紹RedisTemplate()方法的一些常用方法,大家可以根據(jù)需求來使用
//先引入RedisTemplate@Autowiredprivate RedisTemplate redisTemplate;1、add(K key, V value, double score) 添加元素到變量中同時(shí)指定元素的分值
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) 獲取區(qū)間值的個(gè)數(shù)。
long count = redisTemplate.opsForZSet().count("zSetValue",1,5); System.out.println(count);5、range(K key, long start, long end) 獲取變量指定區(qū)間的元素
Set valueSet = redisTemplate.opsForZSet().range("value",0,-1); System.out.println(valueSet);6、rangeByLex(K key, RedisZSetCommands.Range range) 用于獲取滿足非score的排序取值。
這個(gè)排序只有在有相同分?jǐn)?shù)的情況下才能使用,如果有不同的分?jǐn)?shù)則返回值不確定。
7、rangeByScore(K key, double min, double max)
//根據(jù)設(shè)置的score獲取區(qū)間值。 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的區(qū)間值通過分值。
10.reverseRangeByScoreWithScores(K key, double min, double max)
倒序排序獲取RedisZSetCommands.Tuples的分值區(qū)間值。
總結(jié)
以上是生活随笔為你收集整理的springboot使用redis(StringRedisTemplate的常用方法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 喜报!第四范式助力宁波银行荣获2020
- 下一篇: 学习Spring Boot:(五)使用