SpringData-Redis配置及常用操作

news/2024/12/2 18:54:46/

文章目录

      • 1.引入依赖
      • 2.yml配置文件
      • 3.设置Redis序列化
      • 4.使用教程
      • 5.操作String数据类型
      • 6.操作Hash数据类型
      • 7.操作Set数据类型
      • 8.操作List数据类型
      • 9.操作Sorted Set 数据类型

1.引入依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>

2.yml配置文件

spring:redis:host: 192.168.150.101port: 6379password: 123321lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: 100ms

3.设置Redis序列化

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.beans.factory.annotation.Autowired;
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.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.TimeZone;@Configuration
public class MyRedisConfig {@Resourceprivate RedisConnectionFactory factory;@Beanpublic RedisTemplate redisTemplate(){RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();// 设置连接工厂redisTemplate.setConnectionFactory(factory);//key的序列化redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();//value的序列化redisTemplate.setValueSerializer(serializer);redisTemplate.setHashValueSerializer(jsonRedisSerializer);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));om.setTimeZone(TimeZone.getDefault());om.configure(MapperFeature.USE_ANNOTATIONS, false);om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);om.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance ,ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);om.setSerializationInclusion(JsonInclude.Include.NON_NULL);serializer.setObjectMapper(om);return  redisTemplate;}
}

到这一步就完成了配置,接下来就可以使用了!

4.使用教程

使用之前需要对下面的内容有所了解:

image-20230504234610922

这里一帮常用的就是这5种操作类型:

5.操作String数据类型

Redis 是一种内存数据存储系统,经常被用作缓存和以 key-value 形式存储数据。而 redisTemplate 是 Redis 在 Spring 等开源框架中的一种封装,可以很方便地进行 Redis 操作。以下是 redisTemplate 对 value 的常用操作语句:

1. 添加 value:
redisTemplate.opsForValue().set(key, value)2. 获取 value:
redisTemplate.opsForValue().get(key)3. 删除 value:
redisTemplate.delete(key)4. 批量删除 value:
redisTemplate.delete(keys)5. 判断 key 是否存在,存在则添加失败:
redisTemplate.opsForValue().setIfAbsent(key, value)6. 手动设置过期时间:
redisTemplate.expire(key, seconds, TimeUnit.SECONDS)7. 获取 key 的过期时间:
redisTemplate.getExpire(key, TimeUnit.SECONDS)8. 设置新值并返回旧值:
redisTemplate.opsForValue().getAndSet(key, value)9. 给 key 对应的 value 追加字符串:
redisTemplate.opsForValue().append(key, value)10. 获取字符串长度:
redisTemplate.opsForValue().size(key)

注意:以上语句均需在 redisTemplate 对象初始化之后才能使用。另外,上述语句中的 key 和 value 均为 String 类型。

6.操作Hash数据类型

在 Redis 中,Hash 数据类型用于表示具有 key-value 结构的复杂对象,其中 value 是一个属性及其对应的值的映射。使用 RedisTemplate 操作 Hash 数据类型主要涉及以下几个操作:

  1. 添加属性:redisTemplate.opsForHash().put(key, field, value),其中 key 是 Hash 数据类型的 key,field 是属性名称,value 是属性值。
  2. 添加多个属性:redisTemplate.opsForHash().putAll(key, map),其中 key 是 Hash 数据类型的 key,map 是包含多个属性及其对应值的 map。
  3. 获取单个属性:redisTemplate.opsForHash().get(key, field),其中 key 是 Hash 数据类型的 key,field 是属性名称。
  4. 获取多个属性:redisTemplate.opsForHash().multiGet(key, fields),其中 key 是 Hash 数据类型的 key,fields 是属性名称列表。
  5. 获取所有属性及其值:redisTemplate.opsForHash().entries(key),其中 key 是 Hash 数据类型的 key。
  6. 删除单个属性:redisTemplate.opsForHash().delete(key, field),其中 key 是 Hash 数据类型的 key,field 是属性名称。
  7. 判断属性是否存在:redisTemplate.opsForHash().hasKey(key, field),其中 key 是 Hash 数据类型的 key,field 是属性名称。
  8. 自增/自减属性值:redisTemplate.opsForHash().increment(key, field, delta),其中 key 是 Hash 数据类型的 key,field 是属性名称,delta 是要增加的值。使用此操作可用于计数器等场景。
  9. 获取所有属性名称:redisTemplate.opsForHash().keys(key),其中 key 是 Hash 数据类型的 key。
  10. 获取属性数量:redisTemplate.opsForHash().size(key),其中 key 是 Hash 数据类型的 key。

7.操作Set数据类型

在 Redis 中,Set 数据类型用于存储一些无序、唯一的元素,每个元素都是一个字符串。下面是 RedisTemplate 操作 Set 数据类型常用的一些方法:

