Redis之Java操作redis

news2025/4/23 23:27:20

零:在test测试类下创建一个类

@SpringBootTest
public class SpringDateRedisTest {
    ...
}

一:五大操作类型

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate() {
        System.out.println(redisTemplate);
        ValueOperations valueOperations = redisTemplate.opsForValue(); //操作字符串类型数据
        HashOperations hashOperations = redisTemplate.opsForHash(); //操作哈希类型的数据
        ZSetOperations zSetOperations = redisTemplate.opsForZSet(); //操作zset
        ListOperations listOperations = redisTemplate.opsForList(); //操作list集合类型数据
        SetOperations setOperations = redisTemplate.opsForSet(); //操作set

    }

二:操作字符串的数据

    @Test
    public void testString() {
        // set get 设置键值对并获取值
        redisTemplate.opsForValue().set("city", "北京");
        String city = (String) redisTemplate.opsForValue().get("city");
        System.out.println(city);
        // setex 设置保存时间:3分钟
        redisTemplate.opsForValue().set("code", "1234", 3, TimeUnit.MINUTES);
        // setnx 如果键不存在,则设置键值对
        redisTemplate.opsForValue().setIfAbsent("lock", 1);
        redisTemplate.opsForValue().setIfAbsent("lock", 2);
    }

三:操作哈希类型的数据

    @Test
    public void testHash() {
        // hset 添加哈希字段和值
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("100", "name", "zhangsan");
        hashOperations.put("100", "age", "18");
        // hget 获取哈希字段的值
        String name = (String) hashOperations.get("user:1", "name");
        System.out.println(name);
        // hkeys 获取哈希的所有字段
        Set keys = hashOperations.keys("100");
        System.out.println(keys);
        // hvals 获取哈希的所有值
        List values = hashOperations.values("100");
        System.out.println(values);
        // hdel 删除哈希字段
        hashOperations.delete("100", "age");
    }

四:操作list集合类型的数据

    @Test
    public void testList() {
        // lpush 将元素从左侧插入列表
        ListOperations listOperations = redisTemplate.opsForList();
        listOperations.leftPushAll("list", "a", "b", "c");
        listOperations.leftPush("list", "d");
        // lrange 获取列表指定范围的元素
        List list = listOperations.range("list", 0, -1);
        System.out.println(list);
        // lpop 从右侧弹出列表的元素a
        Object list1 = listOperations.rightPop("list");
        System.out.println(list1);
        // llen 获取列表的长度
        Long size = listOperations.size("list");
        System.out.println(size);
    }

五:操作set集合类型的数据

    @Test
    public void testSet() {
        //sadd 添加元素到集合
        SetOperations setOperations = redisTemplate.opsForSet();
        setOperations.add("set1", "a", "b", "c", "d");
        setOperations.add("set2", "a", "b", "x", "y");
        //smembers 获取集合的所有元素
        Set members = setOperations.members("set1");
        System.out.println(members);
        //scard 获取集合的长度
        Long size = setOperations.size("set1");
        System.out.println(size);
        //sinter 求交集
        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);
        //sunion 求并集
        Set union = setOperations.union("set1", "set2");
        System.out.println(union);
        //srem 删除集合中的元素
        setOperations.remove("set1", "a","b");
    }

六:操作zset类型的数据

    @Test
    public void testZset() {
        //zadd 添加元素到zset
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("zset", "a", 10);
        zSetOperations.add("zset", "b", 12);
        zSetOperations.add("zset", "c", 9);
        //zrange 获取指定范围的元素
        Set range = zSetOperations.range("zset", 0, -1);
        System.out.println(range);
        //zincrby 根据元素的分数进行排序,并返回元素
        zSetOperations.incrementScore("zset", "c", 10);
        //zcrem 删除元素
        zSetOperations.remove("zset", "a", "b");
    }

七:操作通用类型的数据

    @Test
    public void testCommand() {
        //keys 获取所有键
        Set keys = redisTemplate.keys("*");
        System.out.println(keys);

        //exists 判断键是否存在
        Boolean name = redisTemplate.hasKey("name");
        Boolean set1 = redisTemplate.hasKey("set1");
        System.out.println(name);
        System.out.println(set1);

        //type 获取键的类型
        for (Object key: keys){
            DataType type = redisTemplate.type(key);
            System.out.println(type.name());
        }

        //del 删除键
        redisTemplate.delete("set1");
    }

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

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

相关文章

Kafka 面试,java实战贴

面试问题列表 Kafka的ISR机制是什么?如何保证数据一致性? 如何实现Kafka的Exactly-Once语义? Kafka的Rebalance机制可能引发什么问题?如何优化? Kafka的Topic分区数如何合理设置? 如何设计Kafka的高可用跨…

linux多线(进)程编程——(9)信号量(一)

前言 在找到了共享内存存在的问题后,进程君父子着手开始解决这些问题。他们发明了一个新的神通——信号量。 信号量 信号量是一个计数器,用于管理对共享资源的访问权限。主要特点包括: (1)是一个非负整数 &#xff…

PFLM: Privacy-preserving federated learning with membership proof证明阅读

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

图片转base64 - 加菲工具 - 在线转换

图片转base64 - 加菲工具 先进入“加菲工具” 网 打开 https://www.orcc.top, 选择 “图片转base64”功能 选择需要转换的图片 复制 点击“复制”按钮,即可复制转换好的base64编码数据,可以直接用于img标签。

opencv 对图片的操作

