SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis

🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍

文章目录

        1.0 Redis 概述

        1.1 Redis 下载与安装

        2.0 Redis 数据类型

        3.0 Redis 常见五种类型的命令

        3.1 字符串操作命令

        3.2 哈希操作命令

        3.3 列表操作命令

        3.4 集合操作命令

        3.5 有序集合操作命名

        3.6 通用命令

        4.0 在 Java 中操作 Redis

        4.1 Spring Data Redis 环境搭建

        4.2 操作字符串类型的数据

        4.3 操作哈希类型的数据

        4.4 操作列表类型的数据

        4.5 操作集合类型的数据

        4.6 操作有序集合类型的数据


        1.0 Redis 概述

        Redis 是一个基于内存的 key-value 结构数据库。基于内存存储,读写性能高。适合存储热点数据,以便大量用户访问时可以快速得到响应。

        1.1 Redis 下载与安装

        Redis 官网:Redis - The Real-time Data Platform

        Redis 的 Windows 版属于绿色软件。直接解压即可使用,解压目录结构如下:

        1)redis.windows.conf:配置文件,用来配置 Redis 服务器的各种参数和选项。

比如:

        port:指定 Redis 服务器监听的端口号,默认为 6379。

        bind:指定Redis服务器监听的IP地址。

        requirepass:设置访问Redis数据库需要的认证密码。

        maxmemory:设置Redis数据库使用的最大内存限制。

        maxclients:设置Redis允许的最大客户端连接数。

        logfile:指定Redis日志文件的位置。

        dir:指定Redis持久化数据文件的存储目录。

        pidfile:指定Redis服务器进程的PID文件位置。

        2)redis-server.exe:Redis 服务端可执行文件,用来启动 Redis 服务端。

        3)redis-cli.exe:Redis 客户端可执行文件,用来启动 Redis 客户端。

        2.0 Redis 数据类型

        Redis 存储的是 key-value 结构的数据,其中 key 是字符串类型,value 有5 种常用的数据类型:字符串 string、哈希 hash、列表 list、集合 set、有序集合 sorted set/zset 。

各种数据类型的特点:

        1)字符串 string:普通字符串,Redis 中最简单的数据类型。

        2)哈希 hash:也叫散列,类似于 Java 中的 HashMap 结构。

        3)列表 list:按照插入顺序,可以有重复元素,类似于 Java 中的 LinkedList 。

        4)集合 set:无序集合,没有重复元素,类似于 Java 中的 HashSet 。

        5)有序集合 zset:集合中每一个元素关联一个分数 score,根据分数升序排序,没有重复元素。

        3.0 Redis 常见五种类型的命令

        字符串操作命令、哈希操作命令、列表操作命令、集合操作命令、有序集合操作命令。

        3.1 字符串操作命令

Redis 字符串类型的常用命令:

        1)SET key value:设置指定 key 的值。

        2)GET key:获取指定 key 的值。

        3)SETEX key seconds value:设置指定 key 的值,并将 key 的过期时间设为 seconds 秒。

        4)SETNX key value:只有在 key 不存在时设置 key 的值。

代码演示:

> set id 1
OK
> get id
1
> setex code 30 123456
OK
> setnx id 2
0

        3.2 哈希操作命令

        Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

Redis 哈希类型的常用命令:

        1)HSET key field value:将哈希表 key 中的字段 field 的值设为 value 。

        2)HGET key field:获取存储在哈希表中指定字段的值。

        3)HDEL key field:删除存储在哈希表中的指定字段。

        4)HKEYS key:获取哈希表中所有字段。

        5)HVALS key:获取哈希表中所有值。

代码演示:

        存储一个 student 对象信息。

设置字段值:

> HSET student name 小板
1
> HSET student age 22
1
> hset student gender 男
1

运行结果:

获取相应字段的值: 

> hget student name
小板
> hget student age
22
> hget student gender
男

        获取字段相对应的值。

获取 student 所有的 field 与 所有的 value:

> hkeys student
name
age
gender
> hvals student
小板
22
男

删除指定的字段:

> hdel student gender
1

运行结果:

        3.3 列表操作命令

        Redis 列表是简单的字符串列表,按照插入顺序排序。

Redis 列表类型的常用命令:

        1)LPUSH key value1 [value2]:将一个或多个值插入到列表头部。

        2)LRANGE key start stop:获取列表指定范围内的元素。

        3)RPOP key:移除并获取列表最后一个元素。

        4)LLEN key:获取列表长度。

