使用SpringDataRedis操作Redis

Redis的java客户端

  • jedis
  • Lettuce
  • Spring Data Redis

Spring Data redis 是Spring的一部分,对 Redis 底层开发包进行了高度封装。在Spring项目中,可以使用Spring Data Redis来简化操作。

Spring Data Redis使用方式

操作步骤:

  • 导入Spring Data Redis 的 maven 坐标
  • 配置Redis的数据源
  • 编写配置类,创建RedisTemplate对象
  • 通过RedisTemplate对象操作Redis

1、导入Spring Data Redis 的 maven 坐标

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

2、配置Redis的数据源

spring:redis:host: 127.0.0.1port: 6379database: 1

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

package top.suweijie.redis.config;import cn.hutool.db.nosql.redis.RedisDS;
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;/*** @Author suweijie* @Date 2024/1/9 17:01* @Description: TODO* @Version 1.0*/
@Slf4j
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {log.info("redisTemplate init...");RedisTemplate redisTemplate = new RedisTemplate();redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}}

4、通过RedisTemplate操作Redis

package top.suweijie.redis;import jdk.nashorn.internal.runtime.regexp.joni.constants.OPSize;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;
import org.springframework.test.context.junit4.SpringRunner;import java.util.List;
import java.util.concurrent.TimeUnit;/*** @Author suweijie* @Date 2024/1/9 17:05* @Description: TODO* @Version 1.0*/
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void test1() {ValueOperations stringObjectValueOperations = redisTemplate.opsForValue();HashOperations stringObjectObjectHashOperations = redisTemplate.opsForHash();ListOperations stringObjectListOperations = redisTemplate.opsForList();SetOperations setOperations = redisTemplate.opsForSet();ZSetOperations zSetOperations = redisTemplate.opsForZSet();}
}

