Spring的Redis客户端

news2025/1/11 21:58:58

如何在Spring中操作redis

在创建springboot项目的时候引入redis的依赖.

 

在配置文件里指定redis主机的地址和端口,此处我们配置了ssh隧道,所以连接的就是本机的8888端口.

创建一个controller类,注入操作redis的对象.

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

最原始提供的操作redis的类是RedisTemplate.而StringRedisTemplate是RedisTemplate的子类,是专门用来处理文本数据的.

StringRedisTemplate提供的方法相对于之前jedis中的各种方法,还是存在较大差异的.和原生的命令不太一样.

此处StringRedisTemplate把这些操作redis的方法,又按照数据类型的不同,分成了几个大类别,分门别类的来组织这些命令.相当于又做了进一步的封装,不像jedis那样能点出所有类型的方法.

在这里你要使用一个类型的命令,就必须点出专门操作此数据结构的对象来,然后在点,出现的方法就是具体的命令了.

RedisTemplate没有封装所有的redis命令,所以为了让我们能够执行redis的原生命令,提供了一个execute方法.

相当于一个回调函数,在回调里写我们的redis命令,这个回调就会被RedisTemplate内部进行执行.

这里的RedisConnection就代表了redis连接,对标jedis对象.

Spring操作Redis命令演示

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;
import java.util.Set;

@RestController
public class RedisController {
    @Autowired
    private StringRedisTemplate redisTemplate;

    @RequestMapping("/testString")
    public String testString(){

        redisTemplate.execute((RedisConnection redisConnection)->{
            // execute 要求回调方法中必须写 return 语句. 返回个东西.
            // 这个回调返回的对象, 就会作为 execute 本身的返回值.
            redisConnection.flushAll();
            return null;
        });

        redisTemplate.opsForValue().set("key1","111");
        redisTemplate.opsForValue().set("key2","222");
        redisTemplate.opsForValue().set("key3","333");

        String value = redisTemplate.opsForValue().get("key1");
        System.out.println("value:"+value);
        String value2 = redisTemplate.opsForValue().get("key1");
        System.out.println("value2:"+value2);
        String value3 = redisTemplate.opsForValue().get("key1");
        System.out.println("value3:"+value3);
        return "OK";
    }

    @RequestMapping("/testHash")
    public String testHash(){
        redisTemplate.execute((RedisConnection redisConnection)->{
            redisConnection.flushAll();
            return null;
        });
        redisTemplate.opsForHash().put("k1","f1","v1");
        redisTemplate.opsForHash().put("k1","f2","v2");
        redisTemplate.opsForHash().put("k1","f3","v3");
        Map<Object, Object> getall =   redisTemplate.opsForHash().entries("k1");
        System.out.println(getall);
        return "ok";
    }

    @RequestMapping("/testList")
    public String testList(){
        redisTemplate.execute((RedisConnection redisConnection)->{
            redisConnection.flushAll();
            return null;
        });
        redisTemplate.opsForList().leftPushAll("k1","111","222","333");
        String result =  redisTemplate.opsForList().rightPop("k1");
        System.out.println(result);
        return "ok";
    }

    @RequestMapping("/testSet")
    public String testSet(){
        redisTemplate.execute((RedisConnection redisConnection)->{
            redisConnection.flushAll();
            return null;
        });
        redisTemplate.opsForSet().add("k1","111","222","333");
        Set<String> set =  redisTemplate.opsForSet().members("k1");
        Long length =  redisTemplate.opsForSet().size("k1");
        System.out.println("length:"+length);
        System.out.println(set);
        return "ok";
    }

