Redis教程文档

【黑马Redis快速入门,一套搞定Redis,常见数据结构及命令,包含jedis应用与优化、springdataRedis应用与优化】 https://www.bilibili.com/video/BV1rV411M7eU/?p=2&share_source=copy_web&vd_source=ea0cf64e8dac6f0193a7e28187a0fccb

 

快速入门

认识NoSql

 关系型数据库非关系型数据库
数据结构结构化非结构化
数据关联关系型非关系型
查询方式sql查询非sql查询
事务特性满足ACID特性BASE
存储方式磁盘内存
扩展性垂直水平
使用场景数据结构固定
业务对数据安全性,一致性有较高的要求
数据结构不固定
对数据一致性,安全性要求不高
对性能有较高要求

 

认识Redis

REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

特性:

 

Redis安装

Redis - The Real-time Data Platform

Redis 命令参考 — Redis 命令参考

教程基于Debain12进行部署

  1. 安装依赖

  2. 安装redis程序

    将安装最新版本的 Redis 开源,以及 redis-tools 包(redis-cli 等)。 如果需要安装早期版本,请运行以下命令以列出可用版本:

    Redis 应该在初始安装后自动启动,并在启动时自动启动。 如果您的系统上不是这种情况,请运行以下命令:

     

访问Redis

Redis自带了指令客户端Redis-cil

potions常用参数

commonds即redis操作指令

image-20251102225021644

 

图形化界面客户端

 

 

Redis常见命令

数据结构介绍

Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样

 

通用命令

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

指令描述
keys pattern查找所有符合给定模式(pattern)的key(生产环境中不建议使用此操作进行模糊查找,查找时间过长,会阻塞主线程,导致服务不可用)
exists key检查给定key是否存在
type key返回key所储存的值的类型
del key该命令用于在key存在是删除key

 

string字符串操作命令

语句描述
SET key value设置指定Key的值
GET key获取指定Key的值
SETEX key seconds value设置指定Key的值,并设置过期时间seconds秒
SETEX key value只在key不存在时,设置key的值

image-20250701094758171

 

hash哈希操作命令

Redishash是一个string类型的field和value的映射表,hash特别适合用于存储对象,常用命令:

指令描述
HSET key field value将哈希表key中的字段field的值设为value
HGET key field获取存储在哈希表中指定字段的值
HDEL key field删除存储在哈希表中的指定字段
HKEYS key获取哈希表中所有字段
HVALS key获取哈希表中所有值

image-20250701095305801

 

list列表操作命令

指令 
LPUSH key value1 [value2]将一个或多个值插入到列表头部
LRANGE key start stop获取列表指定范围内的元素
RPOP key移除并获取列表的最后一个元素
LLEN key获取列表长度

image-20250701112535057

 

set集合操作命令

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

指令描述
sadd key member1 [member2]向集合添加一个或多个成员
smembers key返回集合中的所有成员
scard key获取集合的成员数
sinter key1 [key2]返回给定所有集合的交集
sunion key1 [key2]返回所有给定集合的并集
srem key member1 [member2]删除集合中一个或多个成员

image-20250701113150331

 

 

sorted set有序集合操作命令

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

语法描述
zadd key score1 member1 [score2 member2]向有序集合添加一个或多个成员
zrange key start stop [withscores]通过索引区间返回有序集合中指定区间内的成员
zincrby key increment member有序集合中对指定成员的分数加上增量increment
zrem key member [member ]移除有序集合中的一个或多个成员

image-20250701113548914

Redis的Java客户端

客户端描述官方推荐
jedis以Redis命令作为方法名称,学习成本低,简单实用。但是Jedis实例是线程不安全的,多线程环境下需要基于连接池来使用
lettuceLettuce是基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式。
RedissonRedisson是一个基于Redis实现的分布式、可伸缩的Java数据结构集合。包含了诸如Map、Queue、Lock、Semaphore、AtomicLong等强大功能
java-redis-client  
vertx-redis-client  

 

Jedis使用

image-20251102232533149

image-20251102232551758

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此推荐使用Jedis连接池代替Jedis的直连方式

image-20251102233216857

 

SpringDataRedis

介绍

Spring Data Redis 中文文档

Spring Data Redis

SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis。

 

SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封 装到了不同的类型中

 

使用

  1. 引入依赖

  2. 配置文件

  3. 注入RedisTemplate

  4. 编写测试

     

序列化方式

RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把object序列化为字节形式,默认是采用JDK序列化,得到的结果是这样的:

image-20251103213016915

缺点:

修改默认的序列化器

 

扩展

特性RedisSerializer.string()new StringRedisSerializer()
Spring 版本2.0+ 推荐所有版本
代码风格函数式,更现代传统 OOP
性能相同相同
功能相同相同
推荐度⭐⭐⭐⭐⭐⭐⭐⭐⭐

❓ 常见问题

Q: 两种方式可以混用吗? A: 完全可以,它们在功能上是等价的。

Q: 哪种性能更好? A: 性能完全相同,只是语法糖的区别。

Q: 为什么要使用 RedisSerializer.string() A: 主要是代码风格更现代,与其他的 RedisSerializer.json() 等方法保持一致性。

✅ 结论

 

尽管JSON的序列化方式可以满足我们的需求,但依然存在一些问题,为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销。

image-20251103224141969

为了节省内存空间,我们并不会使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储Java对象时,手动完成对象的序列化和反序列化。

Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式。省去了我们自定义RedisTemplate的过程:

image-20251103224455761