Spring Data Redis 使用方式

在Java中操作Redis

  • 1. 在Java中操作Redis
    • 1.1 Redis的Java客户端
    • 1.2 Spring Data Redis使用方式
      • 1.2.1 介绍
      • 1.2.1 环境搭建
      • 1.2.3 操作常见类型数据

1. 在Java中操作Redis

1.1 Redis的Java客户端

Redis 的 Java 客户端很多,常用的几种:

  • Jedis
  • Lettuce
  • Spring Data Redis

Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis,在Spring Boot项目中还提供了对应的Starter,即 spring-boot-starter-data-redis

1.2 Spring Data Redis使用方式

1.2.1 介绍

Spring Data Redis 是 Spring 的一部分,提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。

网址:https://spring.io/projects/spring-data-redis

Spring Boot提供了对应的Starter,maven坐标:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Spring Data Redis中提供了一个高度封装的类:RedisTemplate,对相关api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

  • ValueOperations:string数据操作
  • SetOperations:set类型数据操作
  • ZSetOperations:zset类型数据操作
  • HashOperations:hash类型的数据操作
  • ListOperations:list类型的数据操作

1.2.1 环境搭建

1). 导入Spring Data Redis的maven坐标

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2). 配置Redis数据源

在application-dev.yml中添加

sky:redis:host: localhostport: 6379password: 123456database: 10

解释说明:

database:指定使用Redis的哪个数据库,Redis服务启动后默认有16个数据库,编号分别是从0到15。

可以通过修改Redis配置文件来指定数据库的数量。

3). 编写配置类,创建RedisTemplate对象

package com.sky.config;import lombok.extern.slf4j.Slf4j;
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.StringRedisSerializer;@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info("开始创建redis模板对象");RedisTemplate redisTemplate = new RedisTemplate();// 设置redis的连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);// 设置redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}

解释说明:

当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为

JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别,故设置为

StringRedisSerializer序列化器。

4). 通过RedisTemplate对象操作Redis

在test下新建测试类

package com.sky.test;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;@SpringBootTest
public class SpringRedisTest {@AutowiredRedisTemplate redisTemplate;@Testpublic void testRedisTemplate(){// string操作类型ValueOperations valueOperations = redisTemplate.opsForValue();// hash操作类型HashOperations hashOperations = redisTemplate.opsForHash();// list操作类型ListOperations listOperations = redisTemplate.opsForList();// set操作类型SetOperations setOperations = redisTemplate.opsForSet();// zet操作类型ZSetOperations zSetOperations = redisTemplate.opsForZSet();}

1.2.3 操作常见类型数据

1). 操作字符串类型数据

@Testpublic void testRedisString(){// set, get, setex, setnxValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("name", "lsm");String name = (String) valueOperations.get("name");System.out.println(name);valueOperations.set("code", "1234", 3, TimeUnit.MINUTES);valueOperations.setIfAbsent("lock", 1);valueOperations.setIfAbsent("lock", 2);System.out.println(valueOperations.get("lock"));}

2). 操作列表类型数据

@Testpublic void testRedisList(){// lpush lrange rpop llenListOperations listOperations = redisTemplate.opsForList();listOperations.leftPush("list", "a");listOperations.leftPushAll("list", "b", "c", "d" );  // 依次入栈,栈顶为右边,栈底为左边String tmp = (String) listOperations.leftPop("list");System.out.println("tmp: " + tmp);  // tmp: dLong size = listOperations.size("list");System.out.println("size: " + size);List list = listOperations.range("list", 0, -1);System.out.println("list: " + list); // list: [c, b, a]}

3). 操作哈希类型数据

 // hset hget hdel hkeys hvalsHashOperations hashOperations = redisTemplate.opsForHash();hashOperations.put("key_1", "name", "lsm");hashOperations.put("key_1", "age", "20");hashOperations.put("key_1", "sex", "男");String name = (String) hashOperations.get("key_1", "name");System.out.println("name: " + name); // name: lsmLong delete = hashOperations.delete("key_1", "sex");System.out.println("delete: " + delete); // delete: 1Set key_1 = hashOperations.keys("key_1");System.out.println("key_1: " + key_1); // key_1: [name, age]List key_2 = hashOperations.values("key_1");System.out.println("key_2: " + key_2);  // key_2: [lsm, 20]}

4). 操作集合类型数据