  1. 添加元素:redisTemplate.opsForSet().add(key, value),其中 key 是 Set 数据类型的 key,value 是待添加的元素。
  2. 删除元素:redisTemplate.opsForSet().remove(key, values),其中 key 是 Set 数据类型的 key,values 是要删除的一个或多个元素。
  3. 获取所有元素:redisTemplate.opsForSet().members(key),其中 key 是 Set 数据类型的 key,会返回一个包含所有元素的集合(Set)。
  4. 判断元素是否存在:redisTemplate.opsForSet().isMember(key, value),其中 key 是 Set 数据类型的 key,value 是待判断的元素,在集合中返回 true,否则返回 false。
  5. 获取 Set 的元素数量:redisTemplate.opsForSet().size(key),其中 key 是 Set 数据类型的 key,获取到的是 Set 中元素的个数。
  6. 随机返回若干个元素:redisTemplate.opsForSet().randomMembers(key, count),其中 key 是 Set 数据类型的 key,count 是要返回的元素个数(如果不填或填 0,则返回所有元素)。
  7. 获取两个 Set 之间的差集:redisTemplate.opsForSet().difference(key1, key2),其中 key1 和 key2 是两个 Set 数据类型的 key,返回 key1 中有但 key2 中没有的元素集合。
  8. 获取两个 Set 之间的交集:redisTemplate.opsForSet().intersect(key1, key2),其中 key1 和 key2 是两个 Set 数据类型的 key,返回 key1 和 key2 中都有的元素集合。
  9. 获取两个 Set 之间的并集:redisTemplate.opsForSet().union(key1, key2),其中 key1 和 key

8.操作List数据类型

在 Redis 中,List 数据类型用于存储一个有序的元素列表,每个元素都是一个字符串。Redis 提供了一个双向链表的数据结构来实现 List,下面是 RedisTemplate 操作 List 数据类型常用的一些方法:

  1. 在 List 的头部添加一个元素:redisTemplate.opsForList().leftPush(key, value),其中 key 是 List 数据类型的 key,value 是待添加的元素。

  2. 在 List 的尾部添加一个元素:redisTemplate.opsForList().rightPush(key, value),其中 key 是 List 数据类型的 key,value 是待添加的元素。

  3. 获取 List 的长度:redisTemplate.opsForList().size(key),其中 key 是 List 数据类型的 key,返回 List 中元素的个数。

  4. 获取 List 中指定位置的元素:redisTemplate.opsForList().index(key, index),其中 key 是 List 数据类型的 key,index 是要获取的元素的下标,返回指定位置的元素。

  5. 获取 List 范围内的所有元素:redisTemplate.opsForList().range(key, start, end),其中 key 是 List 数据类型的 key,start 和 end 分别为范围的起始位置和结束位置,返回范围内的所有元素。

  6. 删除 List 中指定的元素:redisTemplate.opsForList().remove(key, count, value),其中 key 是 List 数据类型的 key,count 表示删除几个元素(如果为 0 则删除所有匹配到的元素),value 是要删除的元素。

  7. 从 List 头部弹出一个元素:redisTemplate.opsForList().leftPop(key),其中 key 是 List 数据类型的 key,返回被弹出的元素。

  8. 从 List 尾部弹出一个元素:redisTemplate.opsForList().rightPop(key),其中 key 是 List 数据类型的 key,返回被弹出的元素。

  9. 在 List 中指定位置插入一个元素:redisTemplate.opsForList().set(key, index, value),其中 key 是 List 数据类型的 key,index 是指定位置的下标(0 表示头部,-1 表示尾部),value 是要插入的元素。

  10. 截取 List,保留指定范围内的元素:redisTemplate.opsForList().trim(key, start, end),其中 key 是 List 数据类型的 key,start 和 end 分别为保留范围的起始位置和结束位置。

需要注意的是,以上操作涉及到 List 的操作,因为 List 是有序的元素集合,因此对于元素的位置我们是可以进行控制和操作的。

9.操作Sorted Set 数据类型

在 Redis 中,Sorted Set 数据类型是指一个有序集合,其中每个成员都会关联一个分数(score),分数用于对成员进行排序。以下是 RedisTemplate 操作 Sorted Set 数据类型常用的一些方法:

  1. 添加一个元素:redisTemplate.opsForZSet().add(key, value, score),其中 key 是 Sorted Set 数据类型的 key,value 是待添加的元素,score 是该元素的分数。

  2. 获取元素在 Sorted Set 中的排名(下标):redisTemplate.opsForZSet().rank(key, value),其中 key 是 Sorted Set 数据类型的 key,value 是待查询的元素。