代码演示:

在列表中插入多个值:

> lpush mylist a b c d
4

运行结果:

        该插入的方式为:头插数据。

获取指定全部数据:

> lrange mylist 0 -1
d
c
b
a

删除最后一个元素:

> rpop mylist
a

获取列表中的个数:

> llen mylist
3

        3.4 集合操作命令

        Redis set 是 string 类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据。

Redis 集合类型的常用命令:

        1)SADD key member1 [member2]:向集合添加一个或多个成员。

        2)SMEMBERS key:返回集合中的所有成员。

        3)SCARD key:获取集合的成员数。

        4)SINTER key1 [key2]:返回给定所有集合的交集。

        5)SUNION key1 [key2]:返回所有给定所有集合的并集。

        6)SREM key member1 [member2]:删除集合中一个或多个成员。

代码演示:

向集合中添加元素:

> sadd set1 a b c d
4
> sadd set2 a b x y
4

        需要注意的是,添加顺序不等于存储之后的顺序。这里就可以体现出了无序性。

获取所有的成员:

> smembers set1
a
d
c
b
> smembers set2
a
x
y
b

获取集合中成员的个数:

> scard set1
4
> scard set2
4

获取两个集合的交集:

> sinter set1 set2
a
b

获取两个集合的并集:

> sunion set1 set2
a
x
y
d
c
b

        3.5 有序集合操作命名

        Redis 有序集合是 string 类型元素的集合,且不允许有重复成员。每一个元素都会关联一个 double 类型的分数。

Redis 有序集合类型的常用命令:

        1)ZADD key score1 member1 [score2 member2]:向有序集合添加一个或多个成员。

        2)ZRANGE key start stop[WITHSCORE]:通过索引区间返回有序集合中指定区间的成员。

        3)ZINCRBY key increment member:有序集合中对指定成员的分数加上增量 increment 。

        4)ZREM key member1 [member2]:移除有序集合中的一个或多个成员。

代码演示:

向有序集合中添加成员:

> zadd zset 10 a 11 b 12 c
3

运行结果:

获取全部成员:

> zrange zset 0 -1
a
b
c

也可以带上分数:

> zrange zset 0 -1 WITHSCORES
a
10
b
11
c
12

对 zet 集合中的指定成员的 score 增加:

> zincrby zset 5 a
15

运行结果:

移除集合中指定的成员:

> zrem zset c
1

运行结果:

        3.6 通用命令

        Redis 的通用命令是不分数据类型的,都可以使用命令。

Redis 通用的常用命令:

        1)KEYS pattern:查找所有符合给定模式(pattern)的 key 。

        2)EXISTS key:检查给定 key 是否存在。

        3)TYPE key:返回 key 所存储的值的类型。

        4)DEL key:该命令用于在 key 存在则删除 key 。

代码演示:

KEYS *,匹配所有的 key:

> keys *
id
STUDENT
set2
zset
set1
student
mylist
list

检查是否存在 set1:

> exists set1
1
> exists set3
0

        存在则返回 1;不存在则返回 0 。

判断类型:

> type set1
set
> type list
list
> type student
hash
> type id
string
> type zset
zset

删除 list:

> del list
1
> keys *
id
STUDENT
set2
zset
set1
student
mylist

        4.0 在 Java 中操作 Redis

        Redis 的 Java 客户端很多,常用的几种:Jedis、Lettuce、Spring Data Redis 。在 Spring Data Redis 是 Spring 的一部分,对 Redis 底层开发进行了高度封装,在 Spring 项目中,可以使用 Spring Data Redis 来简化操作。

        4.1 Spring Data Redis 环境搭建

        1)导入 Spring Data Redis 的 maven 坐标。

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

        2)配置 Redis 数据源。

  redis:
    host: localhost
    port: 6379
    password: 123456
    database: 0

        host:主机号、port:端口号、password:密码、database:数据库。

        这里的数据库指定是 Redis 中的数据库,一共有 16 个数据库,默认会自动选择 0 号的数据库。

        3)编写配置类,创建 RedisTemplate 对象。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        //创建 redis 模板对象
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置 redis 的连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置 redis key 的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

        4)通过 RedisTemplate 对象操作 Redis 。

        完成以上的步骤,就可以通过 RedisTemplate 对象来获取五种类型的操作对象了。

代码演示:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;

