首页 > 数据库 >redisTemplate

redisTemplate

时间:2023-04-20 11:45:34浏览次数:28  
标签:key System value2 value1 redisTemplate out

RedisTemplate

                // 设置序列化
		redisTemplate.setDefaultSerializer(new FastJsonRedisSerializer<>(Object.class));
		redisTemplate.setValueSerializer(new GenericFastJsonRedisSerializer());

1. RedisTemplate中定义了对5种数据结构操作

redisTemplate.opsForValue(); // 操作字符串
redisTemplate.opsForHash(); // 操作hash
redisTemplate.opsForList(); // 操作list
redisTemplate.opsForSet(); // 操作set
redisTemplate.opsForZset(); // 操作zset

除了上面的方法,还有另外的方法:

redistempalate.boundValueOps     // 操作字符串
redistempalate.boundHashOps     // 操作hash
redistempalate.boundListOps     // 操作list
redistempalate.boundSetOps      // 操作set   
redistempalate.boundZSetOps     // 操作zset

PS:opsForXXX和boundXXXOps的区别

XXX为value的类型,opsForXXX获取一个operator,但是没有指定操作的对象(key),可以在一个连接(事务)内操作多个key以及对应的value;

boundXXXOps获取了一个指定操作对象(key)的operator,在一个连接(事务)内只能操作这个key对应的value。

2. opsForXXX方法的操作

1. String类型相关操作

通过opsForValue()方法下的api操作redis的String类型,String结构类型为(key,value)类型

1. set(K key, Vvalue);

方法功能:赋值,赋值相应key,添加value值

示列:

redisTemplate.opsForValue().set("key1", "value1");
String value1= (String) redisTemplate.opsForValue().get("key1");
System.out.println(value1);

运行结果为:value1

2. get(K key);

方法功能: 取值,获取相应key的value值

示列:

redisTemplate.opsForValue().set("key1", "value1");
String value1= (String) redisTemplate.opsForValue().get("key1");
System.out.println(value1);

运行结果为:value1

3. set(K key, V value, long time, TimeUnit.SECONDS);

方法功能:赋值,赋值相应key,添加value值并设置过期时间

示列:

redisTemplate.opsForValue().set("key2", "value2", 10, TimeUnit.SECONDS);
System.out.println(redisTemplate.opsForValue().get("key2"));

运行结果为:value2

PS:10秒后此key和value值过期,无效

4. setIfAbsent(K key, V value);

方法功能: 赋值,若key不存在,才设值,如存在,此方法无效;

示列:

redisTemplate.opsForValue().set("key1", "value1");
redisTemplate.opsForValue().setIfAbsent("key1", "value3");
redisTemplate.opsForValue().setIfAbsent("key3", "value3");
String value3= (String) redisTemplate.opsForValue().get("key1");
String value4= (String) redisTemplate.opsForValue().get("key3");
System.out.println("key存在情况:"+value3+" "+"key不存在情况:"+value4);

运行结果为:key存在情况:value1 key不存在情况:value3

5. multiSet(Map<? extends K, ? extends V> map);

方法功能: 赋值,批量赋值,通过map集合进行调用

示列:

Map<String, String> map1 = new HashMap<String, String>();
map1.put("k1", "v1");
map1.put("k2", "v2");
map1.put("k3", "v3");
redisTemplate.opsForValue().multiSet(map1);

String value1= (String) redisTemplate.opsForValue().get("k1");
String value2= (String) redisTemplate.opsForValue().get("k2");
String value3= (String) redisTemplate.opsForValue().get("k3");
System.out.print(value1);
System.out.print(value2);
System.out.print(value3);

运行结果为:v1 v2 v3

6. multiGet(K key);

方法功能:取值,批量取值,通过list集合调用取值

示范:

Map<String, String> map1 = new HashMap<String, String>();
map1.put("k1", "v1");
map1.put("k2", "v2");
map1.put("k3", "v3");
redisTemplate.opsForValue().multiSet(map1);