    @RequestMapping("/testZSet")
    public String testZSet(){
        redisTemplate.execute((RedisConnection connection)->{
            connection.flushAll();
            return null;
        });
        redisTemplate.opsForZSet().add("key", "zhangsan", 10);
        redisTemplate.opsForZSet().add("key", "lisi", 20);
        redisTemplate.opsForZSet().add("key", "wangwu", 30);

        Set<String> members = redisTemplate.opsForZSet().range("key", 0, -1);
        System.out.println("members: " + members);

        Set<ZSetOperations.TypedTuple<String>> membersWithScore = redisTemplate.opsForZSet().rangeWithScores("key", 0, -1);
        System.out.println("membersWithScore: " + membersWithScore);

        Double score = redisTemplate.opsForZSet().score("key", "zhangsan");
        System.out.println("score: " + score);

        redisTemplate.opsForZSet().remove("key", "zhangsan");

        Long size = redisTemplate.opsForZSet().size("key");
        System.out.println("size: " + size);

        Long rank = redisTemplate.opsForZSet().rank("key", "lisi");
        System.out.println("rank: " + rank);

        return "OK";
    }
}

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

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

相关文章

[原创]仅需小小的改变,B++ Builder 12的代码完成提示即可完美工作.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse、C Bui…

实验室试剂耗材安全管理:从热点事件看其重要性

随着科学技术的不断发展&#xff0c;实验室试剂耗材在各个学科领域的应用越来越广泛。然而&#xff0c;随之而来的实验室试剂耗材安全管理问题也日益凸显。近年来&#xff0c;一系列实验室安全事件引发了社会广泛关注&#xff0c;使我们深刻认识到实验室试剂耗材安全管理的重要…

HslCommunication模拟西门子读写数据

导入HslCommunication C#端代码&#xff08;上位机&#xff09; 这里要注意的是上位机IP用的当前电脑的IP。 using HslCommunication; using HslCommunication.Profinet.Siemens; using System; using System.Collections.Generic; using System.ComponentModel; using Syste…

Ridgeline plot / 远山图 / 山脊图 怎么画?怎么优化?

工具 Origin 2022 当然&#xff0c;用Matlab、Python也是可以的。 颜色配置 色卡调整

ehcart散点图x轴不按照顺序排列的问题

如图所示&#xff0c;一开始我x轴用的type为category&#xff0c;所以导致x轴的顺序是乱的&#xff0c;如下所示&#xff1a; 后来去官网看了下文档&#xff0c;才知道只需要type改成value就可以了&#xff01;&#xff01;&#xff01;差点就去写for循环排序了呀

正交矩阵的定义

对于n阶矩阵A&#xff0c;如果&#xff0c;其中为单位矩阵&#xff0c;为A的转置矩阵&#xff0c;那么就称A为正交矩阵。 对于正交矩阵&#xff0c; 对于正交矩阵&#xff0c;其列向量都是单位向量&#xff0c;行向量都是单位向量

Databend 开源周报第 119 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 用户案例&#…

ENVI IDL:如何生成FY4A快照

01 数据说明 FY4A全圆盘&#xff08;DISK&#xff0c;全球&#xff09;多光谱影像&#xff0c;panoply软件打开数据层次结构如下&#xff1a; 我们生成快照主要使用到其中的NOMChannel01、NOMChannel02、NOMChannel03进行快照显示&#xff0c;注意我并没有进行辐射定标。 02 生…

《QT从基础到进阶·二十三》弹窗提示框QMessageBox和QCloseEvent事件

1、正常信息提示 QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);消息框按钮判断&#xff1a; if(QMessageBox::Ok QMessageBox::warning(this,"温馨提示","是否保存设置?…

【Android】TabLayout设置使用自定义的样式的图片显示问题

序言 TabLayout我们经常使用&#xff0c;用来和ViewPager2进行组合使用&#xff0c;做多Fragment切换页面效果。 TabLayout我们经常看到的的显示效果是上面文字&#xff0c;下面一个线段&#xff0c;在各大浏览器/新闻类APP可以看到&#xff0c;这个效果也是对TabLayout配置参…

2609. 最长平衡子字符串

