深入学习 Redis - 基于 Spring Data Redis 操作 Redis

目录

一、前置工作

1.1、引入 Spring Data  Redis 依赖

1.2、编写配置文件

二、Spring Data Redis

2.1、前置知识

2.2、演示 Demo


一、前置工作


1.1、引入 Spring Data  Redis 依赖

1.2、编写配置文件

spring:redis:host: 127.0.0.1port: 8888

二、Spring Data Redis


2.1、前置知识

之前使用 Jedis 是通过 Jedis 对象里的各种方法来操作 redis 的,此处 Spring 则是通过 SpringRedisTemplate 来操作 redis.

最原始的提供类是 RedisTemplate ,SpringRedisTemplate 是 RedisTemplate 的子类,专门用来处理文本数据的,相比于 Jedis ,还是存在较大差异的,如下:

RedisTemplate 是把 Redis 的方法,分成了几个类别来进行组织,和原生的 Redis 命令有一定的差异~  作者的初心是希望通过上述封装,让接口看起来更简单,但在我看来,并没有达成,反而因为与 Redis 原生命令差异,提高了使用者的学习成本.

值得注意的是, RedisTemplate 留了一个后手,让我们能随时执行到 Redis 原生的命令 ——execute方法:

这里的 RedisConnection 就代表了 Redis 连接,对标 Jedis 对象

Ps:execute 要求回调方法中必须写 return 语句,这个回调的对象,就会作为 execute 本身的返回值.

2.2、演示 Demo

这里 redis 测试的各种方法,都是通过 Controller 提供的 http 接口来触发的.

@RestController
@RequestMapping("/redis")
public class RedisController {@Autowiredprivate StringRedisTemplate redisTemplate;@RequestMapping("/string")public String testString() {redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForValue().set("key1", "111");redisTemplate.opsForValue().set("key2", "222");redisTemplate.opsForValue().set("key3", "333");String value1 = redisTemplate.opsForValue().get("key2");String value2 = redisTemplate.opsForValue().get("key100");System.out.println("--------------------------------");System.out.println("value1: " + value1);System.out.println("value2: " + value2);return "OK";}@RequestMapping("/hash")public String testHash() {redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForHash().put("key1", "f1", "v1");redisTemplate.opsForHash().put("key1", "f2", "v2");redisTemplate.opsForHash().put("key1", "f3", "v3");String value1 = (String) redisTemplate.opsForHash().get("key1", "f1");String value2 = (String) redisTemplate.opsForHash().get("key1", "f2");System.out.println("--------------------------------");System.out.println("value1: " + value1);System.out.println("value2: " + value2);redisTemplate.opsForHash().delete("key1",  "f1", "f2");Long size = redisTemplate.opsForHash().size("key1");System.out.println("size: " + size);return "OK";}@RequestMapping("/list")public String testList() {redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForList().leftPush("key1", "111");redisTemplate.opsForList().leftPush("key1", "222");redisTemplate.opsForList().leftPush("key1", "333");String value1 = redisTemplate.opsForList().rightPop("key1");String value2 = redisTemplate.opsForList().rightPop("key1");String value3 = redisTemplate.opsForList().rightPop("key1");System.out.println("--------------------------------");System.out.println("value1: " + value1);System.out.println("value2: " + value2);System.out.println("value3: " + value3);return "OK";}@RequestMapping("/set")public String testSet() {System.out.println("--------------------------------");redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForSet().add("key1", "111", "222", "333");Set<String> result = redisTemplate.opsForSet().members("key1");System.out.println("result: " + result);Boolean exists = redisTemplate.opsForSet().isMember("key1", "111");System.out.println("exists: " + exists);Long count = redisTemplate.opsForSet().size("key1");System.out.println("count: " + count);redisTemplate.opsForSet().remove("key", "111", "222");result = redisTemplate.opsForSet().members("key1");System.out.println("result: " + result);return "OK";}@RequestMapping("/zset")public String testZset() {redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForZSet().add("key1", "f1", 100);redisTemplate.opsForZSet().add("key1", "f2", 200);redisTemplate.opsForZSet().add("key1", "f3", 300);Set<String> members = redisTemplate.opsForZSet().range("key1", 0 ,-1);Set<ZSetOperations.TypedTuple<String>> membersWithScore = redisTemplate.opsForZSet().rangeByScoreWithScores("key", 0 , -1);Double score = redisTemplate.opsForZSet().score("key1", "f1");Long size = redisTemplate.opsForZSet().remove("key1", "f1");Long rank = redisTemplate.opsForZSet().rank("key1", "f2");System.out.println("--------------------------------");System.out.println("members: " + members);System.out.println("membersWithScores: " + membersWithScore);System.out.println("score: " + score);System.out.println("size: " + size);System.out.println("rank: " + rank);return "OK";}}

 

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

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