//批量取值
List<String> keys = new ArrayList<String>();
keys.add("k1");
keys.add("k2");
keys.add("k3");

List<Object> value5 = redisTemplate.opsForValue().multiGet(keys);
System.out.println(value5);

运行结果为:[v1, v2, v3]

2.哈希类型(Hash结构)相关操作

通过opsForHash()方法下的api操作redis的Hash类型,Hash结构类型为(key1,(key2,value))类型,key1为大key,(key2,value2)为大value,key2为小key,value2为小value,相当于(key,map)结构

1. put(H key1, HK key2, V value);

方法功能:赋值,把key1当做大key,key2当做小key,value做为value值

示列:

redisTemplate.opsForHash().put("key1", "key2", "value");
String value = (String) redisTemplate.opsForHash().get("key1","key2");
System.out.println(value);

运行结果为:value

2. get(H key1, HK key2);

方法功能:取值,获取指定大key的集合指定小key的值

示列:

redisTemplate.opsForHash().put("key1", "key2", "value");
String value = (String) redisTemplate.opsForHash().get("key1","key2");
System.out.println(value);

运行结果为:value

3.delete(H key1, HK key2);

方法功能:删除,删除对应的key2及其value

示列:

redisTemplate.opsForHash().delete("k1", "name");

运行结果:把redis后台的名为name的小key及其value删除

4. keys(K key);

方法功能:参数key为大key,取值,获取指定大key的集合所有小key

示列:

redisTemplate.opsForHash().put("key1", "key2", "value1");
redisTemplate.opsForHash().put("key1", "key3", "value2");
redisTemplate.opsForHash().put("key1", "key4", "value3");
Set<Object> value= redisTemplate.opsForHash().keys("key1");
System.out.println(value);

运行结果为:[key4, key3,key2]

5. values(K key);

方法功能:参数key为大key,取值,获取指定大key的所有值

示列:

redisTemplate.opsForHash().put("key1", "key2", "value1");
redisTemplate.opsForHash().put("key1", "key3", "value2");
redisTemplate.opsForHash().put("key1", "key4", "value3");
List<Object> list = redisTemplate.opsForHash().values("key1");
System.out.println(list);

运行结果为:[value1, value2,value3]

6. entries(K key);

方法功能:参数key为大key,取值,获取指定大key的所有键值对

示列:

redisTemplate.opsForHash().put("key1", "key2", "value2");
redisTemplate.opsForHash().put("key1", "key3", "value3");
redisTemplate.opsForHash().put("key1", "key4", "value4");

Map<Object, Object> resultMap= redisTemplate.opsForHash().entries("key11");
System.out.println(resultMap);

运行结果为:{key2=value2, key3=value3, key4=value4}

7. hasKey(H key1, HK key2);

方法功能:判断,判断大key里面是否有这个小key,如有则返回true,没有则返回false

示列:

redisTemplate.opsForHash().put("key1", "key2", "value2");
Boolean a =redisTemplate.opsForHash().hasKey("kk", "key1");
Boolean b =redisTemplate.opsForHash().hasKey("key1", "key1");

System.out.println(a);
System.out.println(b);

运行结果为:false true

8. putAll(K key1,Map<? extends HK, ? extends HV> map);

方法功能:赋值,把map集合保存在命名为map的大key上,其中map为大key,map集合为value

Map<String,String> map=new HashMap<String,String>();
map1.put("key1","value1");
map1.put("key2","value2");
map1.put("key3","value3");
map1.put("key4","value4");
map1.put("key5","value5");

redisTemplate.opsForHash().putAll("map",map);

Map<Object, Object> resultMap= redisTemplate.opsForHash().entries("map");
System.out.println(resultMap);

运行结果为:{key1=value1, key2=value2, key5=value5, key3=value3, key4=value4}

9. multiGet(K key, keys);

