spring redistemplate,java redistemplate用法

  spring redistemplate,java redistemplate用法

  

目录

1、字符串(字符串)1.1空集(K键,五值);V get(对象键)1.2 oid集(K键,V值,长超时,时间单位单位)1.3V getAndSet(K键,V值)1.4Integer append(K键,V值)1.5Long size(K键)2、列表(列表)2.1长左按钮(K键,五.价值观);长按右键(K键,五.值)2.2长左推(K键,五值);Long rightPush(K键,V值)2.3 long size(K键)2.4 void set(K键,长索引,V值)2.5V index(K键,长索引)2.6Long remove(K键,长计数,对象值)2.7V left pop(K键);英语字母表中第二十二个字母右键弹出(K键)3、哈希(哈希)3.1void putAll(H键,地图?扩展HK,扩展HV m);MapHK,HV entries(H键)3.2 oid put(H键,HK hashKey,HV值);高压获取(H键,Object hashKey)3.3ListHV值(H键);SetHK keys(H key)3.4布尔hashKey(H key,Object hashKey);长尺寸(H键)3.5长删除(H键,对象.hashKeys)4、集合(设置)4.1长加法(K键,五.价值观);东南卫视成员(K键)4.2长删除(K键,对象.值)4.3V弹出(K键)4.4布尔移动(K键,五值,K目标键)4.5光标扫描(K键,扫描选项选项)4.6交集、并集、差集5、有序集合(排序集合)5.1长添加(K键,SetZSetOperations .TypedTupleV元组)5.2布尔加法(K键,五值,双得分)5.3长移除(K键,对象.values)5.4Long rank(K key,Object value)5.5SetV range(K key,long start,long end);SetV rangeByScore(K键,双数1,双数2)5.6长计数(K键,双数1,双数2);长尺寸(K键)5.7双得分(K键,对象o)5.8长移除范围(K键,长开始,长结束)5.9 cursorzsetoperations。键入tuplev扫描(K键,扫描选项选项)春天封装了使用来操作Redis,它支持所有的使用心得原生的API。在使用中定义了对5种数据结构的操作方法。

 

  opsForValue():操作字符串opsForList():操作列表opsForHash():操作哈希opsForSet():操作集合opsForZSet():操作有序集合。下面通过实例来理解和应用这些方法。这里需要特别注意的是,运行上述方法后要对数据进行清空操作,否则多次运行会导致数据重复操作。

  (1)使用Maven添加依赖文件

  在pom.xml配置信息文件中,添加使用心得依赖:

  我的跳羚版本:

  父groupIdorg.springframework.boot/groupId人工弹簧-启动-母公司/version2.3.4.RELEASE/version人工弹簧相对路径/l

  t;!-- lookup parent from repository --></parent>添加Redis依赖:

  

<!-- Redis启动器 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.3.3.RELEASE</version></dependency>

(2)Redis的配置

 

  在application.yml 配置文件中配置Redis信息:

  

#Spring配置spring: #缓存管理器 cache: type: redis #Redis配置 redis: database: 0 #Redis数据库索引(默认为0) host: 127.0.0.1 #Redis服务器地址 port: 6379 #Redis服务器连接端口 password: #Redis服务器连接密码(默认为空) jedis: pool: max-active: 8 #连接池最大连接数(使用负值表示没有限制) max-wait: -1s #连接池最大阻塞等待时间(使用负值表示没有限制) max-idle: 8 #连接池中的最大空闲连接 min-idle: 0 #连接池中的最小空闲连接 lettuce: shutdown-timeout: 100ms #关闭超时时间,默认值100ms

(3)Redis配置类(config层)

 

  创建com.pjb.config包中,并创建RedisConfig类(Redis配置类),并继承CachingConfigurerSupport类。

  

