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{

    @Autowired
    RedisConnectionFactory redisConnectionFactory;

    @Bean
    public 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
 @Autowired
 private StringRedisTemplate stringRedisTemplate;
//向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
 @Autowired
 private 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);
}

引用文章:RedisTemplate常用集合使用说明-opsForZSet(六)

  • 16
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Data Redis提供了多种操作Redis Hash数据类型的接口,下面介绍一些常用方法: 1. put(K key, HK hashKey, HV value):向指定key的Hash中添加一个键值对。 ```java hashOps.put("myKey", "myField", "myValue"); ``` 2. putAll(K key, Map<? extends HK, ? extends HV> m):向指定key的Hash中添加一个Map。 ```java Map<String, String> map = new HashMap<>(); map.put("field1", "value1"); map.put("field2", "value2"); hashOps.putAll("myKey", map); ``` 3. get(K key, HK hashKey):获取指定key的Hash中指定hashKey的值。 ```java String value = hashOps.get("myKey", "myField"); ``` 4. delete(K key, HK... hashKeys):删除指定key的Hash中指定hashKey。 ```java hashOps.delete("myKey", "myField"); ``` 5. hasKey(K key, Object hashKey):检查指定key的Hash中是否存在指定hashKey。 ```java boolean exists = hashOps.hasKey("myKey", "myField"); ``` 6. size(K key):获取指定key的Hash中键值对的数量。 ```java long size = hashOps.size("myKey"); ``` 7. keys(K key):获取指定key的Hash中所有的hashKey。 ```java Set<String> keys = hashOps.keys("myKey"); ``` 8. values(K key):获取指定key的Hash中所有的value。 ```java List<String> values = hashOps.values("myKey"); ``` 9. entries(K key):获取指定key的Hash中所有的键值对。 ```java Map<String, String> entries = hashOps.entries("myKey"); ``` 10. increment(K key, HK hashKey, long delta):将指定key的Hash中指定hashKey的值加上delta。 ```java hashOps.increment("myKey", "myField", 1L); ``` 11. increment(K key, HK hashKey, double delta):将指定key的Hash中指定hashKey的值加上delta。 ```java hashOps.increment("myKey", "myField", 1.0); ``` 总之,Spring Data Redis提供了丰富的操作Redis Hash数据类型的接口,可以根据实际需求进行选择和使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高并发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值