方法功能: 取值,根据大key和多个小key找出对应的多个值

示列:

Map<String,String> map=new HashMap<String,String>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
map.put("key4","value4");
map.put("key5","value5");

redisTemplate.opsForHash().putAll("map",map);

Collection<Object> keys = new ArrayList<>();
keys.add("key1");
keys.add("key2");
keys.add("key3");

List<Object> resultList =redisTemplate.opsForHash().multiGet("map", keys);
System.out.println(resultList);

运行结果为:[value1, value2, value3]

3. List类型相关操作

通过opsForList()方法下的api操作redis的List类型,Hash结构类型为(key1,List)类型

1. leftPush(K key, V value);

方法功能:赋值,向集合左边添加元素值

示列:

redisTemplate.opsForList().leftPush("listkey1","value1");
// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:[value1]

2. range(K key, long start, long end);

方法功能:获取指定区间的值

redisTemplate.opsForList().leftPush("listkey1","value1");
// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:[value1]

3. set(K key, long index, V value);

方法功能:赋值,在集合的指定位置插入元素,如果指定位置已有元素,则覆盖,没有则新增

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().set("listkey1",2,"value3");

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value1, value2, value6, value2, value2]

[value1, value2, value3, value2, value2]

4. rightPush(K key, V value) ;

方法功能:赋值,向集合最右边添加元素

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().rightPush("listkey1","value4") ;

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value3]

[value3, value4]

5. remove(K key, long count, Object value);

方法功能:删除,删除指定key,指定范围的元素;

count> 0:删除等于从左到右移动的值的第一个元素;
count< 0:删除等于从右到左移动的值的第一个元素;
count = 0:删除等于value的所有元素。

示列:

redisTemplate.opsForList().remove("listkey1",0,"value1");

运行结果为:删除掉redis后台listkey1为key的所有value1的值

6. leftPop(K key);

方法功能:移除指定key的的左边第一个元素值。

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().leftPop("listkey1") ;

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value3, value4]

[value4]

7. rightPop(K key);

方法功能:移除指定key的的右边第一个元素值

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().rightPop("listkey1") ;

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value3, value4]

[value3]

8. index(K key, long index);

方法功能:获取指定key的指定位置的值

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
System.out.println(redisTemplate.opsForList().index("listkey1",1));

运行结果为:

[value3, value4, value5]
value4

9. trim(K key, long start, long end);

方法功能:截取集合元素长度,保留长度内的数据

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().trim("listkey1", 1, 3);

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value1, value2, value3, value4, value5]

[value2, value3, value4]

10. leftPushAll(K key, V… values);

方法功能:指定key,向左边批量添加参数元素

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().leftPushAll("listkey1", "value3","value4","value5");

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value1, value2][value5, value4, value3, value1, value2]

11. rightPushAll(K key, V… values);

方法功能:指定key,向右边批量添加参数元素

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().rightPushAll("listkey1", "value3","value4","value5");

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value1, value2]

[value1, value2, value3, value4, value5]

4.Set类型相关操作

通过opsForSet()方法下的api操作redis的Set类型,Set结构类型为(key1,Set)类型

1. add(K key, V… value);

方法功能:向指定key中添加元素

示列:

redisTemplate.opsForSet().add("keySet1","value1","value2","value3","value4","value5");
//获取所有成员
Set<Object> value1= redisTemplate.opsForSet().members("keySet1");
System.out.println(value1);

运行结果为:

[value1, value4, value2, value3, value5]

2.opsForSet().members(K key);

方法功能:获取指定key的set集合

示列:

redisTemplate.opsForSet().add("keySet1","value1","value2","value3","value4","value5");
//获取所有成员
Set<Object> value1= redisTemplate.opsForSet().members("keySet1");
System.out.println(value1);

运行结果为:

[value1, value4, value2, value3, value5]

3. members(K key);

方法功能:删除指定key及其value值