@SpringBootTest
public class test {

    @Autowired
    RedisTemplate redisTemplate;

    @Test
    public void test(){
        System.out.println(redisTemplate);

        //获取到 string 类型的操作对象
        ValueOperations valueOperations = redisTemplate.opsForValue();

        //获取到 hash 类型的操作对象
        HashOperations hashOperations = redisTemplate.opsForHash();
        
        //获取到 list 类型的操作对象
        ListOperations listOperations = redisTemplate.opsForList();
        
        //获取到 set 类型的操作对象
        SetOperations setOperations = redisTemplate.opsForSet();
        
        //获取到有序集合 zset 类型的操作对象
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

    }
}

        4.2 操作字符串类型的数据

常见的方法:

        1)set(key,value):设置键值对 k v 。

        2)set(key,value,timeout,unit):设置有效时间的键值对。

        3)get(key):根据键来获取值。

        4)setIfAbsent(key,value):设置一个键值对,只有在 key 不存在时设置 key 的值。

代码演示:

    @Test
    public void test1(){
        //先获取到操作字符串类型的对象
        ValueOperations valueOperations = redisTemplate.opsForValue();
        //设置键值对 k v
        valueOperations.set("cls","1");

        //根据键来获取值
        String cls = (String) valueOperations.get("cls");

        //设置有效时间的键值对,设置一个有效时间为 3 分钟的键值对
        valueOperations.set("code","123456",3, TimeUnit.MINUTES);

        //设置一个键值对,只有在 key 不存在时设置 key 的值
        valueOperations.setIfAbsent("bee","2");
        //因为已经存在bee键,所以值依然是3
        valueOperations.setIfAbsent("bee","3");

    }

运行结果:

        4.3 操作哈希类型的数据

常见的方法:

        1)put(key,field,value):新增数据。

        2)get(key,field):获取数据。

        3)keys(key):获取 key 中的全部字段。

        4)values(key):获取 key 中的全部值。

        5)delete(key,field):删除 key 中 field 的字段。

代码演示:

    @Test
    public void test2(){

        //先获取到操作哈希的对象
        HashOperations hashOperations = redisTemplate.opsForHash();
        //新增数据
        hashOperations.put("student","id","1");
        hashOperations.put("student","name","小扳手");
        hashOperations.put("student","age","22");

        //根据字段来获取值
        String id = (String) hashOperations.get("student", "id");
        String name = (String) hashOperations.get("student", "name");
        System.out.println(id + " " + name);

        //获取student中的全部键
        Set student = hashOperations.keys("student");
        System.out.println(student);

        //获取student中的全部值
        List student1 = hashOperations.values("student");
        System.out.println(student1);

        //删除指定的字段
        hashOperations.delete("student","age");
    }

运行结果:

        4.4 操作列表类型的数据

常见的方法:

        1)leftPushAll(key,values):批量增加数据。

        2)leftPush(key,value):新增数据。

        3)range(key,start,end):获取指定范围的数据。

        4)rightPop(key):删除最后一个数据。

        5)size(key):获取列表中的数据个数。

代码演示:

    @Test
    public void test3(){
        ListOperations listOperations = redisTemplate.opsForList();

        //批量增加数据
        listOperations.leftPushAll("mylist","1","2","3");
        //新增单个数据
        listOperations.leftPush("mylist","4");

        //获取范围内的数据
        List mylist = listOperations.range("mylist", 0, -1);
        System.out.println(mylist);

        //删除最后一个数据
        String date = (String) listOperations.rightPop("mylist");
        System.out.println(date);

        //获取列表中的数据个数
        Long len = listOperations.size("mylist");
        System.out.println(len);
    }

运行结果:

        4.5 操作集合类型的数据

常见的方法:

        1)add(key,values):新增单个数据或者批量新增数据。

        2)members(key):获取 Key 中的全部成员。

        3)size(key):获取 key 中的成员个数。

        4)intersect(key1,key2):获取两个集合中的交集。

        5)union(key1,key2):获取两个集合中的并集。

        6)remove(key,values):删除 key 中指定的 value ,可以是一个 value 也可以是多个 value 。

