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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2025/3/12 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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種常用數據結構操作

redisTemplate.opsForList();//操作list redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForCluster();//集群時使用 redisTemplate.opsForGeo();//地理位置時使用 redisTemplate.opsForHash();//操作hash redisTemplate.opsForSet();//操作set redisTemplate.opsForZSet();//操作有序set
  • 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=5000

5. 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的排序取值。
這個排序只有在有相同分數的情況下才能使用,如果有不同的分數則返回值不確定。

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)

//根據設置的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的區間值通過分值。

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的分值區間值。

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); }

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。