日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

springboot使用redis(StringRedisTemplate的常用方法)

發(fā)布時(shí)間:2025/3/12 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot使用redis(StringRedisTemplate的常用方法) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 先了解RedisTemplate和StringRedisTemplate之間的關(guān)系:

  • RedisTemplate是Spring對(duì)于Redis的封裝,而StringRedisTemplate繼承RedisTemplate。
  • 兩者的數(shù)據(jù)是不共通的;也就是說(shuō)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中定義了對(duì)5種常用數(shù)據(jù)結(jié)構(gòu)操作

redisTemplate.opsForList();//操作list redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForCluster();//集群時(shí)使用 redisTemplate.opsForGeo();//地理位置時(shí)使用 redisTemplate.opsForHash();//操作hash redisTemplate.opsForSet();//操作set redisTemplate.opsForZSet();//操作有序set
  • StringRedisTemplate

StringRedisTemplate中定義的5中數(shù)據(jù)結(jié)構(gòu),其實(shí)和redisTemplate一樣,只是參數(shù)改成了String,
兩者的使用就看大家的業(yè)務(wù)場(chǎng)景了,對(duì)筆者來(lái)說(shuō)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ù)庫(kù)索引(默認(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ù)值表示沒(méi)有限制) spring.redis.jedis.pool.max-idle=8 # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制) spring.redis.jedis.pool.max-wait=-1 # 連接池中的最小空閑連接 spring.redis.jedis.pool.min-idle=0 # 連接超時(shí)時(shí)間(毫秒) spring.redis.jedis.timeout=5000

5. 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的客戶端查看會(huì)出現(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了,下面簡(jiǎn)單演示StringRedisTemplate方法使用,如設(shè)置過(guò)期時(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獲取過(guò)期時(shí)間 stringRedisTemplate.getExpire("redis"); //根據(jù)key獲取過(guò)期時(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è)置過(guò)期時(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)在來(lái)介紹RedisTemplate()方法的一些常用方法,大家可以根據(jù)需求來(lái)使用

//先引入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ù)則返回值不確定。

RedisZSetCommands.Range range = new RedisZSetCommands.Range(); //range.gt("A"); range.lt("B"); Set valueSet = redisTemplate.opsForZSet().rangeByLex("value", range); System.out.println(valueSet);

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ū)間值通過(guò)分值。

Set<ZSetOperations.TypedTuple<Object>> typedTupleSet = redisTemplate.opsForZSet().rangeByScoreWithScores("typedTupleSet",5,8); iterator = typedTupleSet.iterator(); while (iterator.hasNext()){ZSetOperations.TypedTuple<Object> typedTuple = iterator.next();Object value = typedTuple.getValue();double score = typedTuple.getScore();System.out.println(value + "----" + score ); }

10.reverseRangeByScoreWithScores(K key, double min, double max)
倒序排序獲取RedisZSetCommands.Tuples的分值區(qū)間值。

Set<ZSetOperations.TypedTuple<Object>> typedTupleSet = redisTemplate.opsForZSet().reverseRangeByScoreWithScores("zSetValue",1,5); iterator = typedTupleSet.iterator(); while (iterator.hasNext()){ZSetOperations.TypedTuple<Object> typedTuple = iterator.next();Object value = typedTuple.getValue();double score = typedTuple.getScore();System.out.println(value + "----" + score); }

總結(jié)

以上是生活随笔為你收集整理的springboot使用redis(StringRedisTemplate的常用方法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。