相关文章

【粒子群算法和蝴蝶算法组合】粒子群混沌混合蝴蝶优化算法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

20.1 HTML 介绍

1. W3C组织 万维网联盟(World Wide Web Consortium, W3C): 是一个国际性的标准化组织, 致力于开发和推广Web标准.W3C的使命是通过制定和推广Web技术标准, 促进Web的长期发展和互操作性, 它由许多组织和个人组成, 包括浏览器制造商, 软件开发商, 网络服务提供商, 学术机构和个…

C++ 哈希的应用【布隆过滤器】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f383;操作环境&#xff1a; Visual Studio 2022 版本 17.6.5 文章目录 &#x1f307;前言&#x1f3d9;️正文1、字符串比较2、布隆过滤器的概念3、布隆过滤器的实现3.1、基本结构3.2、插入…

一、Postfix[安装与配置、smtp认证、Python发送邮件以及防垃圾邮件方法、使用腾讯云邮件服务]

Debian 11 一、安装 apt install postfix 二、配置 1.dns配置 解释&#xff1a;搭建真实的邮件服务器需要在DNS提供商那里配置下面的dns 配置A记录mail.www.com-1.x.x.x配置MX记录www.com-mail.www.com 解释&#xff1a;按照上面的配置通常邮件格式就是adminwww.com其通过…

Python 教程之标准库概览

概要 Python 标准库非常庞大&#xff0c;所提供的组件涉及范围十分广泛&#xff0c;使用标准库我们可以让您轻松地完成各种任务。 以下是一些 Python3 标准库中的模块&#xff1a; 「os 模块」 os 模块提供了许多与操作系统交互的函数&#xff0c;例如创建、移动和删除文件和…

C#,中国福利彩票《刮刮乐》的数学算法(02)——时来运转

1 中国福利彩票 中国福利彩票始于1987年7月27日&#xff0c;以“团结各界热心社会福利事业的人士&#xff0c;发扬社会主义人道主义精神&#xff0c;筹集社会福利资金&#xff0c;兴办残疾人、老年人、孤儿福利事业和帮助有困难的人”、即“扶老、助残、救孤、济困”为宗旨。随…

【C++进阶:哈希--unordered系列的容器及封装】

本课涉及到的所有代码都见以下链接&#xff0c;欢迎参考指正&#xff01; practice: 课程代码练习 - Gitee.comhttps://gitee.com/ace-zhe/practice/tree/master/Hash unordered系列关联式容器 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;在…

拓扑排序详解(带有C++模板)

目录 介绍&#xff1a; 实现原理&#xff1a; 简答来说&#xff1a; 例子 模板&#xff08;C&#xff09; 介绍&#xff1a; 拓扑排序&#xff08;Topological Sorting&#xff09;是一种针对有向无环图&#xff08;DAG&#xff09;的节点进行排序的算法。DAG是一个图&…

PHP数据库

PHP MySQL 连接数据库 MySQL 简介MySQL Create 免费的 MySQL 数据库通常是通过 PHP 来使用的。 连接到一个 MySQL 数据库 在您能够访问并处理数据库中的数据之前&#xff0c;您必须创建到达数据库的连接。 在 PHP 中&#xff0c;这个任务通过 mysql_connect() 函数完成。 …

Linux环境安装MySQL(详细教程)

1、下载MySQL MySQL官网&#xff1a;MySQLhttps://www.mysql.com/ 下载社区版&#xff08;免费&#xff0c;但不提供技术支持&#xff09; 简单说明一下rpm和tar包的区别&#xff1a; tar 只是一种压缩文件格式&#xff0c;所以&#xff0c;它只是把文件压缩打包 rpm&#xf…

