Redis操作常用API

说明: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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云栖实录 | 开源大数据全面升级:Native 核心引擎、Serverless 化、湖仓架构引领云上大数据发展

本文根据2024云栖大会实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a; 王 峰 | 阿里云智能集团研究员、开源大数据平台负责人 李 钰&#xff5c;阿里云智能集团资深技术专家 范 振&#xff5c;阿里云智能集团高级技术专家 李劲松&#xff5c;阿里云…

【机器学习基础】Transformer学习

Transformer学习 一、输入1. Word Embedding2. Positional EncodingPositional Encoding的计算方法二、自注意力机制二、Add & Norm层1. Add 代表残差连接(Residual Connection)2. Norm= Normalization归一化三、FeedForward层其他资料一、输入 第一步:获取输入句子的每…

基于微信小程序的四六级词汇+ssm(lw+演示+源码+运行)

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;四六级词汇小程序被用户普遍使用&#xff0c;为方便用户能…

银河麒麟V10 SP1如何进入救援模式?

银河麒麟V10 SP1如何进入救援模式&#xff1f; 1、准备工作2、进入BIOS/UEFI进入救援模式注意事项 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在使用银河麒麟高级服务器操作系统V10 SP1时&#xff0c;如果遇到系统无法正常启动或需要进…

搭建基于H.265编码的RTSP推流云服务器

一、前言 网上能够找到的RTSP流地址&#xff0c;均是基于H.264编码的RTSP流地址&#xff0c;无法测试应用是否可以播放H265实时流为此&#xff0c;搭建本地的把H.264转码成H.265的RTSP服务器&#xff0c;不管是通过VLC搭建本地RTSP服务器&#xff0c;还是通过FFmpeg搭建本地RT…

关于HTML 案例_个人简历展示01

案例效果展示 代码 <!DOCTYPE html> <lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>个人简历信息</title> </he…

win11/win10/windows下快安装并使用git

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Git 的特点&#xff1f;二、GIT安装方法1.打开GIT官网2.下载git安装程序整个安装过程基本上直接用默认选项就可以 总结 前言 提示&#xff1a;GIT介绍 GI…

【环境配置】科研小白Windows下安装Git

2024年小白使用Win10安装Git 2.46.2教程&#xff1a; 1 下载安装包 访问下载地址 Git - Downloading Package (git-scm.com) 下载之后打开文件 2 安装过程 点击Next 2.1 选择安装路径 2.2 选择勾选必要组件 2.3 一路Next 这一步直接Next即可 继续点击Next 继续点击Ne…

Python、C++、java阶乘算法

最近&#xff0c;我除了Python还学了C和Java&#xff0c;然后在网上看到编程考题&#xff1a;阶乘。 首先&#xff0c;我们先理解什么是阶乘。 阶乘是数学中的一个概念&#xff0c;通常定义为从1乘到指定的数。具体来说&#xff0c;一个正整数的阶乘&#xff08;记作n!&#…

Pikachu-Cross-Site Scripting-xss盲打

xss盲打&#xff0c;不是一种漏洞类型&#xff0c;而是一个攻击场景&#xff1b;在前端、或者在当前页面是看不到攻击结果&#xff1b;而是在后端、在别的页面才看到结果。 登陆后台&#xff0c;查看结果&#xff1b;

神经网络激活函数之前的加权求和 | 矩阵相乘运算法则(清晰版)

1. 神经网络中进行加权求和为什么要将w矩阵进行转置&#xff1f; 下面以一个简单的神经网络作为举例&#xff1a; 我们要将输入特征与W进行加权求和&#xff0c;想要的是下面这种结果&#xff1a; 但是根据矩阵相乘的运算法则&#xff1a; 矩阵A的列数&#xff08;column&am…

CTF刷题buuctf

[WUSTCTF2020]颜值成绩查询 拿到相关题目&#xff0c;其实根据功能和参数分析。需要传入一个学号然后进行针对于对应的学号进行一个查询&#xff0c;很可能就会存在sql注入。 其实这道题最难的点&#xff0c;在于过滤了空格&#xff0c;因此我们使用 /**/来过滤空格的限制。…

低功耗4G模组Air780E之串口通信篇

你对低功耗4G模组Air780E有多少了解&#xff1f; 今天我们来讲解低功耗4G模组Air780E的串口通信的基本用法&#xff0c;小伙伴们&#xff0c;学起来吧&#xff01; 一、硬件准备 780E开发板一套&#xff0c;包括天线、USB数据线。 USB转TTL工具或线&#xff08;例如ch340、…

【mmengine】配置器(config)(入门)读取与使用

一、 介绍 MMEngine 实现了抽象的配置类&#xff08;Config&#xff09;&#xff0c;为用户提供统一的配置访问接口。 配置类能够支持不同格式的配置文件&#xff0c;包括 python&#xff0c;json&#xff0c;yaml&#xff0c;用户可以根据需求选择自己偏好的格式。 配置类提供…

一站式大语言模型API调用:快速上手教程

智匠MindCraft是一个强大的AI工具及开发平台&#xff0c;支持多种大语言模型和多模态AI模型。本文将详细介绍如何通过API调用智匠MindCraft中的大语言模型&#xff0c;帮助开发者快速上手。 注册与登录 访问智匠MindCraft官网&#xff0c;注册并登录账号。 进入开发者平台&…

Oracle SQL语句没有过滤条件,究竟是否会走索引??

答案是&#xff1a;可能走索引也可能不走索引&#xff0c;具体要看列的值可不可为null&#xff0c;Oracle不会为所有列的nullable属性都为Y的sql语句走索引。 例子&#xff1a; create table t as select * from dba_objects; CREATE INDEX ix_t_name ON t(object_id, objec…

[VULFOCUS刷题]tomcat-pass-getshell 弱口令

tomcat-pass-getshell 弱口令 启动容器&#xff0c;打开网站 点开manageapp&#xff0c;输入弱口令 tomcat/tomcat 之后在下面上传jsp大马&#xff0c;首先生成一个jsp马 这里我直接使用github别人生成好的 tennc/webshell: This is a webshell open source project (github.…

uniapp 知识点

自定义导航 在page.json navigationstyle":"custom"navigateTo传参 页面传参只能onLoad(option)里面拿 px和upx的关系 在750设计图中&#xff0c;1px1upx 路由 navigateBack返回上一页 重定向 其实就是把当前页面干掉了 公共组件和页面共同点 computed,watc…

java项目实现钉钉异常告警实时监控

最近有个小伙伴问我&#xff0c;我们的项目核心业务的地方总是有异常&#xff0c;虽然有打印日志&#xff0c;但不能立马通知我&#xff1b;所以今天我就教大家如何实现异常报警实时提醒 1.需要有钉钉 自己新建的企业用户 2.建一个群&#xff0c;需要有三人以上&#xff1b;…

AMD发布首个AI小语言模型:6900亿token、推测解码提速3.88倍

AMD发布了自己的首个小语言模型(SLM)&#xff0c;名为“AMD-135M”。相比于越来越庞大的大语言模型(LLM)&#xff0c;它体积小巧&#xff0c;更加灵活&#xff0c;更有针对性&#xff0c;非常适合私密性、专业性很强的企业部署。 AMD-135小模型隶属于Llama家族&#xff0c;有两…