代码如下:

    @Test
    public void test4(){
        SetOperations setOperations = redisTemplate.opsForSet();
        
        //批量新增数据
        setOperations.add("set1","a","b","c");
        setOperations.add("set2","a","x","y");
        
        //获取key中的成员
        Set member = setOperations.members("set1");
        System.out.println(member);
        
        //获取key中的成员个数
        Long len = setOperations.size("set2");
        System.out.println(len);
        
        //两个集合的交集
        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);
        
        //获取两个集合的并集
        Set union = setOperations.union("set1", "set2");
        System.out.println(union);
        
        //删除成员
        setOperations.remove("set1","c");

    }

运行结果:

        4.6 操作有序集合类型的数据

常见的方法:

        1)add(key,value,score):新增数据。

        2)range(key,start,end):获取指定范围的数据。

        3)incrementScore(key,value,delta):给指定的数据的分数增加 dalta 。

        4)remove(key,values):删除数据。可以删除单个数据,也可以批量删除数据。

代码演示:

    @Test
    public void test5(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //新增数据
        zSetOperations.add("z","a",10);
        zSetOperations.add("z","b",15);
        zSetOperations.add("z","c",20);
        
        //获取指定范围的数据
        Set z = zSetOperations.range("z", 0, -1);
        System.out.println(z);
        
        //给指定的数据增加分数
        zSetOperations.incrementScore("z","a",10);

        //删除数据
        zSetOperations.remove("z","c");
    }

运行结果:

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

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

相关文章

【面试干货】 B 树与 B+ 树的区别

【面试干货】 B 树与 B 树的区别 1、B 树2、 B 树3、 区别与优缺点比较4、 总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在数据库系统中&#xff0c;B 树和 B 树是常见的索引结构&#xff0c;它们在存储和组织数据方面有着不同的设计…

树莓派4B 零起点(三) 树莓派 VNC 远程桌面配置(1)

目录 一、启用树莓派4B的 VNC 服务 二、在PC的操作系统上安装VNC客户端 1、下载安装 RealVNC 2、下载安装 TigerVNC 三、登录VNC远程桌面 1、通过使用 ifconfig 查看树莓派的 IP 地址 2、启动 TigerVNC 客户端&#xff08;Windows版本演示&#xff09; 在前两章的基础下…

【C++修行之道】类和对象(六)再谈构造函数(初始化列表)| explicit关键字 | static成员 | 友元|匿名对象|拷贝时一些编译器优化

目录 一、再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1. 所有的成员,既可以在初始化列表初始化,也可以在函数体内初始化 2. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) 3. 类中包含以下成员&#xff0c;必须放在初始化列表位置进行初始化&…

SpringBoot个人网盘系统-计算机毕业设计源码92922

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势或改善自身的缺点&#xff0c;互联网的发展文件管理带来了福音。个人网盘系统是以实际运用为开发背景&#xff0c;运用软件工程原理和…

分析示例 | Simufact焊接工艺仿真变形精确预测汽车结构

导语 焊接是汽车制造过程中一个关键环节&#xff0c;白车身、发动机、底盘和变速箱等都离不开焊接工艺的应用&#xff0c;主要涉及气保焊、电阻点焊、激光焊、电子束焊等多种焊接工艺。由于汽车车型众多、成形结构复杂、汽车制造质量、效率、成本等方面的综合要求。如何高效、…

WDF驱动开发-PNP和电源管理(三)

对于PNP设备来说&#xff0c;理解它们的启动和删除顺序&#xff0c;以及意外移除顺序非常重要&#xff0c;在早期&#xff0c;经常有拔插U盘导致windows重启的例子&#xff0c;这就是意外移除带来的问题。 功能或Filter驱动程序的启动顺序 下图显示了框架调用 WDF (KMDF 和 U…

中国蚁剑 安装教程 2024年5月

2024/5/11 中国蚁剑 安装教程 一、下载中国蚁剑的加载器和核心源码&#xff08;两个都要用到&#xff09; github官方下载地址&#xff1a;https://github.com/AntSwordProject/ 参考文档&#xff1a;antSword/README_CN.md at master AntSwordProject/antSword GitHub 核…

用咖啡来理解springboot3的自动配置机制

大家好&#xff0c;这里是教授.F 目录 前提知识&#xff1a; 场景引入&#xff1a; 1.Starter依赖&#xff1a; 2.默认配置&#xff1a; 3.自定义配置&#xff1a; 4.条件化配置&#xff1a; 5.自动装配&#xff1a; 具体过程&#xff1a; 扫包路径的配置&#xff1a; 配置…

招聘在家抄书员?小心是骗局!!!

