Redis操作常用API

news2024/11/23 4:00:04

说明:Redis应用于java项目中,操作Redis数据可以使用API,相较于命令行更方便。使用前,需先添加依赖。

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

自动装配一个RedisTemplate对象

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

String操作

【方法一】添加数据

添加一条key为username,值为zhangsan的String类型数据

	// 1.添加一个数据
	redisTemplate.opsForValue().set("username", "zhangsan");

在这里插入图片描述

【方法二】添加时限性数据

添加一条key为password,值为123456,有效期为1分钟的String类型数据

	// 2.添加一个有时效性的数据
	redisTemplate.opsForValue().set("password", "123456", 1, TimeUnit.MINUTES);

在这里插入图片描述

【方法三】对数值型的key进行自增/自减

设置一条数据,key为age,初始值为20;后自增10,自减5

	// 3.对一个数据进行加减操作
	redisTemplate.opsForValue().set("age", String.valueOf(20));
	redisTemplate.opsForValue().increment("age", 10);
	redisTemplate.opsForValue().decrement("age", 5);

在这里插入图片描述

【方法四】设置一对值,如果存在就返回true并设置成功,如果不存在就返回false并设置失败

	// 4.设置一对值,如果存在就返回true并设置成功,如果不存在就返回false并设置失败
	Boolean flag = redisTemplate.opsForValue().setIfPresent("username", "zhangsan_fix");
	System.out.println("flag = " + flag);

在这里插入图片描述

设置成功,value被修改成“zhangsan_fix”

在这里插入图片描述

【方法五】如果key存在就存储失败,不存在则存储成功

相当于setnx命令,可用来实现分布式锁;

	// 5.如果key存在就存储失败,不存在则存储成功
	Boolean flagAge = redisTemplate.opsForValue().setIfAbsent("age", "100");
	System.out.println("flagAge = " + flagAge);
	
	Boolean flagNewAge = redisTemplate.opsForValue().setIfAbsent("NewAge", "200");
	System.out.println("flagNewAge = " + flagNewAge);

age之前存入过,故设置失败;NewAge没有存入过,故能设置成功;

在这里插入图片描述

【方法六】存入对象数据

	// 6.存入一个自定义对象
	User user = User.builder().id(1).username("zhangsan").password("123456").build();
	redisTemplate.opsForValue().set("user", JSONUtil.toJsonStr(user));

User对象如下:

import lombok.Builder;
import lombok.Data;
import java.io.Serializable;

@Data
@Builder
public class User implements Serializable {

    private Integer id;

    private String username;

    private String password;
}

在这里插入图片描述

Hash操作

【方法一】添加数据

	// 1.添加一个数据
	redisTemplate.opsForHash().put("user1", "username", "zhangsan");

在这里插入图片描述

【方法二】添加多个数据

	// 2.添加多个数据
	HashMap<String, String> map = new HashMap<>();
	map.put("username", "zhangsan");
	map.put("password", "123456");
	map.put("age", "20");
	redisTemplate.opsForHash().putAll("user2", map);

在这里插入图片描述

【方法三】获取数据

	// 3.获取指定Map中的指定key的值
	Object username = redisTemplate.opsForHash().get("user2", "username");
	System.out.println(username);

在这里插入图片描述

【方法四】获取所有Key列表

// 4.获取所有Key列表
	Set<Object> keys = redisTemplate.opsForHash().keys("user2");
	System.out.println("keys = " + keys);

在这里插入图片描述

【方法五】获取所有Value列表

	// 5.获取所有Value列表
	List<Object> values = redisTemplate.opsForHash().values("user2");
	System.out.println("values = " + values);

在这里插入图片描述

【方法六】获取所有键值对

	// 6.获取所有键值对
	Map<Object, Object> entries = redisTemplate.opsForHash().entries("user2");
	System.out.println("entries = " + entries);

在这里插入图片描述

【方法七】给Hash中的数值型字符进行自增/自减

	// 7.给Hash中的数值型字符进行自增/自减
	Long increment = redisTemplate.opsForHash().increment("user2", "age", 10);
	System.out.println("increment = " + increment);

返回自增/自减后的值;

在这里插入图片描述

【方法八】删除数据

	// 8.删除数据
	redisTemplate.opsForHash().delete("user2", "age");

age已删除

在这里插入图片描述

【方法九】判断某个键是否存在

	// 9.判断某个键是否存在
	Boolean flag = redisTemplate.opsForHash().hasKey("user2", "age");
	System.out.println("flag = " + flag);

在这里插入图片描述

【方法十】获取长度

	// 10.获取长度
	Long size = redisTemplate.opsForHash().size("user2");
	System.out.println("size = " + size);

在这里插入图片描述

List操作

【方法一】添加数据

	// 1.添加数据
	// 第一种方式:直接添加元素
	redisTemplate.opsForList().leftPush("list", "a");
	
	// 第二种方式:添加多个元素
	redisTemplate.opsForList().leftPushAll("list", "b", "c");
	
	// 第三种方式:添加一个List
	List<String> list = new ArrayList<>();
	list.add("d");
	list.add("e");
	redisTemplate.opsForList().leftPushAll("list", list);

可以发现,最先push进去的元素,索引值越大;

在这里插入图片描述

【方法二】修改指定位置元素

	// 2.指定位置插入元素
	redisTemplate.opsForList().set("list",2,"a");

从0开始,将第2位修改成“a”;
在这里插入图片描述

【方法三】查询元素个数

	// 3.查询元素个数
	Long size = redisTemplate.opsForList().size("list");
	System.out.println("size = " + size);

list长度为5;

在这里插入图片描述

【方法四】范围查询元素列表

	// 4.范围查询元素列表
	List<String> range = redisTemplate.opsForList().range("list", 0, 3);
	System.out.println("range = " + range);

可以用这个API实现分页查询;

在这里插入图片描述

【方法五】弹出左边一个元素

	// 5.弹出左边一个元素
	String leftPop = redisTemplate.opsForList().leftPop("list");
	System.out.println("leftPop = " + leftPop);

因为前面都是用leftPush的方式添加元素的,所以最左边的元素就是最后添加的,也就是“e”;

在这里插入图片描述

【方法六】删除元素

	// 6.删除元素
	// count: 0表示删除全部,正数表示从左边开始删除,负数表示从右边开始删除
	redisTemplate.opsForList().remove("list", 1, "b");

上位左边,下为右边;

在这里插入图片描述

Set操作

【方法一】添加元素

	// 1.添加元素
	Long add = redisTemplate.opsForSet().add("set", "a", "b", "c");
	System.out.println("add = " + add);

在这里插入图片描述

【方法二】判断元素是否在

	// 2.判断元素是否在
	Boolean member = redisTemplate.opsForSet().isMember("set", "a");
	System.out.println("member = " + member);

“a”存在于set集合中;

在这里插入图片描述

【方法三】获取set集合

	// 3.获取set集合
	Set<String> set = redisTemplate.opsForSet().members("set");
	System.out.println("set = " + set);

members,成员的意思;

在这里插入图片描述

【方法四】计算两个set的交集

	// 4.计算两个set的交集
	redisTemplate.opsForSet().add("set2", "c", "d", "e");
	Set<String> intersection = redisTemplate.opsForSet().intersect("set", "set2");
	System.out.println("intersection = " + intersection);

set = [a, b, d],set2 = [d, e, f],交集是c

在这里插入图片描述

【方法五】计算两个set的并集

	// 5.计算两个set的并集
	Set<String> union = redisTemplate.opsForSet().union("set", "set2");
	System.out.println("union = " + union);

set = [a, b, d],set2 = [d, e, f],并集是,[a, b, c, d, e]

在这里插入图片描述

【方法六】删除元素

	// 6.删除元素
	redisTemplate.opsForSet().remove("set", "c");

set集合中的c已被删除

在这里插入图片描述

ZSet操作

【方法一】添加数据

	// 1.添加元素
	redisTemplate.opsForZSet().add("zset", "a", 1);
	redisTemplate.opsForZSet().add("zset", "b", 2);
	redisTemplate.opsForZSet().add("zset", "c", 3);
	redisTemplate.opsForZSet().add("zset", "d", 4);
	redisTemplate.opsForZSet().add("zset", "e", 5);
	redisTemplate.opsForZSet().add("zset", "f", 6);

在这里插入图片描述

【方法二】查询数据

	// 2.查询元素
	Set<String> range = redisTemplate.opsForZSet().range("zset", 0, -1);
	System.out.println("range = " + range);

0,-1,表示全部,有点像Python

在这里插入图片描述

【方法三】计算元素个数

	// 3.计算元素个数
	Long size = redisTemplate.opsForZSet().zCard("zset");
	System.out.println("size = " + size);