  3. 获取指定范围内的元素及分数:redisTemplate.opsForZSet().rangeWithScores(key, start, end),其中 key 是 Sorted Set 数据类型的 key,start 和 end 分别为范围的起始位置和结束位置。

  4. 获取元素在 Sorted Set 中的分数:redisTemplate.opsForZSet().score(key, value),其中 key 是 Sorted Set 数据类型的 key,value 是待查询的元素。

  5. 获取指定范围内的元素数量:redisTemplate.opsForZSet().count(key, min, max),其中 key 是 Sorted Set 数据类型的 key,min 和 max 分别为分数的最小值和最大值。

  6. 获取 Sorted Set 元素数量:redisTemplate.opsForZSet().size(key),其中 key 是 Sorted Set 数据类型的 key,返回 Sorted Set 中元素的个数。

  7. 删除 Sorted Set 中的指定元素:redisTemplate.opsForZSet().remove(key, values),其中 key 是 Sorted Set 数据类型的 key,values 是要删除的一个或多个元素。

  8. 获取指定范围内的元素和分数(从大到小排序):redisTemplate.opsForZSet().reverseRangeWithScores(key, start, end),其中 key 是 Sorted Set 数据类型的 key,start 和 end 分别为范围的起始位置和结束位置。

  9. 获取指定分数范围内的元素和分数(升序):redisTemplate.opsForZSet().rangeByScoreWithScores(key, min, max),其中 key 是 Sorted Set 数据类型的 key,min 和 max 分别为分数的最小值和最大值。

  10. 获取指定分数范围内的元素和分数(降序):redisTemplate.opsForZSet().reverseRangeByScoreWithScores(key, min, max),其中 key 是 Sorted Set 数据类型的 key,min 和 max 分别为分数的最小值和最大值。

需要注意的是,以上操作均可以根据指定的分数对 Sorted Set 的元素进行排序。在 Redis 中,如果遇到相同的分数,则会根据元素的字符串排序来进行排名。


http://www.ppmy.cn/news/59189.html

相关文章

GPT系列论文

目录 GPT 无监督预训练 有监督微调 如何将模型应用于下游任务&#xff1f; 试验结果 GPT-2 摘要 Introduction Approach 数据集&模型 试验结果 GPT-3 核心点 名词解释 few-shot做法图示 数据集 GPT 由无监督预训练有监督微调组成 无监督预训练 有监督微调…

Python3中for循环多个变量详解

for 循环用于迭代任何序列&#xff0c;从列表到元组再到字典。它甚至可以遍历一个字符串。 在同一行代码中同时对变量进行多次赋值&#xff0c;称为可迭代解包。 Python的 for 循环中&#xff0c;使用多个变量可以应用于列表或字典&#xff0c;但它不适用于一般错误。 字典中…

嵌入式C语言基础(STM32)

前言&#xff1a;一条混迹嵌入式3年的老咸鱼&#xff0c;想到自己第一次接触到stm32的库函数时&#xff0c;c语言稀碎&#xff0c;痛不欲生的场景&#xff0c;该文章为萌新指条明路。 一、位操作 位操作在嵌入式中常用于直接对芯片的寄存器进行操作&#xff0c;当时作为初学者…

【三十天精通Vue 3】 第二十三天 Vue 3的错误处理详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 错误处理概览1. 错误处理的重要性2. Vue 3 中的错误…

【Redis】聊一下Redis基础架构

我们知道学习一个技术&#xff0c;最好的方式就是从全局观出发&#xff0c;然后针对不同的点进行拆分&#xff0c;一个个破解。既可以将学到的和已有的知识联系起来&#xff0c;又可以有一定的深度和目的性。 Redis基础架构 对于一个中间件来说&#xff0c;一个是使用层面&…

unity中的Quaternion.AngleAxis

介绍 unity中的Quaternion.AngleAxis 方法 Quaternion.AngleAxis() 函数是 Unity 引擎中的一个数学函数&#xff0c;用于创建一个绕着某个轴旋转一定角度的旋转四元数。在游戏开发中&#xff0c;经常会用到该函数来旋转物体或计算旋转后的方向向量。 该函数的函数原型为&…

1987-2021年全国各省进出口总额数据含进口总额和出口总额

1987-2021年全国各省进出口总额数据含进口和出口 1、时间&#xff1a;1987-2021年 2、范围&#xff1a;包括全国30个省不含西藏 3、指标&#xff1a;进出口总额、进口总额、出口总额 4、单位&#xff1a;万美元 5、来源&#xff1a;各省NJ、JIN rong统计NJ 6、缺失情况说…

Vue中computed和watch的区别

今天简单说一下computed和watch的区别。 先看代码&#xff0c;两者怎么实现的。 <div id"app"><input type"text" v-model"firstName"><br><input type"text" v-model"lastName"><br><h2…