初识Redis:JavaSpring客户端

news2024/9/24 5:26:59

第一步,需要在添加依赖的时候,选中这两个依赖。

第二步,修改配置文件

此处可以用properties也可以用yml。

第三步,完善controller

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

此处的RedisTemplate是把这些操作Redis的方法,分成了几个类别,做了进一步的封装。

比如此处的opsForValue就可以获取到对象,操作字符串类型。

但是,redisTemplate,并不是什么方法都有的,比如我们想要删库,flushAll操作就没有,如果我们想要完成一些原生redis才有的操作,怎么办呢?

RedisTemplate留了一个后手,让我们随时能够执行到原生Redis的命令:execute方法

能够直接在Redis连接上执行命令,这在需要执行复杂或自定义的Redis操作时非常有用。

String List Hash Set Zset

五种类型,大同小异,用法具体来说可以通过官方文档查询。

package com.example.springredisdemo;

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.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.Set;

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

    @GetMapping("/testString")
    @ResponseBody
    public String testString(){
        redisTemplate.opsForValue().set("key1", "111");
        redisTemplate.opsForValue().set("key2", "222");
        redisTemplate.opsForValue().set("key3", "333");

        String value = redisTemplate.opsForValue().get("key");
        System.out.println("value: "+ value);

        return "OK";
    }

    @GetMapping("/testList")
    @ResponseBody
    public String testList(){
        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
            return null;
        });

        redisTemplate.opsForList().leftPush("key", "111");
        redisTemplate.opsForList().leftPush("key2", "222");
        redisTemplate.opsForList().leftPush("key3", "333");

        String value;
        value = redisTemplate.opsForList().rightPop("key");
        System.out.println("value: "+ value);
        value = redisTemplate.opsForList().rightPop("key2");
        System.out.println("value: "+ value);
        value = redisTemplate.opsForList().rightPop("key3");
        System.out.println("value: "+ value);

        return "List";
    }

    @GetMapping("/testSet")
    @ResponseBody
    public String testSet() {
        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
            return null;
        });

        redisTemplate.opsForSet().add("key", "111", "222", "333");
        Set<String> result = redisTemplate.opsForSet().members("key");
        System.out.println("result: " + result);

        Boolean exists = redisTemplate.opsForSet().isMember("key", "111");
        System.out.println("exists: " + exists);

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

        redisTemplate.opsForSet().remove("key", "111", "222");
        result = redisTemplate.opsForSet().members("key");
        System.out.println("result: " + result);

        return "OK";
    }

    @GetMapping("/testHash")
    @ResponseBody
    public String testHash() {
        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
            return null;
        });

        redisTemplate.opsForHash().put("key", "f1", "111");
        redisTemplate.opsForHash().put("key", "f2", "222");
        redisTemplate.opsForHash().put("key", "f3", "333");

        String value = (String) redisTemplate.opsForHash().get("key", "f1");
        System.out.println("value: " + value);

        Boolean exists = redisTemplate.opsForHash().hasKey("key", "f1");
        System.out.println("exists: " + exists);

        redisTemplate.opsForHash().delete("key", "f1", "f2");

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

        return "OK";
    }

    @GetMapping("/testZSet")
    @ResponseBody
    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/2093721.html

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

相关文章

粘包、半包和Netty中的自定义帧解码器间的关系

之前学习Netty的时候学到自定义编解码器这一部分后就没再继续学习&#xff0c;同时对于这部分知识学习不深入。一直有个误区&#xff1a;自定义编码以及解码服务器就能够解决TCP作为流式协议传输&#xff08;无消息边界&#xff09;导致的粘包、半包问题。实则上面这句话有非常…

Pr:代理预设

在 Adobe Premiere Pro 中&#xff0c;“创建代理” Create Proxies对话框中的“代理”预设提供了六种格式选项。 ProRes QuickTime 代理 ProRes 是 Apple 开发的高质量中间编解码器&#xff0c;广泛应用于专业视频编辑领域。它提供了出色的色彩保真度和较低的压缩损失&#xf…

SPR系列单点激光雷达测距传感器|模组之CAN-OPEN软件调试说明

SPR系列单点激光雷达测距传感器|模组利用激光束的时间飞行原理来测量距离。它们发射出一个脉冲激光&#xff0c;并测量激光从传感器发射到击中物体并返回的时间来计算距离。 SPR系列单点激光雷达测距传感器|模组在测量精度要求较高的应用中常被使用&#xff0c;应用范围广泛&a…

PWM(Pulse-width modulation)脉冲宽度调制

PWM&#xff08;Pulse-width modulation&#xff09;是脉冲宽度调制 脉冲宽度调制是一种模拟信号电平数字编码方法。脉冲宽度调制PWM是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式。所以根据面积等效法则&#xff0c;可以通过对改变脉冲的时…

《高等代数》“么”字型行列式

说明&#xff1a;此文章用于本人复习巩固&#xff0c;如果也能帮助到大家那就更加有意义了。 注&#xff1a;1&#xff09;“么”字型行列式总共有8种形式 2&#xff09;“么”字型行列式的求解方法有三种&#xff1a;&#xff08;1&#xff09;用长斜边消去短斜边 &#xff0…

Open3D mesh 精细化处理-loop剖分

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 参数详解 返回值 2.2完整代码 三、实现效果 3.1原始mesh 3.2剖分后mesh Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长…

Vue 3.5 中的 base watch 函数与 Vue 模块化设计探索