package com.pjb.config; import com.fasterxml.jackson.annotation.JsonAutoDetect;import com.fasterxml.jackson.annotation.PropertyAccessor;import com.fasterxml.jackson.databind.ObjectMapper;import org.springframework.cache.CacheManager;import org.springframework.cache.annotation.CachingConfigurerSupport;import org.springframework.cache.interceptor.KeyGenerator;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.cache.RedisCacheManager;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import java.lang.reflect.Method; /** * Redis配置类 * @author pan_junbiao **/@Configurationpublic class RedisConfig extends CachingConfigurerSupport{ /** * 缓存对象集合中,缓存是以key-value形式保存的, * 当不指定缓存的key时,SpringBoot会使用keyGenerator生成Key。 */ @Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); //类名+方法名 sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); } return sb.toString(); } }; } /** * 缓存管理器 */ @SuppressWarnings("rawtypes") @Bean public CacheManager cacheManager(RedisConnectionFactory connectionFactory) { RedisCacheManager cacheManager = RedisCacheManager.create(connectionFactory); //设置缓存过期时间 return cacheManager; } /** * 实例化RedisTemplate对象 */ @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; }}

 

  

1、字符串(String)

字符串(String)是 Redis 最基本的数据类型。String 的一个Key对应一个Value,即 Key-Value 键值对。String 是二进制安全的,可以存储任何数据(比如图片或序列化的对象)。值最大能存储512MB的数据。一般用于一些复杂的计数功能的缓存。RedisTemplate 提供以下操作 String 的方法。

 

  

 

  

1.1void set(K key, V value);V get(Object key)

具体用法见以下代码:

 

  

/** * Redis操作字符串(String) * @author pan_junbiao **/@SpringBootTestpublic class StringTest{ @Autowired private RedisTemplate redisTemplate; @Test public void string1() { redisTemplate.opsForValue().set("userName","pan_junbiao的博客"); redisTemplate.opsForValue().set("blogUrl","https://blog.csdn.net/pan_junbiao"); redisTemplate.opsForValue().set("blogRemark","您好,欢迎访问 pan_junbiao的博客"); System.out.println("用户名称:" + redisTemplate.opsForValue().get("userName")); System.out.println("博客地址:" + redisTemplate.opsForValue().get("blogUrl")); System.out.println("博客信息:" + redisTemplate.opsForValue().get("blogRemark")); }}

执行结果:

 

  

 

  

 

  

1.2void set(K key, V value, long timeout, TimeUnit unit)

