SpringData-Redis配置及常用操作

news2024/7/6 20:01:37

文章目录

      • 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.101
    port: 6379
    password: 123321
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-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 {

    @Resource
    private RedisConnectionFactory factory;


    @Bean
    public 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.coloradmin.cn/o/491205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

史上最烂 spring web 原理分析

盗引下篇spring web spring web、spring web 与 tomcat、映射器与适配器、参数解析器与类型转换器、返回值处理器与消息转换器、异常处理器、ControllerAdvice、spring web 工作流程。 版本 jdk&#xff1a;8spring&#xff1a;5.3.20spring boot&#xff1a;2.7.0 1 spring…

关键词高亮显示浏览器 Edge 插件开发 源码

插件功能 将网页中的关键词高亮显示 项目结构 $ tree . |-- content # 注入到网页中的 js 与 css | |-- content.css | -- content.js |-- icons # 插件用到的图标 | |-- icon128.png | |-- icon16.png | |-- icon32.png | -- icon48.png |-- manifest.json # …

Python+Yolov5电梯口跌倒识别

程序示例精选 PythonYolov5电梯口跌倒识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonYolov5电梯口跌倒识别>>编写代码&#xff0c;代码整洁&#xff0c;规则&#x…

【AGC】applinking服务接入产生崩溃问题

【关键字】 AGC、applinking、崩溃 【问题描述】 开发者反馈在应用中集成了AGC的applinking服务&#xff0c;在打开app时遇到了一些问题。具体如下所述&#xff1a; 在接入app linking后&#xff0c;从浏览器中访问短链接&#xff0c;能正常唤起app, 但app启动后就崩溃了&am…

UAD142A01 3BHE012551R0001使用以太网交叉电缆,您也可以直接连接。

​ UAD142A01 3BHE012551R0001使用以太网交叉电缆&#xff0c;您也可以直接连接。 如何将 MicroLogix PLC 连接到计算机并将程序下载到 MicroLogix 1100 MicroLogix PLC由美国罗克韦尔自动化旗下知名工业自动化厂商Allen-Bradley设计。MicroLogix 1100 主要用于小型工业。我们在…

【视频解读】动手学深度学习V2_02深度学习介绍

1.AI地图 人工智能的地图&#xff0c;x轴是不同模式&#xff0c;由符号学到概率模型 到机器学习&#xff0c;Y轴是我想做的东西&#xff0c;最底下的是感知&#xff0c;我得了解这是什么东西&#xff0c;然后做推理&#xff0c;形成自己的知识&#xff0c;最后做规划。最底层的…

07-Vue技术栈之(组件之间的通信方式)

目录 1、组件的自定义事件1.1 绑定自定义事件&#xff1a;1.1.1 第一种方式1.1.2 第二种方式1.1.3 自定义事件只触发一次 1.2 解绑自定义事件1.3绑定原生DOM事件1.4 总结 2、全局事件总线&#xff08;GlobalEventBus&#xff09;2.1 应用全局事件总线 3、 消息订阅与发布&#…

SwiftUI 极简实现文本摆动弹性动画

概览 SwiftUI 为我们来了界面设计和调试上的便利&#xff0c;只需几行代码我们就能实现一个不错的文本动画效果&#xff1a; 如上图所示&#xff0c;我们在 SwiftUI 中基本还没发力&#xff0c;就实现了文本摆动弹性动画。 这究竟是怎么做到的呢&#xff1f; 无需等待&#…

英文论文(sci)解读复现【NO.7】基于注意机制的改进YOLOv5s目标检测算法

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

Loadrunner性能测试(一)

备注&#xff1a;电脑最好安装有IE浏览器 一、下载安装包 链接&#xff1a;https://pan.baidu.com/s/1f5Sw0QK5zrLCU1EbN01evg?pwdbite 提取码&#xff1a;bite 包含的文件有&#xff1a; 二、安装loadrunner 注意&#xff0c;以下教程仅展示需要特别注意的步骤&#x…

PHP学习笔记第一天

前言 作者简介&#xff1a;不知名白帽&#xff0c;网络安全学习者。 博客主页&#xff1a;不知名白帽的博客_CSDN博客-网络安全,CTF,内网渗透领域博主 网络安全交流社区&#xff1a;https://bbs.csdn.net/forums/angluoanquan 目录 PHP语法 基本的PHP语法 PHP的数据类型 PH…

Kubernetes 集群中某个节点出现 Error querying BIRD: unable to connect to BIRDv4 socket

1. 问题描述 Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refusedReadiness probe failed: 2023-05-04 22:13:23.706 [INFO]…

LiangGaRy-学习笔记-Day10

1、知识回顾 1.1、rpm依赖报错问题 rpm安装的时候&#xff0c;会有依赖报错rpm安装httpd服务&#xff0c;体现报错 #rpm安装httpd [rootNode1 ~]# rpm -ivh /mnt/cdrom/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm warning: /mnt/cdrom/Packages/httpd-2.4.6-88.el7.ce…

自己组装的电脑怎么用U盘安装系统操作教学

自己组装的电脑怎么用U盘安装系统操作教学分享。有的用户使用台式机的时候&#xff0c;会自己去进行硬件的组装&#xff0c;但是这样的电脑在安装好了之后&#xff0c;里面还没有系统&#xff0c;需要进行安装。如果你不知道怎么去安装&#xff0c;可以来看看以下的操作方法。 …

HummerRisk 使用教程:源码检测

HummerRisk 是开源的云原生安全平台&#xff0c;以非侵入的方式解决云原生环境的安全和治理问题。核心能力包括混合云的安全治理和云原生安全检测。 本文将介绍HummerRisk中「源码检测模块」的功能&#xff0c;包括如何配置项目源码&#xff0c;以及使用源码检测规则进行安全检…

香港top5功能完善炒期货投资app软件排名(最新评测)

选择一款合适的炒期货投资软件对于投资者来说至关重要。考虑软件稳定、交易流畅度、交易品种、数据可靠性、而且还要考虑费用等多方面因素。 首先&#xff0c;软件的稳定性很重要。选用稳定性高的软件可以避免如断电、手机或电脑死机等突发状况&#xff0c;保证交易安全顺畅。…

FreeRTOS 低功耗 Tickless 模式

文章目录 一、低功耗模式1. 睡眠(Sleep)模式2. 停止(Stop)模式3. 待机(Standby)模式 二、Tickless 模式详解1. 如何降低功耗&#xff1f;2. Tickless 具体实现 一、低功耗模式 STM32 本身就支持低功耗模式&#xff0c;有三种低功耗模式&#xff1a; ● 睡眠(Sleep)模式。 ● 停…

5_服务编排_docker-compose

服务编排之Docker Compose 微服务架构的应用系统中一般包含若干个微服务&#xff0c;每个微服务一般都会部署多个实例&#xff0c;如果每个微服务都要手动启停&#xff0c;维护的工作量会很大。 要从Dockerfile build image 或者去dockerhub拉取image 要创建多个container 要…

GB/T25915.1法规基本标准-洁净室按粒子浓度划分洁净

《GB/T25915.1-2021洁净室及相关受控环境 第一部分&#xff1a;按粒子浓度划分空气洁净度等级》等4部国家标准。 今天小编跟大家分享一下参编的GB/T25915.1-2021相关法规文件内容&#xff0c;帮助大家更好的了解相关法规知识。 1 范围 本文件规定了按空气中悬浮粒子浓度划分洁…

9:00进去,9:05就出来了,这问的也太···

从外包出来&#xff0c;没想到死在另一家厂子了。 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内推…