示列:

redisTemplate.opsForSet().remove("keySet1");

运行结果为:删除redis后台的指定key的set集合及其key

4. remove(K key, Object… value);

方法功能:删除指定key的value值

示列:

redisTemplate.opsForSet().add("keySet1","value1","value2","value3","value4","value5");
redisTemplate.opsForSet().remove("keySet1", "value1","value2");
//获取所有成员
Set<Object> value1= redisTemplate.opsForSet().members("keySet1");
System.out.println(value1);

运行结果为:

[value4, value3, value5]

5. pop(K key);

方法功能:从集合中随机删除一个元素,并返回该元素

示列:

redisTemplate.opsForSet().add("keySet1","value1","value2","value3","value4","value5");
System.out.println(redisTemplate.opsForSet().pop("keySet1"));
//获取所有成员
Set<Object> value1= redisTemplate.opsForSet().members("keySet1");
System.out.println(value1);

运行结果为:

value5
[value1, value2, value3, value4]

6. isMember(K key,Object value);

方法功能:判断指定key的元素值中是否存在某元素

示列:

redisTemplate.opsForSet().add("keySet1","value1","value2","value3","value4","value5");
System.out.println(redisTemplate.opsForSet().isMember("keySet1","value1"));
//获取所有成员
Set<Object> value1= redisTemplate.opsForSet().members("keySet1");
System.out.println(value1);

运行结果为:

true
[value1, value2, value4, value3, value5]

5. ZSet类型相关操作

通过opsForZset()方法下的api操作redis的ZSet类型,Set结构类型为(key1,Set)类型,与set类型不同的是,在set的基础上增加了一个顺序属性,这一属性在添加时可以指定,每次指定后,zset会自动重新按新的值调整顺序

1. add(K key, V value, double score);

方法功能:新增一个有序集合,存在的话为false,不存在的话为true,参数score为排序的参照,参数score越大,越小插入,越靠近右边

示列:

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 3);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2);

Set<Object> range = redisTemplate.opsForZSet().range("ZSetKey1", 0, -1);
// 按照数字大小来从大到小排序,大的在右边
System.out.println(range);

运行结果为:[value2, value1]

2. range(K key, long start, long end);

方法功能:获取指定区间的值

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 3);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2);

Set<Object> range = redisTemplate.opsForZSet().range("ZSetKey1", 0, -1);
// 按照数字大小来从大到小排序,大的在右边
System.out.println(range);

运行结果为:[value2, value1]

3. remove(K key,V value);

方法功能:删除指定key的指定元素

示列:

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 1.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value3", 3.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value4", 4.0);

//从集合中删除指定元素
redisTemplate.opsForZSet().remove("ZSetKey1", "value2");

Set<Object> range = redisTemplate.opsForZSet().range("ZSetKey1", 0, -1);
// 按照数字大小来从大到小排序,大的在右边
System.out.println(range);

运行结果为:[value1, value3, value4]

4. incrementScore(K key,V value, 5,double score);

方法功能:给指定key的指定值加分,使其排名靠前

示列:

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 1.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value3", 3.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value4", 4.0);

//为指定元素加分
Double score = redisTemplate.opsForZSet().incrementScore("ZSetKey1", "value1", 5);
System.out.println(score);//返回加分后的得分

Set<Object> range = redisTemplate.opsForZSet().range("ZSetKey1", 0, -1);
// 按照数字大小来从大到小排序,大的在右边
System.out.println(range);

运行结果为:[value2, value3, value4, value1]

5. score(K key,V value);

方法功能:获取指定key的指定值的分数

示列:

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 1.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value3", 3.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value4", 4.0);

//获得指定元素的分数
Double score = redisTemplate.opsForZSet().score("ZSetKey1", "value3");
System.out.println(score);

运行结果为:3.0

6. count(K key, double start, double end);

方法功能:返回指定key的集合内指定分数范围的成员个数