以下代码设置3s失效。3s之内查询有结果,3s之后查询返回为null。具体用法见以下代码:

 

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void string2(){ //设置的是3s失效,3s之内查询有结果,3s之后返回null redisTemplate.opsForValue().set("blogRemark","您好,欢迎访问 pan_junbiao的博客",3, TimeUnit.SECONDS); try { Object s1 = redisTemplate.opsForValue().get("blogRemark"); System.out.println("博客信息:" + s1); Thread.currentThread().sleep(2000); Object s2 = redisTemplate.opsForValue().get("blogRemark"); System.out.println("博客信息:" + s2); Thread.currentThread().sleep(5000); Object s3 = redisTemplate.opsForValue().get("blogRemark"); System.out.println("博客信息:" + s3); } catch (InterruptedException ie) { ie.printStackTrace(); }}

执行结果:

 

  

 

  

 

  

1.3V getAndSet(K key, V value)

设置键的字符串,并返回其旧值。具体用法见以下代码:

 

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void string3(){ //设置键的字符串并返回其旧值 redisTemplate.opsForValue().set("blogRemark","pan_junbiao的博客"); Object oldVaule = redisTemplate.opsForValue().getAndSet("blogRemark","您好,欢迎访问 pan_junbiao的博客"); Object newVaule = redisTemplate.opsForValue().get("blogRemark"); System.out.println("旧值:" + oldVaule); System.out.println("新值:" + newVaule);}

执行结果:

 

  

 

  

 

  

1.4Integer append(K key, V value)

如果key已经存在,并且是一个字符串,则该命令将该值追加到字符串的末尾。如果key不存在,则它将被创建并设置为空字符串,因此 append 在这种特殊情况下类似于 set。具体用法见以下代码:

 

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void string4(){ //设置value的序列化规则,否则会报错 redisTemplate.setValueSerializer(new StringRedisSerializer()); redisTemplate.opsForValue().append("blogRemark","您好,欢迎访问 "); System.out.println(redisTemplate.opsForValue().get("blogRemark")); redisTemplate.opsForValue().append("blogRemark","pan_junbiao的博客"); System.out.println(redisTemplate.opsForValue().get("blogRemark"));}

执行结果:

 

  

 

  

注意:这里一定要注意反序列化配置,否则会报错。

 

  

 

  

1.5Long size(K key)

返回key所对应的value值的长度,见以下代码:

 

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void string5(){ redisTemplate.opsForValue().set("userName","pan_junbiao的博客"); System.out.println("Value值:" + redisTemplate.opsForValue().get("userName")); System.out.println("Value值的长度:" + redisTemplate.opsForValue().size("userName"));}

执行结果:

 

  

 

  

 

  

2、列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或尾部(右边)。

 

  使用list数据结果,可以做简单的消息队列的功能。还可以利用 Irange 命令,做基于Reids的分页功能,性能极佳。

  

 

  

2.1Long leftPushAll(K key, V... values);Long rightPushAll(K key, V... values)

leftPushAll方法:表示把一个数组插入列表中。

 

  rightPushAll方法:表示向列表的最右边批量添加元素。具体用法见以下代码:

  

/** * Redis操作列表(List) * @author pan_junbiao **/@SpringBootTestpublic class ListTest{ @Autowired private RedisTemplate redisTemplate; @Test public void list1() { String[] user1 = new String[]{"1","pan_junbiao的博客","您好,欢迎访问 pan_junbiao的博客"}; String[] user2 = new String[]{"2","pan_junbiao的博客","https://blog.csdn.net/pan_junbiao"}; String[] user3 = new String[]{"3","pan_junbiao的博客","您好,欢迎访问 pan_junbiao的博客"}; redisTemplate.opsForList().rightPushAll("user1",user1); redisTemplate.opsForList().rightPushAll("user2",user2); redisTemplate.opsForList().rightPushAll("user3",user3); System.out.println(redisTemplate.opsForList().range("user1",0,-1)); System.out.println(redisTemplate.opsForList().range("user2",0,-1)); System.out.println(redisTemplate.opsForList().range("user3",0,-1)); }}

执行结果:

 

  

 

  

 

  

2.2Long leftPush(K key, V value);Long rightPush(K key, V value)

leftPush方法:将所有指定的值插入在键的列表的头部。如果键不存在,则在执行推送操作之前将其创建为空列表(从左边插入)。

 

  rightPush方法:将所有指定的值插入在键的列表的尾部。如果键不存在,则在执行推送操作之前将其创建为空列表(从右边插入)。具体用法见以下代码:

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void list2(){ redisTemplate.opsForList().rightPush("userInfo",1); redisTemplate.opsForList().rightPush("userInfo","pan_junbiao的博客"); redisTemplate.opsForList().rightPush("userInfo","https://blog.csdn.net/pan_junbiao"); redisTemplate.opsForList().rightPush("userInfo","您好,欢迎访问 pan_junbiao的博客"); System.out.println("用户编号:" + redisTemplate.opsForList().index("userInfo",0)); System.out.println("用户名称:" + redisTemplate.opsForList().index("userInfo",1)); System.out.println("博客地址:" + redisTemplate.opsForList().index("userInfo",2)); System.out.println("博客信息:" + redisTemplate.opsForList().index("userInfo",3));}

执行结果:

 

  

 

  

 

  

2.3Long size(K key)

返回存储在键中的列表的长度。如果键不存在,则将其解释为空列表,并返回0。如果key存在的值不是列表,则返回错误。具体用法见以下代码:

 

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void list3(){ String[] user = new String[]{"1","pan_junbiao的博客","您好,欢迎访问 pan_junbiao的博客"}; redisTemplate.opsForList().leftPushAll("user",user); System.out.println("列表的长度:" + redisTemplate.opsForList().size("user"));}

执行结果:

 

  

 

  

 

  

2.4void set(K key, long index, V value)

在列表中 index 的位置设置 value。具体用法见以下代码:

 

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void list4(){ String[] user = new String[]{"1","pan_junbiao的博客","https://blog.csdn.net/pan_junbiao"}; redisTemplate.opsForList().rightPushAll("user",user); System.out.println(redisTemplate.opsForList().range("user",0,-1)); redisTemplate.opsForList().set("user",2,"您好,欢迎访问 pan_junbiao的博客"); System.out.println(redisTemplate.opsForList().range("user",0,-1));}

执行结果:

 

  

 

  

 

  

2.5V index(K key, long index)

根据下标获取列表中的值(下标从0开始)。具体用法见以下代码:

 

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void list2(){ redisTemplate.opsForList().rightPush("userInfo",1); redisTemplate.opsForList().rightPush("userInfo","pan_junbiao的博客"); redisTemplate.opsForList().rightPush("userInfo","https://blog.csdn.net/pan_junbiao"); redisTemplate.opsForList().rightPush("userInfo","您好,欢迎访问 pan_junbiao的博客"); System.out.println("用户编号:" + redisTemplate.opsForList().index("userInfo",0)); System.out.println("用户名称:" + redisTemplate.opsForList().index("userInfo",1)); System.out.println("博客地址:" + redisTemplate.opsForList().index("userInfo",2)); System.out.println("博客信息:" + redisTemplate.opsForList().index("userInfo",3));}

执行结果:

 

  

 

  

 

  

2.6Long remove(K key, long count, Object value)

从存储在键中的列表,删除给定count值的元素的第1个计数事件。其中,参数count的含义如下:

 

  count=0:删除等于value的所有元素。count>0:删除等于从头到尾移动的值的元素。count<0:删除等于从尾到头移动的值的元素。以下代码用于删除列表中第一次出现的值:

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void list5(){ String[] user = new String[]{"1","pan_junbiao的博客","您好,欢迎访问 pan_junbiao的博客"}; redisTemplate.opsForList().rightPushAll("user",user); System.out.println(redisTemplate.opsForList().range("user",0,-1)); //将删除列表中第一次出现的pan_junbiao的博客 redisTemplate.opsForList().remove("user",1,"pan_junbiao的博客"); System.out.println(redisTemplate.opsForList().range("user",0,-1));}

执行结果:

 

  

 

  

 

  

2.7V leftPop(K key);V rightPop(K key)

leftPop方法:弹出最左边的元素,弹出之后该值在列表中将不复存在。

 

  rightPop方法:弹出最右边的元素,弹出之后该值在列表中将不复存在。具体用法见以下代码:

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void list6(){ String[] user = new String[]{"1","pan_junbiao的博客","您好,欢迎访问 pan_junbiao的博客"}; redisTemplate.opsForList().rightPushAll("user",user); System.out.println(redisTemplate.opsForList().range("user",0,-1)); //弹出最右边的元素,弹出之后该值在列表中将不复存在 System.out.println(redisTemplate.opsForList().rightPop("user")); System.out.println(redisTemplate.opsForList().range("user",0,-1));}

执行结果:

 

  

 

  

 

  

3、哈希(Hash)

Redis 中的 hash(哈希)是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。value 中存放的是结构化的对象。利用这样数据结果,可以方便地操作其中的某个字段。比如在单点登录时,可以用这种数据结构存储用户信息。以 CookieId 作为 key,设置30分钟为缓存过期时间,能很好地模拟出类似 Session 的效果。

 

  

 

  

3.1void putAll(H key, Map<? extends HK, ? extends HV> m);Map<HK, HV> entries(H key)

putAll方法:用 m 中提供的多个散列字段设置到 key 对应的散列表中。

 

  entries方法:根据密钥获取整个散列存储。具体用法见以下代码:

  

/** * Redis操作哈希(Hash) * @author pan_junbiao **/@SpringBootTestpublic class HashTest{ @Autowired private RedisTemplate redisTemplate; @Test public void hash1() { Map<String,Object> userMap = new HashMap<>(); userMap.put("userName","pan_junbiao的博客"); userMap.put("blogRemark","您好,欢迎访问 pan_junbiao的博客"); redisTemplate.opsForHash().putAll("userHash",userMap); System.out.println(redisTemplate.opsForHash().entries("userHash")); }}

执行结果:

 

  

 

  

 

  

3.2void put(H key, HK hashKey, HV value);HV get(H key, Object hashKey)

put方法:设置 hashKey 的值。

 

  get方法:从键中的散列获取给定 hashKey 的值。具体用法见以下代码:

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void hash2(){ redisTemplate.opsForHash().put("userHash","userName","pan_junbiao的博客"); redisTemplate.opsForHash().put("userHash","blogUrl","https://blog.csdn.net/pan_junbiao"); redisTemplate.opsForHash().put("userHash","blogRemark","您好,欢迎访问 pan_junbiao的博客"); System.out.println("用户名称:" + redisTemplate.opsForHash().get("userHash","userName")); System.out.println("博客地址:" + redisTemplate.opsForHash().get("userHash","blogUrl")); System.out.println("博客信息:" + redisTemplate.opsForHash().get("userHash","blogRemark"));}

执行结果:

 

  

 

  

 

  

3.3List<HV> values(H key);Set<HK> keys(H key)

values方法:根据密钥获取整个散列存储的值。

 

  keys方法:根据密钥获取整个散列存储的键。具体用法见以下代码:

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void hash3(){ redisTemplate.opsForHash().put("userHash","userName","pan_junbiao的博客"); redisTemplate.opsForHash().put("userHash","blogRemark","您好,欢迎访问 pan_junbiao的博客"); System.out.println("散列存储的值:" + redisTemplate.opsForHash().values("userHash")); System.out.println("散列存储的键:" + redisTemplate.opsForHash().keys("userHash"));}

执行结果:

 

  

 

  

 

  

3.4Boolean hasKey(H key, Object hashKey);Long size(H key)

hasKey方法:确定hashKey 是否存在。

 

  size方法:获取 key 所对应的散列表的大小个数。具体用法见以下代码:

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void hash4(){ redisTemplate.opsForHash().put("userHash","userName","pan_junbiao的博客"); redisTemplate.opsForHash().put("userHash","blogUrl","https://blog.csdn.net/pan_junbiao"); redisTemplate.opsForHash().put("userHash","blogRemark","您好,欢迎访问 pan_junbiao的博客"); System.out.println(redisTemplate.opsForHash().hasKey("userHash","userName")); System.out.println(redisTemplate.opsForHash().hasKey("userHash","age")); System.out.println(redisTemplate.opsForHash().size("userHash"));}

执行结果:

 

  

 

  

 

  

3.5Long delete(H key, Object... hashKeys)

删除给定的hashKeys。具体用法见以下代码:

 

  

@Autowiredprivate RedisTemplate redisTemplate; @Testpublic void hash5(){ redisTemplate.opsForHash().put("userHash","userName","pan_junbiao的博客"); redisTemplate.opsForHash().put("userHash","blogRemark","您好,欢迎访问 pan_junbiao的博客"); System.out.println(redisTemplate.opsForHash().delete("userHash","blogRemark")); System.out.println(redisTemplate.opsForHash().entries("userHash"));}

执行结果:

 

  

 

  

 

  

4、集合(Set)

set 是存放不重复值的集合。利用 set 可以做全局去重复的功能。还可以进行交集、并集、差集等操作,也可用来实现计算共同喜好、全部的喜好、自己独有的喜好等功能。

 

  Redis 的 set 是 string 类型的无序集合,通过散列表实现。

  

 

  

4.1Long add(K key, V... values);Set<V> members(K key)

add方法:在无序集合中添加元素,返回添加个数;如果存在重复的则不进行添加。

 

  members方法:返回集合中的所有成员。具体用法见以下代码:

  

/** * Redis操作集合(Set) * @author pan_junbiao **/@SpringBootTestpublic class SetTest{ @Autowired private RedisTemplate redisTemplate; @Test public void set1() { String[] citys&a      

	  
	  
	  
	  
	  
	  
        

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 关于redis数据库入门详细介绍图片,redis数据库的使用,关于Redis数据库入门详细介绍
  • redis队列操作命令,redis 循环队列
  • redis队列操作命令,redis 循环队列,redis实现简单队列
  • redis部署应用服务器上,redis如何启动服务器
  • redis部署应用服务器上,redis如何启动服务器,搭建Redis服务器步骤详细介绍
  • redis缓存穿透和击穿解决方案,redis缓存穿透,缓存雪崩解决
  • redis缓存穿透和击穿解决方案,redis缓存穿透,缓存雪崩解决,redis缓存穿透解决方法
  • Redis缓存,redis和缓存
  • Redis缓存,redis和缓存,Redis缓存详解
  • redis的配置,启动,操作和关闭方法有哪些,关闭redis的命令,Redis的配置、启动、操作和关闭方法
  • redis的主从配置方法详解图,Redis主从配置
  • redis的主从配置方法详解图,Redis主从配置,redis的主从配置方法详解
  • redis界面工具,mac安装redis可视化工具
  • redis界面工具,mac安装redis可视化工具,推荐几款 Redis 可视化工具(太厉害了)
  • redis正确使用的十个技巧是什么,redis正确使用的十个技巧有哪些
  • 留言与评论(共有 条评论)
       
    验证码: