7000字 Redis 超详细总结笔记 !

Redis 简介 Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key - value 数据库 Redis 与 其他 key - value 缓存产品有以下三个特点: Redis 支持数据持久化,可以将内存中的数据保...

Redis 简介

Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key - value 数据库

Redis 与 其他 key - value 缓存产品有以下三个特点:

  • Redis 支持数据持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

  • Redis 不仅仅支持简单的 key - value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储

  • Redis 支持数据的备份,即 master - slave 模式的数据备份

Redis 优势

  • 性能极高 – Redis 读的速度是 110000 次 /s, 写的速度是 81000 次 /s 。

  • 丰富的数据类型 - Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

  • 原子性 - Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC 指令包起来。

  • 其他特性 - Redis 还支持 publish/subscribe 通知,key 过期等特性。

Redis 数据类型

Redis 支持 5 中数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(sorted set:有序集合)

string

string 是 redis 最基本的数据类型。一个 key 对应一个 value。

string 是二进制安全的。也就是说 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。

string 类型是 redis 最基本的数据类型,string 类型的值最大能存储 512 MB。

理解:string 就像是 java 中的 map 一样,一个 key 对应一个 value

attachments-2023-06-V7QFpfBv6479bef26d288,jpg


127.0.0.1:6379set hello world
OK
127.0.0.1:6379get hello
"world"

hash

Redis hash 是一个键值对(key - value)集合。Redis hash 是一个 string 类型的 key 和 value 的映射表,hash 特别适合用于存储对象。

理解:可以将 hash 看成一个 key - value 的集合。也可以将其想成一个 hash 对应着多个 string。

与 string 区别:string 是 一个 key - value 键值对,而 hash 是多个 key - value 键值对。

attachments-2023-06-O7IgYPW76479bf1133eab,jpg

// hash-key 可以看成是一个键值对集合的名字,在这里分别为其添加了 sub-key1 : value1、
sub-key2 : value2、sub-key3 : value3 这三个键值对
127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 1
127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 1
127.0.0.1:6379> hset hash-key sub-key3 value3
(integer) 1
// 获取 hash-key 这个 hash 里面的所有键值对
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"
3) "sub-key2"
4) "value2"
5) "sub-key3"
6) "value3"
// 删除 hash-key 这个 hash 里面的 sub-key2 键值对
127.0.0.1:6379> hdel hash-key sub-key2
(integer) 1
127.0.0.1:6379> hget hash-key sub-key2
(nil)
127.0.0.1:6379> hget hash-key sub-key1
"value1"
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"
3) "sub-key3"
4) "value3"

list

Redis 列表是简单的字符串列表,按照插入顺序排序。我们可以网列表的左边或者右边添加元素。

attachments-2023-06-hFkdLTAz6479bf71d1098,jpg

127.0.0.1:6379rpush list-key v1
(integer) 1
127.0.0.1:6379rpush list-key v2
(integer) 2
127.0.0.1:6379rpush list-key v1
(integer) 3
127.0.0.1:6379lrange list-key 0 -1
1) "v1"
2) "v2"
3) "v1"
127.0.0.1:6379lindex list-key 1
"v2"
127.0.0.1:6379lpop list
(nil)
127.0.0.1:6379lpop list-key
"v1"
127.0.0.1:6379lrange list-key 0 -1
1) "v2"
2) "v1"

我们可以看出 list 就是一个简单的字符串集合,和 Java 中的 list 相差不大,区别就是这里的 list 存放的是字符串。list 内的元素是可重复的。

set

redis 的 set 是字符串类型的无序集合。集合是通过哈希表实现的,因此添加、删除、查找的复杂度都是 O(1)

attachments-2023-06-bC0SNhp06479bf9a27d31,jpg

127.0.0.1:6379sadd k1 v1
(integer) 1
127.0.0.1:6379sadd k1 v2
(integer) 1
127.0.0.1:6379sadd k1 v3
(integer) 1
127.0.0.1:6379sadd k1 v1
(integer) 0
127.0.0.1:6379smembers k1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379>
127.0.0.1:6379sismember k1 k4
(integer) 0
127.0.0.1:6379sismember k1 v1
(integer) 1
127.0.0.1:6379srem k1 v2
(integer) 1
127.0.0.1:6379srem k1 v2
(integer) 0
127.0.0.1:6379smembers k1
1) "v3"
2) "v1"

redis 的 set 与 java 中的 set 还是有点区别的。

redis 的 set 是一个 key 对应着 多个字符串类型的 value,也是一个字符串类型的集合,但是和 redis 的 list 不同的是 set 中的字符串集合元素不能重复,但是 list 可以。

Zset

redis zset 和 set 一样都是 字符串类型元素的集合,并且集合内的元素不能重复。

不同的是,zset 每个元素都会关联一个 double 类型的分数。redis 通过分数来为集合中的成员进行从小到大的排序。

zset 的元素是唯一的,但是分数(score)却可以重复。

attachments-2023-06-jrmkuUuT6479bfbeb7296,jpg

127.0.0.1:6379zadd zset-key 728 member1
(integer) 1
127.0.0.1:6379zadd zset-key 982 member0
(integer) 1
127.0.0.1:6379zadd zset-key 982 member0
(integer) 0
127.0.0.1:6379zrange zset-key 0 -1 withscores
1) "member1"
2) "728"
3) "member0"
4) "982"
127.0.0.1:6379zrangebyscore zset-key 0 800 withscores
1) "member1"
2) "728"
127.0.0.1:6379zrem zset-key member1
(integer) 1
127.0.0.1:6379zrem zset-key member1
(integer) 0
127.0.0.1:6379zrange zset-key 0 -1 withscores
1) "member0"
2) "982"

zset 是按照分数的大小来排序的。

发布订阅

一般不用 Redis 做消息发布订阅。

简介

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。

Redis 客户端可以订阅任意数量的频道。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

attachments-2023-06-91j2m92G6479c022e50db,jpg

  • 发表于 2023-06-02 18:05
  • 阅读 ( 30 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章