在 Vue.js 的发展历程中&#xff0c;每一个版本的更新都带来了新特性和性能优化&#xff0c;而 Vue 3.5-beta.3 引入的 base watch 函数&#xff0c;虽然名字上听起来像是传统 watch API 的基础版本&#xff0c;但实际上它标志着 Vue 内部架构的一次重要调整。这次调整不仅影响…

Jupyter如何使用Anaconda的虚拟环境

Anaconda的虚拟环境大家应该都知道是什么&#xff0c;我们可以建立多个虚拟环境并在对应的环境中安装不同的python三方库从而运行不同的python项目&#xff0c;那么在jupyter中如何使用Anaconda的虚拟环境呢&#xff0c;今天就为大家分享一个这样的操作教程。 请参考图文进行以…

VSCode设置复制 Ctrl+D想下复制

VSCode 默认向下复制当前行是 shift Alt ↓,但是我们习惯了IDE和webStrom的CtrlD的想下复制.下面是VSCode自定义快捷键. VSCode设置复制 CtrlD想下复制 1.文件->首选项->键盘快捷方式(ctrk 在案ctrs)2.输入 copy line down->右键->更改键绑定3.完成 1.文件->首…

手把手教你从开发进度划分测试

一.单元测试&#xff08;Unit Testing&#xff09; 单元测试&#xff1a;软件单元测试的对象是可独立编译或汇编的程序模块。测试的对象是软件测试中的最小单位&#xff1a;模块。 测试阶段&#xff1a;编码后或者编码前&#xff08;TDD&#xff1a;测试驱动开发&#xff09;…

记录一些信息收集方法

未完成 百度谷歌关键词搜索&#xff08;已经很久远了&#xff0c;基本上起不到作用&#xff09; 查询域名的备案信息 查询相关证书 企查查&#xff0c;天眼查查内部资产 搜索引擎fofa或者钟馗之眼等东西&#xff0c;然后这个里面的东西可以通过http请求头都可以看见&#…

TLB的刷新方式--linux 2.4

TLB刷新的时机(i386) struct tlb_state cpu_tlbstate[NR_CPUS] {[0...NR_CPUS-1] {&init_mm, 0}}; 一般情况各个CPU的cpu_tblstate的state设置成TLBSTATE_OK&#xff0c;表示如果正在使用中的页面目录或页面表内容发生了变化就要刷新TLB的内容。 与vmalloc有关与HIGHM…

工业控制之“什么叫RTO?”

读研究生时&#xff0c;过程控制领域经常涉及“APC”、“RTO”等字眼&#xff0c;导师也经常性提及&#xff0c;现在在工作中也开始提了&#xff0c;可能意识到先进控制的重要性了。 今天谈一下RTO在工业上的应用&#xff0c;曾经和一个博士生对“RTO涉及哪些算法”发生过激烈…

C++ 设计模式——访问者模式

目录 C 设计模式——访问者模式1. 主要组成成分2. 逐步构建访问者模式步骤1: 创建元素接口和具体元素步骤2: 创建抽象访问者和具体访问者步骤3:创建对象结构步骤4: 客户端使用访问者模式 3. 访问者模式 UML 图UML 图解析 4. 访问者模式的优点5. 访问者模式的缺点6. 访问者模式适…

spring security 记住我在web和前后端分离如何使用

一、传统web开发准备工作 如果不懂原理的话&#xff0c;去看上一篇文章&#xff1a;CSDNhttps://mp.csdn.net/mp_blog/creation/editor/141716695 导入需要的依赖包&#xff0c;在传统web页面开发比较简单&#xff0c;我们设置只需要在页面请求参数加上一个remember-me 即可&a…

Linux-gcc/g++使用

文章目录 概念gccg 编译过程预处理(进行宏替换)编译&#xff08;生成汇编&#xff09;汇编&#xff08;生成机器可识别代码&#xff09;连接&#xff08;生成可执行文件或库文件&#xff09;函数库 gcc选项 概念 Linux中的gcc和g是GNU Compiler Collection&#xff08;GNU编译…

RESP图形化界面远程连接虚拟机Redis教程

参考优质大佬文章&#xff1a; Redis安装以及RESP连接Redis服务器_resp 连接-CSDN博客 《Redis&#xff1a;小白入门》RESP远程连接问题_redis配置文件更改为可以远程连接-CSDN博客 目录 环境 第一步&#xff1a;修改redis配置文件 第二步&#xff1a;关闭Linux防火墙 第三…

功能需求文档-自适应巡航控制ACC

本文以特斯拉Model3为例&#xff0c;展示如何撰写其主动巡航控制功能的功能需求文档&#xff1b;详情请参照用户手册 功能概述 主动巡航控制(ACC)是指系统实时监控车辆前方行驶环境&#xff0c;在设定的速度范围内&#xff0c;通过控制油门和制动&#xff0c;自动调整行驶速度…

Mybatis 潦草笔记

准备工作&#xff08;创建springboot工程、数据库表、实体类&#xff09;引入Mybatis的相关依赖&#xff0c;配置Mybatis&#xff08;数据库连接信息&#xff09;编写SQL语句&#xff08;注解/XML&#xff09; 创建springboot工程 选中两项 MyBatis Framework&#xff1a;My…

分支和循环(上)

目录 1. if语句 1.1 if ​1.2 else 1.3 分支中包含多条语句 1.4 嵌套if 1.5 悬空else问题 2. 关系操作符 3. 条件操作符 4. 逻辑操作符 4.1 逻辑取反操作符 4.2 逻辑与运算符 4.3 逻辑或运算符 4.4 连续:闰年的判断 4.5 短路 5. switch语句 5.1 if语句和switch…