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客户端统一管理

springboot中集成redis,二次封装成工具类

在spring中集成EventBus

五分钟在springboot中集成Elasticsearch

Spring Boot 中集成 Redis 作为数据缓存

在SpringBoot项目中集成TDengine,并通过SQL对数据进行增删改查