在这里插入图片描述

【方法四】删除元素

	Long remove = redisTemplate.opsForZSet().remove("zset", "b");
	System.out.println("remove = " + remove);

返回删除的元素个数,元素b已被删除;

在这里插入图片描述

【方法五】查询元素的score值

	// 5.查询元素的score值
	Double score = redisTemplate.opsForZSet().score("zset", "c");
	System.out.println("score = " + score);

在这里插入图片描述

【方法六】增加/减少某元素的score值

	// 6.增加/减少某元素的score值
	redisTemplate.opsForZSet().incrementScore("zset", "a", 10);
	redisTemplate.opsForZSet().incrementScore("zset", "c", -10);

可以用来存储某文章、视频的点赞量、收藏量等数据;

在这里插入图片描述

通用API

除了上面各个类型的API,还有几个通用的API,值得一提;

【方法一】对元素设置过期时间

	// 1.对元素设置过期时间
	redisTemplate.expire("username", 10, TimeUnit.SECONDS);

对username对应的元素设置有效期为10秒钟;

在这里插入图片描述

【方法二】获取某元素的过期时间

	// 2.获取某元素的过期时间
	Long expire = redisTemplate.getExpire("zset");
	System.out.println("expire = " + expire);

-1,表示无期限;

在这里插入图片描述

【方法三】根据RedisKey删除某元素

	// 3.根据RedisKey删除某元素
	redisTemplate.delete("zset");

前面的删除都是删除数据内元素的,这个删除,是删除Redis中任意Key对应的元素的。
在这里插入图片描述

总结

本文介绍了Spring Boot中,RedisTemplate对应操作Redis的API

实例完整代码:https://github.com/HeZhongYing/redis_api_demo

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

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

相关文章

HIKVISION 海康威视对讲服务配置平台弱口令

漏洞描述 杭州海康威视系统技术有限公司对讲服务配置平台存在弱口令 漏洞复现 FOFA "document.write(TITLE_SYSTEM);" POC admin #账号 12345 #密码 登录成功

利用Spring Boot打造新闻推荐解决方案

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

Kotlin基本知识

Kotlin是一种现代的静态类型编程语言&#xff0c;由JetBrains公司在2010年推出&#xff0c;并被Google在2019年宣布为Android开发的首选语言。 超过 50% 的专业 Android 开发者使用 Kotlin 作为主要语言&#xff0c;而只有 30% 使用 Java 作为主要语言。 70% 以 Kotlin 为主要语…

Redis数据库与GO(二):list,set

一、list&#xff08;列表&#xff09; list&#xff08;列表&#xff09;是简单的字符串列表&#xff0c;按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。List本质是个链表&#xff0c; list是一个双向链表&#xff0c;其元素是有序的&#xff0c;元…

【含文档】基于Springboot+Vue的护肤品推荐系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

ctfshow-web入门(信息收集,持续更新中。。)

写在之前:近期打了个比赛,备受打击,入手了vip账号进修,加油! 文章目录 ctfshow-web1查看源代码ctfshow-web2burp抓包ctfshow-web3burp抓包ctfshow-web4访问robots.txtctfshow-web5dirscarch扫描PHPS文件泄露ctfshow-web6dirscarch扫描ctfshow-web7dirscarch扫描ctfshow-w…

力扣 简单 101.对称二叉树

