Redis数据类型, 在springboot中集成Redis
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis数据类型, 在springboot中集成Redis相关的知识,希望对你有一定的参考价值。
文章目录
1.Redis数据类型
- string(字符串)
- hash(哈希)
- list(列表)
- set(集合 )
- zset(sorted set:有序集合)
可安装可视化的Redis管理工具
连接之后,刷新一下;即可看到数据信息
String类型
- 最基础的键值对形式
- string 类型是二进制形式。可以包含任何数据。力图图片或序列化的对象。
- string 类型是 Redis 最基本的数据类型,这个类型的值最大能存储512MB。
案例操作
Hash类型
- 键值(key=>value)对集合。
- string 类型的 field 和 value 的映射表,hash类型 适用于存储对象。
- 存储
字符串和字符串值之间的映射
,例如存储单个用户的姓名、年龄…
案例操作
List(列表类型)
-
简单的字符串列表,按照插入顺序排序。可添加一个元素到列表的头部(左边)或者尾部(右边).
-
列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储 40 多亿)
案例
Set(无序集合)
- 集合是使用哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
- 添加一个 string 元素到 key 对应的 set 集合中后,若成功则返回 1,如果元素已经在集合中返回 0。
- 由于集合内元素的唯一性,第二次插入的元素将被忽略。
- 最大的成员数为 232 - 1 个 (4294967295, 每个集合可存储 40多亿个成员)。
案例,这里我把grade1添加了两次,第二次的就被忽略了;
可看到它不是有序的;
zset(sorted set:有序集合)
-
zset集合中; 每个元素都会关联一个 double 类型的分数。通过分数来为集合中的成员进行
从小到大
的排序。 -
zset 的成员唯一,但分数(score)可以重复。
-
添加元素到集合,元素在集合中存在,更新对应分数值 score
案例
有序
2.可设置失效时间
对于一些缓存,验证码等数据,可在一定时间内自动的被销毁。
对 key设置过期时间,在 key 过期之后被自动删除
不设置失效时间的话,默认为-1
在设置存储数组时直接配置时间
EX 表示以秒为单位
PX 表示以毫秒为单位 EX,PX 不区分大小写
set name jim EX 30 设置失效时间为 30 秒
ttl 键 查看剩余时间(秒)
pttl 键 查看剩余时间(毫秒)
需要对已经存入的数据设置失效时间时
expire 键 时间(秒)
pexpire 键 时间(毫秒)
例如这个当时没有设置失效时间,默认就是 -1;
这时的数据库中已经没有这个键了
3.在springboot中集成Redis
首先在pom.xml文件中导入依赖
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
可使用这个“RedisTemplate类
ValueOperations:简单 K-V 操作
SetOperations:set 类型数据操作
ZSetOperations:zset 类型数据操作
HashOperations:针对 map 类型的数据操作
ListOperations:针对 list 类型的数据操作
在application.yml
中进行配置
spring:
redis:
host: 链接的Ip
port: 6379
password: redis密码
database: 0
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
timeout: 5000ms # 连接超时时间(毫秒)
序列化配置类
package com.xiaozhi.backserver.startspringboot.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig
/**
* 序列化键,值
* @param connectionFactory
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory)
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory);
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
StringRedisSerializer redisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(redisSerializer);
redisTemplate.setHashKeySerializer(redisSerializer);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
return redisTemplate;
在测试类中使用
@SpringBootTest
class StartspringbootApplicationTests
//自动装配;
@Autowired
RedisTemplate redisTemplate;
@Test
void contextLoads()
ValueOperations valueOperations = redisTemplate.opsForValue();
//序列化为json格式;
valueOperations.set("role",new Role(12,"小智","从零开始的异世界生活",new Date()));
//可设置失效时间;
//redisTemplate.opsForValue().set("users", users,10*1000, TimeUnit.MILLISECONDS);
存储成功
以上是关于Redis数据类型, 在springboot中集成Redis的主要内容,如果未能解决你的问题,请参考以下文章
Redis - Springboot中集成多个Redis客户端统一管理