@Testpublic void testRedisSet() {// sadd smembers scard sinter sunion sremSetOperations setOperations = redisTemplate.opsForSet();setOperations.add("set1", "a", "b", "c", "d");setOperations.add("set1", "e");Set set1 = setOperations.members("set1");System.out.println("set1: " + set1);  // set1: [a, d, c, b, e]Long size = setOperations.size("set1");System.out.println("size: " + size); // size = 5setOperations.remove("set1", "e");setOperations.add("set2", "a", "b", "x", "y");Set intersect = setOperations.intersect("set1", "set2");System.out.println("intersect: " + intersect);  // intersect: [a, b]Set union = setOperations.union("set1", "set2");System.out.println("union: " + union);  // union: [a, x, b, d, y, c]}

5). 操作有序集合类型数据

@Testpublic void testRedisZset() {// zadd zrange zincrby zremZSetOperations zSetOperations = redisTemplate.opsForZSet();zSetOperations.add("zset", "a", 10);zSetOperations.add("zset", "b", 15);zSetOperations.add("zset", "c", 12);Set zset1 = zSetOperations.range("zset", 0, -1);System.out.println("zset1: " + zset1); // zset1: [a, c, b]zSetOperations.incrementScore("zset", "c", 10);zSetOperations.remove("zset", "a", "b");}

6). 通用命令操作

// keys exists type delSet keys = redisTemplate.keys("*");System.out.println("keys: " + keys);  // keys: [list, key_1, set1, zset, set2]Boolean name = redisTemplate.hasKey("name");Boolean set1 = redisTemplate.hasKey("set1");System.out.println("name: " + name);  // name: falseSystem.out.println("set1: " + set1);  // set1: truefor(Object key : keys){DataType type = redisTemplate.type(key);System.out.println(type);}redisTemplate.delete("list");}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/716415.shtml

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

相关文章

关于Axios接口请求超时处理与重试的方法教程

在前端开发中&#xff0c;使用Axios作为HTTP客户端库进行接口请求是非常常见的做法。然而&#xff0c;在实际开发中&#xff0c;我们经常会遇到网络不稳定或服务器响应缓慢导致接口请求超时的情况。为了提高用户体验和程序的稳定性&#xff0c;我们需要实现接口请求超时的处理与…

UnityAPI的学习——Transform类

Transform类继承自Component类&#xff0c;并实现了IEnumberable接口。Transform是GameObject必须拥有得一个组件&#xff0c;用来管理所在GameObject对象的坐标位置、选择角度、和大小缩放。 Transform实现了IEnumberable接口&#xff0c;因此可以在程序中使用foreach()方法快…

echarts vue 动画效果的水球图、波浪图教程

1、安装插件 前提是已经安装了echarts&#xff08;我的版本是4.2.1&#xff09; npm install echarts-liquidfill --save 我安装了3.1.0版本的&#xff0c;结果运行时报错"TypeError: wave.ensureState is not a function" 原因&#xff1a;echarts版本和echarts-l…

miniconda3彻底删除虚拟环境

退出虚拟环境&#xff1a;确保您不在要删除的虚拟环境中。如果在&#xff0c;使用命令 conda deactivate 来退出当前激活的虚拟环境。查看虚拟环境列表&#xff1a;运行命令 conda env list 或 conda info -e 来查看所有存在的虚拟环境及其路径。删除虚拟环境&#xff1a;使用命…

在VMware中安装CentOS 7并配置Docker

VMware安装CentOS 7 一、介绍 该文章介绍如何使用启动U盘在虚拟机里面安装系统&#xff0c;虚拟机版本为VMware Workstation 16 pro&#xff0c;Linux版本为CentOS Linux release 7.9.2009 (Core)。 二、安装 1、创建虚拟机 点击创建新的虚拟机 选择典型就可以了&#xf…

前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)

一、前缀和的原理和特点 prefix表示前缀和&#xff0c;前缀和由一个用户输入的数组生成。对于一个数组a[]&#xff08;下标从1开始&#xff09;&#xff0c;我们定义一个前缀和数组prefix[]&#xff0c;满足&#xff1a; prefix有一个重要的特性&#xff0c;可以用于快速生成p…

WordPress建站入门教程:如何安装本地WordPress网站运行环境?