在家抄书员的骗局是一种常见的网络诈骗手段&#xff0c;旨在利用人们想要在家轻松赚钱的心理。这种骗局通常会以招聘兼职抄写员的形式出现&#xff0c;声称只需在家中抄写书籍即可赚取可观的收入。然而&#xff0c;实际上这背后隐藏着诸多陷阱和虚假承诺。 首先&#xff0c;这些…

生成式人工智能 - 本地windows 11 + PyCharm运行stable diffusion流程简述

一、环境说明 硬件:本地电脑windows11、32.0 GB内存、2060的6G的卡。 软件:本地有一个python环境,主要是torch 2.2.2+cu118 二、准备工作 1、下载模型 https://huggingface.co/CompVishttps://huggingface.co/CompVis 进入上面的网址,我这里下载的是这个里面的 …

二分#背包#快排#LCS详解

二分#背包#快排#LCS详解 文章目录 二分#背包#快排#LCS详解1. 二分搜索2. 01背包问题3. 快速排序4. 最长公共子序列 1. 二分搜索 在处理大规模数据集时&#xff0c;查找操作的效率显得尤为重要。二分搜索是一种在有序数组中查找目标值的高效算法&#xff0c;其时间复杂度为O(lo…

超详细 | 使用Nexus搭建私服 (带代码演示)

为什么需要搭建私有仓库&#xff1f; 在企业开发的过程中&#xff0c;不是所有公司都能直接访问外网。在这种情况下&#xff0c;就需要在局域网内找一台有外网访问权限的服务器&#xff0c;搭建Nexus私服仓库&#xff0c;开发人员连接到这台私服上&#xff0c;通过搭建的Nexus…

Golang | Leetcode Golang题解之第142题环形链表II

题目&#xff1a; 题解&#xff1a; func detectCycle(head *ListNode) *ListNode {slow, fast : head, headfor fast ! nil {slow slow.Nextif fast.Next nil {return nil}fast fast.Next.Nextif fast slow {p : headfor p ! slow {p p.Nextslow slow.Next}return p}}r…

调研管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;基础数据管理&#xff0c;教师类型管理&#xff0c;课程类型管理&#xff0c;公告类型管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;论坛&#…

OPPO高级项目经理曹帆受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 OPPO互联网服务系统内容生态中心高级互联网项目经理曹帆先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“加、减、乘、除——激活项目团队效能”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议…

【数学】各种图面积公式的推导

Hello&#xff01;大家好&#xff0c;我是学霸小羊&#xff0c;今天讲讲面积公式。 1.长方形 长方形是 由无数条 长度为长方形的长&#xff08;或宽&#xff09;的线 组成的图形&#xff0c;这些线有多少根&#xff0c;我们不知道&#xff0c;只需要知道他们垒成了一个由高 宽…

如何获取MySQL中表的大小?(官方校正版)

与大多数关系数据库一样&#xff0c;MySQL 提供了有关数据库本身的有用元数据。虽然大多数其他数据库将此信息称为 catalog&#xff0c; 但MySQL 官方文档INFORMATION_SCHEMA 将元数据 称为 tables。 目录 1 列出单个数据库中的单表大小 2 列出所有数据库中的所有表大小 以下…

【第14章】SpringBoot实战篇之多环境配置

文章目录 前言一、通用配置文件1. 定义2. 使用2.1 application.yml2.2 启动类 3. 测试 二、多环境配置文件1.定义1.1 application-local.yml1.2 application-dev.yml1.3 application-test.yml1.4 application-prod.yml 2.使用2.1 application.yml2.2 启动类 3.测试 三、多环境配…

【机器学习】决策树模型(个人笔记)

文章目录 多样性指标基尼杂质指数&#xff08;Gini Impurity Index&#xff09;熵&#xff08;Entropy&#xff09; 决策树的应用 源代码文件请点击此处&#xff01; 多样性指标 基尼杂质指数&#xff08;Gini Impurity Index&#xff09; 若集合中包含 m m m 个元素和 n …

【线性代数】向量空间,子空间,向量空间的基和维数

向量空间 设V为n维向量的集合&#xff0c;如果V非空&#xff0c;且集合V对于向量的加法以及数乘两种运算封闭&#xff0c;那么就称集合V为向量空间 x&#xff0c;y是n维列向量。 x 向量组等价说明可以互相线性表示 向量组等价则生成的向量空间是一样的 子空间 例题18是三位向…