对图片的操作 1.图片镜像旋转(cv2.flip())2 图像的矫正 1.图片镜像旋转(cv2.flip()) 图像的旋转是围绕一个特定点进行的,而图像的镜像旋转则是围绕坐标轴进行的。图像的镜像旋转分为水平翻转、垂直翻转、水平垂直翻转…

LabVIEW数据采集与传感系统

开发了一个基于LabVIEW的智能数据采集系统,该系统主要通过单片机与LabVIEW软件协同工作,实现对多通道低频传感器信号的有效采集、处理与显示。系统的设计旨在提高数据采集的准确性和效率,适用于各种需要高精度和低成本解决方案的工业场合。 项…

【Easylive】​​Gateway模块 bootstrap.yml 解析

【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版 Gateway模块 bootstrap.yml 常规解析 该配置文件定义了 Spring Cloud Gateway 的核心配置,包括 环境配置、服务注册、动态路由规则 等。以下是逐项解析: 1. 基础配…

matlab 环形单层柱状图

matlab 环形单层柱状图 matlab 环形单层柱状图 matlab 环形单层柱状图 图片 图片 【图片来源粉丝】 我给他的思路是:直接使用风玫瑰图可以画出。 rose_bar 本次我的更新和这个有些不同!是环形柱状图,可调节细节多; 只需要函数…

文献×汽车 | 基于 ANSYS 的多级抛物线板簧系统分析

板簧系统是用于减弱或吸收动态系统中发生的应力、应变、偏转和变形等破坏性因素的机械结构。板簧系统可能对外力产生不同的响应,具体取决于其几何结构和材料特性。板簧系统的计算机辅助分析对于高精度确定系统的变形特性和结构特性至关重要。 在这项工作中&#xff…

RHCE 练习二:通过 ssh 实现两台主机免密登录以及 nginx 服务通过多 IP 区分多网站

一、题目要求 1.配置ssh实现A,B主机互相免密登录 2.配置nginx服务,通过多ip区分多网站 二、实验 实验开始前需准备两台 linux 主机便于充当服务端以及客户端,两台主机 IP 如下图: 实验1:配置 ssh 实现 A&#xff0…

瑞吉外卖-分页功能开发中的两个问题

1.分页功能-前端页面展示显示500 原因:项目启动失败 解决:发现是Category实体类中,多定义了一个删除字段,但是我数据库里面没有is_deleted字段,导致查询数据库失败,所以会导致500错误。因为类是从网上其他帖…

工业物联网安全网关 —— 安全OTA升级签名验证

这里写目录标题 工业物联网安全网关 —— 安全OTA升级签名验证一、项目背景与简介1.1 背景介绍1.2 OTA升级的安全挑战1.3 项目目标二、理论基础与关键技术2.1 数字签名基础2.2 OTA升级签名验证原理2.3 关键技术与安全算法三、系统架构设计3.1 系统模块划分3.2 系统架构图(Merm…

探索 Flowable 后端表达式:简化流程自动化

什么是后端表达式? 在 Flowable 中,后端表达式是一种强大的工具,用于在流程、案例或决策表执行期间动态获取或设置变量。它还能实现自定义逻辑,或将复杂逻辑委托…… 后端表达式在 Flowable 的后端运行,无法访问前端…

HDFS入门】HDFS安全与权限管理解析:从认证到加密的完整指南

目录 引言 1 认证与授权机制 1.1 Kerberos认证集成 1.2 HDFS ACL细粒度控制 2 数据加密保护 2.1 传输层加密(SSL/TLS) 2.2 静态数据加密 3 审计与监控体系 3.1 操作审计流程 3.2 安全监控指标 4 权限模型详解 4.1 用户/组权限模型 4.2 umask配置原理 5 安全最佳实…

性能比拼: Go vs Java

本内容是对知名性能评测博主 Anton Putra Go (Golang) vs Java: Performance Benchmark 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在本视频中,我们将比较 Go 和 Java。 我们将基于 Golang 的 Fiber 框架和 Java 的 Spring Boot 创建几个简单的应用…

ElMessageBox消息弹框(vue3总结)

一 展示各种内容 const checkCheckbox (check: any, formEl: any) > {ElMessageBox({title: "服务协议及隐私权政策",message: h("p", null, [h("span", null, "我已阅读并同意 "),h("span",{style: "color: #477F…

Jupyter Notebook 中切换/使用 conda 虚拟环境的方式(解决jupyter notebook 环境默认在base下面的问题)

使用 nb_conda_kernels 添加所有环境 一键添加所有 conda 环境 conda activate my-conda-env # this is the environment for your project and code conda install ipykernel conda deactivateconda activate base # could be also some other environment conda in…

Tailwind CSS 开发入门:掌握基础语法要点

在前端开发中,Tailwind CSS 以原子化设计和实用类系统,构建精美页面的得力工具,摒弃传统 CSS 繁琐写法。掌握其基础语法是熟练运用它的关键,下面将详细介绍核心基础语法。 一、核心基础语法 1. 颜色类 Tailwind CSS 提供了丰富…

Java八股 深入理解Spring的AOP 面向切面编程 底层 保姆级教程 手写例子

目录 概念 AOP 术语 1. 连接点(Jointpoint): 2. 切入点(Pointcut): 3. 通知(Advice): 4. 方面/切面(Aspect): 5. 引入&#xff…

C++std::map

1. 概述​​ ​​定义​​:std::map 是C标准模板库(STL)中的关联容器,以键值对(key-value pairs)形式存储元素,支持快速查找和有序访问。 ​​- 头文件​​:#include ​​底层实现​…