2609. 最长平衡子字符串 难度: 简单 来源: 每日一题 2023.11.08 给你一个仅由 0 和 1 组成的二进制字符串 s 。 如果子字符串中 所有的 0 都在 1 之前 且其中 0 的数量等于 1 的数量&#xff0c;则认为 s 的这个子字符串是平衡子字符串。请注意&#xff0c;空子字符串也…

【数据结构】树与二叉树(十四):二叉树的基础操作:查找给定结点的父亲(算法Father )

文章目录 5.2.1 二叉树二叉树性质引理5.1&#xff1a;二叉树中层数为i的结点至多有 2 i 2^i 2i个&#xff0c;其中 i ≥ 0 i \geq 0 i≥0。引理5.2&#xff1a;高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点&#xff0c;其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

C# Spire.Pdf将PDF文件转换为Word文件

一.开发框架&#xff1a; .NetCore6.0 工具&#xff1a;Visual Studio 2022 二.思路&#xff1a; 1.界面上传PDF文件&#xff0c;并保存 2.PDF文件转换为Word文件并保存 3.使用SHA256Hash判断文件是否已经转换过了&#xff0c;转换过了的话&#xff0c;就返回原先转换过的文…

数据——最为直接的答案

身处于这样一个数字化快速发展、竞争强烈的时代&#xff0c;不管是企业还是个人&#xff0c;大家都需要及时获取前沿动态信息&#xff0c;密切关注市场的变化。但是&#xff0c;在不计其数的企业中&#xff0c;到底行业top 是哪些企业引领潮流&#xff1f; 只有数据能告诉你最…

一款免费好用的制作电子杂志网站,发现新大陆~

你是不是也厌倦了传统纸质杂志的限制&#xff0c;想要尝试一种全新的阅读体验&#xff1f;那么&#xff0c;今天我要向你推荐的这款免费好用的制作电子杂志网站&#xff0c;绝对能让你眼前一亮&#xff01; 这款网站就是FLBOOK在线制作电子杂志平台&#xff0c;并且界面简洁、操…

设计模式之模版方法(TemplateMethod)

模版方法 钩子函数 回调函数 在父类里面有一个模版方法&#xff0c;在这个方法里面调用了op1&#xff0c;op2&#xff0c;op3… 在子类里面如果想要改变父类的op1和op2 只需要重写op1和op2&#xff0c;那么这个重写之后的方法&#xff0c;可以在父类里面直接调用的到 例子: J…

LabVIEW中NIPackageManager功能介绍

LabVIEW中PackageManager功能介绍 使用NIPackage Manager可安装、更新、修复和删除NI软件。 安装NI软件 使用PackageManager浏览和安装NI软件。 1. 在浏览产品选项卡上&#xff0c;单击产品类别以显示该类别中的可用产品。 2. 选择要安装的产品&#xff0c;然后单击…

20 个好用的一行 Java代码

今天分享给大家20个 令人惊叹的 Java一行代码&#xff0c;让你们的工作更轻松。一起来看看吧&#xff01; 1. 获取浏览器 Cookie 的值 使用document.cookie 来获取 Cookie 的值。 2. 将 RGB 转换为十六进制 3. 复制到剪贴板 使用 navigator.clipboard.writeText 轻松将任何文本…

Cesium 点线面实体

1.点 const point viewer.entities.add({ id: point, position: Cesium.Cartesian3.fromDegrees(113, 30), point: { pixelSize: 20, //像素 color: Cesium.Color.DEEPPINK, outlineColor: Cesium.Color.fromCssColorString(#fff), outlineWidth: 2, // 像素 }, }); 2.图标标注…

医院等级评审,离不开医院不良事件报告系统

医院不良事件报告系统全套源码 不良事件管理系统源码 不良事件上报系统对事件的报告、处置、跟踪、评价、分析、改进、学习等进行了综合管理&#xff0c;通过双向互评机制实现临床科室与职能部门之间的进一步互动&#xff0c;加强不良事件报告处置过程中的信息互通能力。 围绕…