有些站长想要搭建WordPress网站&#xff0c;又担心自己玩不转&#xff0c;白白浪费购买域名和主机空间的费用。像这种情况&#xff0c;最好的做法就是在自己电脑上安装一个WordPress网站运行环境&#xff0c;然后在本地电脑搭建WordPress&#xff0c;等熟悉掌握后再考虑购买域名…

设计模式学习笔记——抽象工厂模式

设计模式&#xff08;创建型&#xff09;—— 抽象工厂模式 在工厂模式中&#xff0c;我们为每一个类都设计了一个工厂&#xff0c;以此来获取该类的对象&#xff0c;但缺点就是一旦类多了&#xff0c;工厂就多了&#xff0c;这时候我们可以考虑这些类间是否有关联&#xff0c…

多输入多输出 | MATLAB实现GWO-Elman灰狼优化循环神经网络多输入多输出预测

多输入多输出 | MATLAB实现GWO-Elman灰狼优化循环神经网络多输入多输出预测 目录 多输入多输出 | MATLAB实现GWO-Elman灰狼优化循环神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现GWO-Elman灰狼优化循环神经网络多输入多输出…

kernel bypass 是什么?

文章目录 一、kernel bypass 是什么二、Kernel Bypass技术优缺点三、Kernel Bypass技术应用领域四、Kernel Bypass的实现方式 一、kernel bypass 是什么 Kernel Bypass是一种技术&#xff0c;旨在通过绕过操作系统核来提高网络数据包处理的性能和降低延迟。它的主要优点是高性能…

[LeetBook]【学习日记】有序链表合并

21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] …

如何在电脑上中恢复已删除的视频

您可以在电脑中恢复已删除的视频&#xff0c;无需任何繁琐的工作。您所需要做的就是阅读本文&#xff0c;了解恢复已删除视频的最佳方法。 一次错误的点击可能会夺走您以视频形式存储的宝贵记忆。嗯&#xff0c;有些视频不适合删除&#xff0c;您希望永远保留它们。失去这些宝…

如何使用Docker搭建StackEdit编辑器并结合内网穿透实现远程办公

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

优选算法|【双指针】|1089.复写零

目录 题目描述 题目解析 算法原理讲解 代码 题目描述 1089. 复写零 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入的数组 就…

LeetCode受限条件下可到达节点的数目

题目描述 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。 给你一个二维整数数组 edges &#xff0c;长度为 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数组 restr…

OJ:移除链表元素

203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;这个题可以直接在原链表上进行修改&#xff0c;但是修改链表的指向是有点麻烦的&#xff0c;所以我们给两个指针&#xff0c;phead和ptail,这是新链表的两个指针&#xff0c;再给一个指针pcur来遍历…

Java和JavaScript区别

1. Java和javaScript都是面向对象语言 2. 他两除了名字相似之外没有任何关系 3. Java是一种真正的面向对象语言&#xff0c;不管开发什么程序都要设计对象&#xff1b;而JavaScript是种脚本语言&#xff0c;主要实现前端页面的交互&#xff0c;比如验证表单&#xff0c;弹窗提…

Sqli-labs靶场第12关详解[Sqli-labs-less-12]

Sqli-labs-Less-12 #手工注入 post传参了 根据题目看&#xff0c;像一个登录页面&#xff0c;尝试使用布尔型盲注测试能否登录网站 1. Username输入a a" 测试是否会有报错&#xff0c;burp抓包 报错&#xff1a;syntax to use near "a"") and passw…

消息中间件之RocketMQ源码分析(二十七)

Broker提交或回滚事务消息 当生产者本地事务处理完成并且Broker回查事务消息后&#xff0c;不管执行Commit还是Rollback,都会根据用户本地事务的执行结果发送一个End_transaction的RPC请求给Broker&#xff0c;Broker端处理该请求的类是EndTransactionProcessor 第一步&…

volatile 关键字 (一)

volatile 关键字 &#xff08;一&#xff09; 文章目录 volatile 关键字 &#xff08;一&#xff09;如何保证变量的可见性&#xff1f;如何禁止指令重排序&#xff1f; 文章来自Java Guide 用于学习如有侵权&#xff0c;立即删除 如何保证变量的可见性&#xff1f; 在 Java 中…