【字节跳动青训营】后端笔记整理-3 | Go语言工程实践之测试

**本文由博主本人整理自第六届字节跳动青训营&#xff08;后端组&#xff09;&#xff0c;首发于稀土掘金&#xff1a;&#x1f517;Go语言工程实践之测试 | 青训营 目录 一、概述 1、回归测试 2、集成测试 3、单元测试 二、单元测试 1、流程 2、规则 3、单元测试的例…

我的第一个flutter项目(Android Webview)

前言&#xff1a;flutter开发环境搭建Flutter的开发环境搭建-图解_☆七年的博客-CSDN博客 第一个flutter简单项目&#xff0c;内容是一个主界面&#xff0c;其中&#xff1a; 1.内容点击数字自增 2.跳转一个空页&#xff0c; 3.跳转一个WebView界面 其中涉及添加主键&#xf…

QT: 用定时器完成闹钟的实现

闹钟项目&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QDebug> #include <QTextToSpeech> #include <QMessageBox> #include <QTimer>QT_BEGIN…

Quartz项目搭建与任务执行源码分析

数据库准备 准备一个MySQL数据库&#xff0c;版本为8.0&#xff0c;然后创建一个库&#xff0c;并从quartz官方的版本包中找到名称为tables_mysql_innodb.sql的脚本执行进去&#xff08;脚本内容文后也有提供&#xff09;。 项目依赖说明 创建一个Maven项目&#xff0c;引入…

gitignore文件使用方法(gitignore教程)(git status --ignored)(git check-ignore -v <file>)

文章目录 Gitignore文件使用描述Gitignore基本语法1. 基本语法★★★★★2. 配置方法 匹配示例示例1示例2示例3 其他命令git status --ignored&#xff08;用于显示被Git忽略的文件和文件夹的状态&#xff09;git check-ignore -v <file>&#xff08;用于检查指定文件是否…

一个灵活、现代的Android应用架构

一个灵活、现代的Android应用架构 学习Android架构的原则&#xff1a;学习原则&#xff0c;不要盲目遵循规则。 本文旨在通过示例演示实际应用&#xff1a;通过示范Android架构来进行教学。最重要的是&#xff0c;这意味着展示出如何做出各种架构决策。在某些情况下&#xff0…

网络层IP协议的基本原理 数据链路层ARP协议 域名解析以及一些重要技术

目录 1 网络层IP协议协议头格式网段划分DHCPCIDR&#xff1a;基于子网掩码的划分方式特殊的IP号IP地址的数量限制私有IP地址和公网IP地址路由路由表 2 数据链路层 — 局域网的转发问题以太网认识以太网以太网帧格式局域网通信原理 MTUMTU对IP协议的影响MTU对UDP协议的影响MTU对…

人类文明进入下个纪元奇点:UFO听证会-恒温超导发现-GPT大模型

今年以来&#xff0c;科技领域出圈的事件频繁发生&#xff0c;每一个事件都意味着一个领域的重大突破的可能。这些事件是UFO听证会、恒温超导LK99的论文、GPT类大模型的广泛应用&#xff0c;我常将这些事件串在一起思考&#xff0c;细思极恐&#xff0c;一种”火鸡与农场主“的…

C语言手撕顺序表

目录 一、概念 1、静态顺序表&#xff1a;使用定长数组存储元素。 2、动态顺序表&#xff1a;使用动态开辟的数组存储 二、接口实现 1、对顺序表的初始化 2、对数据的销毁 3、对数据的打印 4、检查是否需要扩容 5、尾插 6、头插 7、尾删 8、头删 9、在pos位置插入x …

使用ComPDFKit PDF SDK 构建iOS PDF阅读器

在当今以移动为先的世界中&#xff0c;为企业和开发人员创建一个iOS应用程序是必不可少的。随着对PDF文档处理需求的增加&#xff0c;使用ComPDFKit这个强大的PDF软件开发工具包&#xff08;SDK&#xff09;来构建iOS PDF阅读器和编辑器可以让最终用户轻松查看和编辑PDF文档。 …