示列:

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 1.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value3", 3.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value4", 4.0);

//返回集合内指定分数范围的成员个数
Long count = redisTemplate.opsForZSet().count("ZSetKey1", 1, 3);
System.out.println(count);

运行结果为:3

7. removeRangeByScore(K key, double start, double end);

方法功能:删除指定key指定分数范围内的元素

示列:

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 1.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value3", 3.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value4", 4.0);


Set<Object> range = redisTemplate.opsForZSet().range("ZSetKey1", 0, -1);
// 按照数字大小来从大到小排序,大的在右边
System.out.println(range);

redisTemplate.opsForZSet().removeRangeByScore("ZSetKey1", 2, 4);
Set<Object> range1 = redisTemplate.opsForZSet().range("ZSetKey1", 0, -1);
// 按照数字大小来从大到小排序,大的在右边
System.out.println(range1);

运行结果为:

[value1, value2, value3, value4]

[value1]

标签:key,System,value2,value1,redisTemplate,out
From: https://www.cnblogs.com/fuqian/p/17336238.html

相关文章

  • 记录 RedisTemplate.executePipelined 使用问题
    需求,向redis写入2000万个key@Slf4j@Component("job2")publicclassToRedis2implementsIJob{privateAtomicLongcount=newAtomicLong(0);privateLongoldCount=0L;privateList<String>userIdList=newArrayList<>();pri......
  • Jedis与RedisTemplate的区别
    Jedis与RedisTemplate的区别:Jedis是Redis官方推荐的、面向Java的操作Redis的客户端,可以用JedisPool来获得连接进行get、set、del等操作相对简单,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说,可以方便地更换Redis的Java客户端,还......
  • @Cacheable和@CachePut存入redis的数据使用redisTemplate取出时为null的解决
    当使用@Cacheable和@CachePut注解存数据到redis中时如果使用spring默认的rediskey序列化方式时,使用redisTemplate取数据为null@CacheConfig(cacheNames="users")存入redisusers目录下取数据时的key为users::usernamepublicinterfaceUserRepositoryextendsJpaRepos......
  • RedisTemplate Pipeline 封装和使用,优化Redis操作
    前言公司游戏项目服务端运行过程中,依赖Redis保存游戏过程数据。与客户端一次交互会对Redis进行大量的操作,在内网开发环境下测试,一次操作开销在1-2ms,建立连接和网络开销累积在一起大大降低了响应速度,这种场景下可以使用RedisPipeline进行优化。RedisPipelineRedis服......
  • SpringBoot 使用RedisTemplate
    1.导入Maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>2.配置连接信息spring:redis:host:127.0.0.1......
  • SpringBoot使用redisTemplate存入Redis中Key会出现乱码
    测试操作Redis把key数据存入Redis,然后通过key取出UserMapper对象。@TestpublicvoidredisCacheTest(){Stringkey=UUID.randomUUID().toString();......
  • 踩坑之RedisTemplate执行Lua脚本
    (目录)1、背景有时候,我们需要一次性操作多个Redis命令,但是这样的多个操作不具备原子性,而且Redis的事务也不够强大,不支持事务的回滚,还无法实现命令之间的逻辑关系计......
  • redisTemplate String增删改查
    文章目录​​加锁​​​​expire​​​​获取值​​​​例子代码​​​​附录​​​​其他​​​​让锁过期,如何操作​​加锁@ResponseBody@RequestMapping("/lock")public......
  • 使用StringRedisTemplate实现redis分布式锁
    背景:单个接口可能同时被多个用户调用,但是每个用户使用的数据都是不一样,因此需要使用分布式锁解决数据减少了没有即使减少的问题使用的指令来自的edis的setnx命令,setnx(k,v......
  • Java redisTemplate阻塞式处理消息队列
    +目录Redis消息队列redis五种数据结构队列生产者123456789101112131415161718192021222324252627282930313233......