操作字符串

 @Testpublic void dealString() {//set key valueredisTemplate.opsForValue().set("name","suweijie");//get keyString name = (String)redisTemplate.opsForValue().get("name");//setex key seconds valueredisTemplate.opsForValue().set("name","suweijie",60,TimeUnit.SECONDS);//setnx key valueredisTemplate.opsForValue().setIfAbsent("name","suweijie");redisTemplate.delete("name");}

操作哈希

@Testpublic void dealHash() {//hset key field valueredisTemplate.opsForHash().put("user","name","suweijie");redisTemplate.opsForHash().put("user","age","20");//hget key fieldString  name = (String)redisTemplate.opsForHash().get("user","name");log.info(name);//hdel key fieldredisTemplate.opsForHash().delete("user","age");//hkeys keySet keys = redisTemplate.opsForHash().keys("user");keys.forEach(System.out::println);//hvals keyList values = redisTemplate.opsForHash().values("user");values.forEach(System.out::println);}

操作列表

 @Testpublic void dealList() {//lpush key value1 value2redisTemplate.opsForList().leftPushAll("list","4","3","2","1");//lrange key start endList list = redisTemplate.opsForList().range("list", 0, -1);list.forEach(System.out::println);//rpop  keyString rightPop = (String) redisTemplate.opsForList().rightPop("list");log.info(rightPop);//llen keyLong size = redisTemplate.opsForList().size("list");log .info(size + "");}

操作集合

 @Testpublic void dealSet() {//sadd key member1 member2redisTemplate.opsForSet().add("set1","1","2","3","2");redisTemplate.opsForSet().add("set2","1","2","2","4");log.info("-------------------------------------------------");//smembers keySet set = redisTemplate.opsForSet().members("set1");set.forEach(System.out::println);log.info("-------------------------------------------------");//scard keyLong size = redisTemplate.opsForSet().size("set2");log.info(size + "");log.info("-------------------------------------------------");//sinter key1 key2Set intersect = redisTemplate.opsForSet().intersect("set1", "set2");intersect.forEach(System.out::println);log.info("-------------------------------------------------");Set union = redisTemplate.opsForSet().union("set1", "set2");union.forEach(System.out::println);}

操作有序集合

@Testpublic void dealZset() {//zadd score1 member1 socre2 member2redisTemplate.opsForZSet().add("zset1","swj",1);redisTemplate.opsForZSet().add("zset1","zat",2);//zrange key start end withscoresSet zset1 = redisTemplate.opsForZSet().rangeByScoreWithScores("zset1", 0, 3);zset1.forEach(System.out::println);//zincryby key increment memerredisTemplate.opsForZSet().incrementScore("zset1","zat",1);//zrem key member1 member2redisTemplate.opsForZSet().remove("zset1","swj");}

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

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

相关文章

深度探讨鸿蒙工程师面试题

深度探讨鸿蒙工程师面试题 第一部分&#xff1a;引言 鸿蒙&#xff08;HarmonyOS&#xff09;作为华为推出的全场景分布式操作系统&#xff0c;引领着未来智能化时代的潮流。鸿蒙工程师在这一创新性领域中扮演着至关重要的角色。本文将深入研究一系列鸿蒙工程师面试题&#x…

HTML---JavaScript操作DOM对象

目录 文章目录 本章目标 一.DOM对象概念 二.节点访问方法 常用方法&#xff1a; 层次关系访问节点 三.节点信息 四.节点的操作方法 操作节点的属性 创建节点 删除替换节点 五.节点操作样式 style属性 class-name属性 六.获取元素位置 总结 本章目标 了解DOM的分类和节点间的…

超市商品管理系统设计 C++实现

超市商品管理系统设计—C实现 文章目录 超市商品管理系统设计---C实现一、内容要求大纲图 二、源代码&#xff08;包含大量注释&#xff09;1、main.cpp文件2、supermarket.h文件3、supermarket.cpp文件4、administrator.h文件5、administrator.cpp文件6、user.h文件7、user.cp…

数据结构之单调栈、单调队列

今天学习了单调栈还有单调队列的概念和使用&#xff0c;接下来我将对其定义并配合几道习题进行讲解&#xff1a; 首先先来复习一下栈与队列&#xff1a; 然后我们来看一下单调栈的定义&#xff1a; 单调栈中的元素从栈底到栈顶的元素的大小是按照单调递增或者单调递减的关系进…

Git常用命令和QA(网摘)

主要内容 常用命令git checkout --orphan 分支与 git checkout -b 分支区别git如何创建一个新的空白分支branchgit开发分支本地分支合并远程分支git remote prune origingit log如何退出&#xff1f;如何退出git log或git commit模式git log如何退出git commit 的退出 git强制p…

leetcode-2645 构造有效字符串的最小插入数

题目链接 2645. 构造有效字符串的最少插入数 - 力扣&#xff08;LeetCode&#xff09; 解题思路 动态规划 1、定义状态d[i]为将前i个字符&#xff08;为了方便编码&#xff0c;下标从1开始&#xff09;拼凑成若干个abc所需要的最小插入数。那么初始状态d[0]0&#xff0c;最终…

Programming Abstractions in C阅读笔记:p242-p245

《Programming Abstractions in C》学习第67天&#xff0c;p242-p245总结&#xff0c;总计4页。 一、技术总结 6.2小结主要讲回溯算法及递归算法在迷宫求解中应用&#xff0c;当然&#xff0c;理解然后用代码实现出来还是有些难度的。不过&#xff0c;这并不影响我们进行下一…

关于目标检测任务中,XML(voc格式)标注文件的可视化

1. 前言 最近在弄关于目标检测的任务&#xff0c;因为检测的图片和标签是分开的&#xff0c;可视化效果不明显&#xff0c;也不知道随便下载的数据集&#xff0c;标注信息对不对。网上看了好多代码&#xff0c;代码风格和本人平时不同&#xff0c;看起来麻烦&#xff0c;也不知…

flutter 通过打包参数区分来 打内网 外网包

内网 # 打包内网环境flutter build apk --dart-defineis_intranettrue --dart-defineis_managerAppfalse 外网 # 打包内网环境flutter build apk --dart-defineis_intranettrue --dart-defineis_managerAppfalse env.dart // main.dart class EnvironmentConfig {// 是否…

RHCE9学习指南 第19章 网络时间服务器

19.1 时间同步的必要性 对于一些服务来说对时间要求非常严格&#xff0c;例如&#xff0c;图19-1所示由三台服务器搭建的ceph集群。 图19-1 三台机器搭建的集群对时间要求比较高 这三台服务器的时间必须要保持一样&#xff0c;如果不一样&#xff0c;就会显示报警信息。那么…

Vue基础-搭建Vue运行环境

这篇文章介绍了在Vue.js项目中进行开发环境搭建的关键步骤。包括node.js安装和配置、安装Vue及Vue CLI工具、安装webpack模板、安装vue-router、创建Vue项目等步骤。这篇文章为读者提供了清晰的指南&#xff0c;帮助他们快速搭建Vue.js开发环境&#xff0c;为后续的项目开发奠定…

已设定选项 ‘readonly‘ (请加 ! 强制执行)

这是vim编辑器报的错误&#xff0c;相信很多人都遇到过。在使用vi编辑一个需要sudo权限的文件后&#xff0c;保存的时候出现这样的错误。这个时候很多人做的事情可能就是不保存退出&#xff08;敲命令:q!&#xff09;&#xff0c;然后再以sudo vi打开文件重新编辑一次。如果恰巧…

Django的数据库模型的CharField字段的max_length参数与中文字符数的关系探索(参数max_length的单位是字符个数还是字节数?)

01-清理干净之前的数据库迁移信息 02-根据setting.py中的信息删除掉之前建立的数据库 03-删除之后重新创建数据库 04-models.py中创建数据库模型 from django.db import modelsclass User(models.Model):username models.CharField(max_length4)email models.EmailField(uni…

【makedown自带语法技巧】

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

YOLOv8优化策略:轻量化改进 | 华为Ghostnet,超越谷歌MobileNet | CVPR2020

🚀🚀🚀本文改进:Ghost bottleneck为堆叠Ghost模块 ,与YOLOV8建立轻量C2f_GhostBottleneck 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.Ghostnet介绍 论文: https://arxiv.org/pdf/1911.11907.…

python数据结构堆栈

堆 堆是一种树形结构&#xff1a;满足两个主要性质 堆是一种完全二叉树&#xff1a;堆中所有层级除了最后一层都是完全填满的&#xff0c;且最后一层的节点都是向左排列堆中的任意节点都不大于&#xff08;或不小于&#xff09;其子节点的值&#xff0c;这也是堆的属性 impo…

Java Stream通过findFirst()查找满足条件的一条数据

Stream的findFirst方法在此流中查找第一个元素作为Optional。 如果流中没有元素&#xff0c;findFirst返回空的Optional。 如果流没有顺序&#xff0c;那么findFirst可以选择任何元素。 如果findFirst选择的元素为null&#xff0c;它将抛出NullPointerException。 在javado…

【C++】C++11中的常见语法(上)

C11 一、C11简介二、统一的列表初始化1.&#xff5b;&#xff5d;初始化2. std::initializer_list 三、声明1. auto2. decltype3. nullptr 四、右值引用和移动语义1. 左值引用和右值引用2. 左值引用与右值引用比较3. 右值引用使用场景和意义4. 右值引用引用左值及其一些更深入的…

yolov5_master的下载、环境搭建、数据处理及训练全过程

本文借用了以下微博的文章&#xff0c;觉得写的比较全&#xff0c;所以照抄了过来&#xff0c;并且搭建了一遍可以正常训练&#xff0c;在这里作为笔记以后用的时候方便找&#xff0c;这个yolov5_master的使用可以将pth模型文件转换为onnx文件&#xff0c;进而转换为rknn文件&a…

Mybatis缓存相关面试题有多卷

MyBatis 是一个流行的持久层框架&#xff0c;它提供了一个灵活且高效的方式来访问关系型数据库。其中一个重要的特性是缓存机制&#xff0c;它可以帮助提升数据库查询的性能。 MyBatis 的缓存分为一级缓存和二级缓存两种&#xff1a; 一级缓存&#xff1a;默认情况下&#xff0…