SpringBoot使⽤RedisTemplate操作Redis的5种数据类型Spring 封装了 RedisTemplate 来操作 Redis,它⽀持所有的 Redis 原⽣的 API。在 RedisTemplate 中定义了对5种数据结构的操作⽅法。
opsForValue():操作字符串。
opsForList():操作列表。
opsForHash():操作哈希。
opsForSet():操作集合。
opsForZSet():操作有序集合。
redis支持的五种数据类型下⾯通过实例来理解和应⽤这些⽅法。这⾥需要特别注意的是,运⾏上述⽅法后要对数据进⾏清空操作,否则多次运⾏会导致数据重复操作。
(1)使⽤Maven添加依赖⽂件
在l配置信息⽂件中,添加Redis依赖:
我的SpringBoot版本:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- 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的配置
在 l 配置⽂件中配置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层)
创建fig包中,并创建RedisConfig类(Redis配置类),并继承CachingConfigurerSupport类。package fig;
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 t.annotation.Bean;
import t.annotation.Configuration;
import org.dis.cache.RedisCacheManager;
import org.tion.RedisConnectionFactory;
import org.RedisTemplate;
import org.StringRedisTemplate;
import org.dis.serializer.Jackson2JsonRedisSerializer;
import flect.Method;
/**
* Redis配置类
* @author pan_junbiao
**/
@Configuration
public 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, params) {
StringBuilder sb = new StringBuilder();
//类名+⽅法名
sb.Class().getName());
sb.Name());
for (Object obj : params) {
sb.String());
}
String();
}
};
}
/**
* 缓存管理器
*/
@SuppressWarnings("rawtypes")
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory)
{
RedisCacheManager cacheManager = ate(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);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
1、字符串(String)
字符串(String)是 Redis 最基本的数据类型。String 的⼀个“Key”对应⼀个“Value”,即 Key-Value 键值对。String 是⼆进制安全的,可以存储任何数据(⽐如图⽚或序列化的对象)。值最⼤能存储512MB的数据。⼀般⽤于⼀些复杂的计数功能的缓存。RedisTemplate 提供以下操作 String 的⽅法。
1.1 void set(K key, V value);V get(Object key)
具体⽤法见以下代码:
/**
* Redis操作字符串(String)
* @author pan_junbiao
**/
@SpringBootTest
public class StringTest
{
@Autowired
private RedisTemplate redisTemplate;
@Test
public void string1()
{
redisTemplate.opsForValue().set("userName","pan_junbiao的博客");
redisTemplate.opsForValue().set("blogUrl","blog.csdn/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.2 void set(K key, V value, long timeout, TimeUnit unit)
以下代码设置3s失效。3s之内查询有结果,3s之后查询返回为null。具体⽤法见以下代码:
@Autowired
private RedisTemplate redisTemplate;
@Test
public 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.3 V getAndSet(K key, V value)
设置键的字符串,并返回其旧值。具体⽤法见以下代码:
@Autowired
private RedisTemplate redisTemplate;
@Test
public 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);
}
执⾏结果:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论