文章目录 题目介绍解题思路 题目介绍 解题思路 在上题【100. 相同的树】的基础上稍加改动,将根节点的左右子树看成左右两个树 递归判断左边的右子树和右边的左子树以及左边的左子树和右边的右子树是否都相同 class Solution {public boolean isSymmetric(TreeNode root) {re…

1.2.2 计算机网络的分层结构(下)

水平视角 YSCS协议&#xff08;压缩传输协议&#xff09; 发送方先压缩然后接收方再解压。 为什么要分层&#xff1f;为什么要制定协议&#xff1f; 计算机网路功能负责->采用分层结构&#xff0c;将诸多功能合理地划分在不同层次->对等层之间制定协议&#xff0c;以…

10.4今日错题解析(软考)

目录 前言系统开发基础——概要设计与详细设计系统开发基础——开发模型 前言 这是用来记录我备考软考设计师的错题的&#xff0c;今天知识点为概要设计与详细设计、开发模型&#xff0c;大部分错题摘自希赛中的题目&#xff0c;但相关解析是原创&#xff0c;有自己的思考&…

SpringBoot3+Vue3开发后台管理系统脚手架

后台管理系统脚手架 介绍 在快速迭代的软件开发世界里&#xff0c;时间就是生产力&#xff0c;效率决定成败。对于构建复杂而庞大的后台系统而言&#xff0c;一个高效、可定制的后台脚手架&#xff08;Backend Scaffold&#xff09;无疑是开发者的得力助手。 脚手架 后台脚…

CSS计数器

CSS 中的计数器类似于变量&#xff0c;可以实现简单的计数功能&#xff0c;并将结果显示在页面上&#xff0c;在早期的网站上应用比较广泛。要实现计数器需要用到以下几个属性&#xff1a; counter-reset&#xff1a;创建或者重置计数器&#xff1b;counter-increment&#xf…

day04笔试练习

1.Fibonacci数列 题目链接&#xff1a;Fibonacci数列_牛客题霸_牛客网 题目思路&#xff1a; 定义 a b c 三个变量 使 c 一直加到比 n 大的最近的斐波那契数 此时比较 c 和 b 哪个数离得最近就好 public static void main(String[] args) {Scanner sc new Scanner(System.in…

选择网络安全模式启动Windows系统,解决PC无法连接网络问题

目录 1、电脑无法连接网络 2、发现C:\Windows\System32\drivers路径下的很多文件不见了 3、使用360安全卫士中的断网急救箱工具修复&#xff0c;也就解决不了问题 4、重启系统&#xff0c;以网络安全模式启动系统&#xff0c;修复系统网络模块&#xff0c;完美解决问题 5、…

《计算机原理与系统结构》学习系列——计算机的算数运算(上)

系列文章目录 目录 ALU行波进位加法器超前进位加法器整数运算加减法乘法无符号数相乘N位乘法数的工作流程N位乘法器改进&#xff1a;硬件资源更快速的乘法 MIPS中的乘法除法 32位除法器流程除法器改进 更快速的除法 MIPS中的除法总结 ALU ALU功能&#xff1a;对a&#xff0c;…

9-贪心算法

参考&#xff1a;代码随想录 题目分类大纲如下&#xff1a; 贪心算法理论基础 什么是贪心&#xff1f; 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪心的套路&#xff08;什么时候用贪心&#xff09; 贪心算法并没有固定的套路&#xff0c;说白了…

huggingface 数据/模型下载

使用huggingface CLI下载数据、模型 1. 介绍2. 使用1&#xff09;下载、安装2&#xff09;设置环境变量3&#xff09;登录 Hugging Face 帐户4&#xff09;模型下载 3. 附&#xff1a;使用 git 下载方法 1. 介绍 huggingface_hub Python包附带了一个名为huggingface CLI的内置…

界星空科技漆包线行业称重系统

万界星空科技为漆包线行业提供的称重系统是其MES制造执行系统解决方案中的一个重要组成部分。以下是对该系统的详细介绍&#xff1a; 一、系统概述 万界星空科技漆包线行业称重系统&#xff0c;是集成在MES系统中的一个功能模块&#xff0c;专门用于漆包线生产过程中的重量检…

《Linux从小白到高手》理论篇:Linux的时间管理运行级别启动过程原理详解

List item 本篇将介绍Linux的时间管理&运行级别相关知识&#xff0c;并将深入介绍Linux的启动过程及原理。 Linux的时间管理 Linux 时钟分为系统时钟&#xff08;System Clock&#xff09;和硬件&#xff08;Real Time Clock&#xff0c;简称 RTC&#xff09;时钟。系统时…

THREE.JS Blinn–Phong反射模型 高光shader

文章目录 参考效果核心全部代码更新&#xff1a; 多点光&#xff08;使用结构体&#xff09;TODO&#xff1a; 新增灯光更新着色器 (threejs也是这么做的 所以动态灯光开销颇大(动态visible不需要重新构建着色器)) 参考 Blinn–Phong reflection model 效果 平滑着色平直着色…

无IDEA不Java:快速掌握Java集成开发环境

IntelliJ IDEA是一种强大的Java集成开发环境&#xff0c;是Java开发人员的首选工具之一。本文将介绍IDEA的基本使用方法和常用功能&#xff0c;以帮助初学者快速上手。 安装和配置 首先&#xff0c;需要下载并安装IntelliJ IDEA。在安装完成后&#xff0c;需要配置JDK&#xff…