狂神Redis学习笔记(更新完毕)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 一、Redis安装和概述。Redis是什么?Redis(Remote Dictionary Server ),即远程字典服务,Redis是一个开源的key-value存储系统,当下最热门的NoSQL 技术之一。

Redis

一、Redis安装和概述

1.1、概述

Redis是什么?

Redis(Remote Dictionary Server ),即远程字典服务,

Redis是一个开源的key-value存储系统,当下最热门的NoSQL 技术之一。

1.2、安装

1.把redis-6.2.6.tar.gz上传到/opt文件夹
2.查看是否有gcc编译环境 gcc --version
    如果没有则进行安装 yum install gcc
3.解压redis-6.2.6.tar.gz文件 tar -zxvf redis-6.2.6.tar.gz
    解压之后进入到redis-6.2.6文件夹 cd redis-6.2.6
    输入不含参数make命令进行编译 make
    安装redis make install

1.3查看安装目录

1.3.1、默认的目录:/usr/local

1.redis-benchmark:性能测试工具,可以在自己的本子运行看看性能如何

2.redis-check-aof:恢复有问题的AOF文件

3.redis-check-dump:恢复有问题的dump.rdb文件

4.redis-sentinel:Redis集群使用

5.redis-server:Redis服务器启动命令

6.redis-cli:客户端,操作入口

1.3.2、后台启动Redis

1、进入/opt,查看目录,把redis.conf复制到/etc文件名为redis.conf

2、后台设置daemonize no改成yes

3、redis启动 启动命令:redis-server /etc/redis.conf

4、查看服务器进程:ps -ef | grep redis

5、通过客户端链接Redis 命令:redis-cli

6、关闭Redis:

  • shutdown
  • exit
  • kill -9 3837

1.3.3、测试性能

redis-benchmark是一个压力测试工具!

redis-benchmark 命令参数

redis-benchmark [option] [option value]

c883013a71d24fd993336bb5d01d8de4 (2).png

简单测试一下:

# 测试:100个并发连接   100000个请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000

二、Redis键(key)

- keys  * :查看当前库中所有的key

- set key value :向当前库中添加key和value

- exists key :判断某个key是否存在

- type key :查看指定key的数据类型

- del key : 删除指定的key数据

- unlink key:根据value选择非阻塞删除

  紧将keys从keyspace元数据中删除,真正删除会在后续的异步操作

- expire key 10:10秒钟为key设置过期时间

- MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中。

- move name 1 移除当前的key

- PERSIST key 移除 key 的过期时间,key 将持久保持。

- RANDOMKEY 从当前数据库中随机返回一个 key 。

- RENAME key newkey 修改 key 的名称

- TYPE key 返回 key 所储存的值的类型。

- ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期

- select 命令切换数据库

- dbsize:查看当前数据库的key的数量

- flushdb:清空当前库

- flushall:通杀全部库

三、redis字符串(String)

3.1、String

1、String是Redis的基本数据类型,一个keyduiyin

2、String是二进制安全的,可以包含任何数据。比如jpg图片或者序列化对象

3、String中字符串value最多可以是512M

3.2、String的基本操作

set key value 添加键值对 
get <key> 查询对应的键值对
append <key><value> 将给定的<value>追加到原址的末尾
strlen <key> 获取值的长度
setnx <key><value> 只有在key不存在时设置key的值
setex <key><过期时间><value>
    -设置键的同时,设置过期时间,单位秒
incr <key>
    -将key中储存的数字值增1
    -只能对数字值操作,如果为空,新增值为1
decr <key>
    -将key中储存的数字值减1
    -只能对数字操作,如果为空,新增值为-1
incrby/decrby <key><步长> 将Key中储存的数字值增减。自定义步长
mset <key1><value1><key2><value2> 同时设置一个或多个key-value键值对
mget <key1><key2><key3> 同时获取一个或多个value
msetnx <key1><value1><key2><value2>...
    -同时设置一个或多个key-value对,当且仅当所给定的key不存在时
    -原子性,有一个失败则全都失败
getrange <key><起始位置><结束位置>
    -获得值的范围,雷士java中的substring,前包,后包
setrange <key><起始位置><value>
    -用<value>覆写<key>所储存的字符串的值,从<起始位置>开始(索引从0开始)
getset <key><value> 以旧换新,设置了新值的同时获得旧值。

set user:1 {name:zhangsan,age:20} 设置一个user:1对象 值为json字符串来保存一个对象

3.3、简单测试

127.0.0.1:6379> set key1 v1 # 设置值
OK
127.0.0.1:6379> get key1 # 获得值
"v1"
127.0.0.1:6379> EXISTS key1 # 判断key1是否存在
(integer) 1
127.0.0.1:6379> APPEND key1 "hello" # 在key1后面追加一个字符串
(integer) 7
127.0.0.1:6379> get key1 
"v1hello"
127.0.0.1:6379> STRLEN key1 # 获得value的长度
(integer) 7
127.0.0.1:6379> keys * # 获取所有的key
1) "key1"
127.0.0.1:6379> APPEND name "zhangsan" # 追加时如果key不存在,则创建一个新的key
(integer) 8
127.0.0.1:6379> keys *
1) "name"
2) "key1"
127.0.0.1:6379> set key2 "hello,world"
OK
127.0.0.1:6379> GETRANGE key2 0 3 # 截取字符串[0,3]
"hell"
127.0.0.1:6379> GETRANGE key2 0 -1 # 截取全部字符串 和 get key是一样的
"hello,world"
27.0.0.1:6379> mset k1 v1 k2 v2 k3 v3  # 同时设置多个key值
OK
127.0.0.1:6379> keys *
1) "name"
2) "k1"
3) "k3"
4) "key1"
5) "key2"
6) "k2"
127.0.0.1:6379> mget k1 k2 k3 # 同时获取多个key值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 20
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "20"
127.0.0.1:6379> 

redis的操作是原子性的,不会被线程调度机制大段的操作;

String的数据结构为简单的动态字符串。是可以修改字符串,采用预分配冗余空间的方式来减少内存的频繁分配

四、Redis列表(List)

4.1、基本介绍

1、单键多值

  • 简单的字符串列表,按照插入顺序排序。底层是一个双向链表

2、常用命令

lpush/rpush <key><value1><value2><value3>...从左边/右边插入一个或多个值
lpop/rpop <key> 从左边/右边吐出一个值。值在键在,值光键消
rpoppush <key1><key2>从<key1>列表右边吐出来一个值,插到<key2>列表右边
rpoplpush <key1><key2> 移除列表最后一个元素,将其添加到新的列表
lrange <key><start><stop> 按照索引获得元素(从左到右)
lindex <key><index> 按照所给下标获得元素(从左到右)
llne <key> 获取列表的长度 
linsert<key> before | after<value><newvalue> 在<value>的后面插入<newvalue>插入值
lrem<key><n><value>从左边删除n个value(从左到右)
lset<key><index><value>将列表key下标为<index>的值替换成<value>

简单测试

127.0.0.1:6379> LPUSH list one  # 将一个或多个值,插到列表的头部(左)
(integer) 1
127.0.0.1:6379> LPUSH list two
(integer) 2
127.0.0.1:6379> LPUSH list three
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1 # 获取全部的值
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LRANGE list 0 1 # 通过区间获取具体的值
1) "three"
2) "two"
127.0.0.1:6379> LRANGE list 0 0
1) "three"
127.0.0.1:6379> RPUSH list hello # 将一个或多个值,插到列表的头部(右)
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "hello"
127.0.0.1:6379> LPOP list  # 移除list列表的第一个元素
"three"
127.0.0.1:6379> RPOP list  # 移除list列表的最后一个元素
"hello"
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> LINDEX list 1 # 通过下标获得list中的某一个值
"one"
127.0.0.1:6379> LINDEX list 0
"two"
####################################################################
# LLEN 
127.0.0.1:6379> LPUSH list 1
(integer) 1
127.0.0.1:6379> LPUSH list 2
(integer) 2
127.0.0.1:6379> LPUSH list 3
(integer) 3
127.0.0.1:6379> LPUSH list 4
(integer) 4
127.0.0.1:6379> LLEN list # 返回list列表的长度
(integer) 4
####################################################################
# LREM 移除指定的值
127.0.0.1:6379> LRANGE list 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> LREM list 1 1 # 移除list集合中指定个数的value,精确匹配
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> LPUSH list 4
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "4"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379> LREM list 2 4
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "3"
2) "2"

####################################################################
127.0.0.1:6379> LPUSH list one two three four 
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> LTRIM list 1 2 # 通过下标截取指定的长度,list已经被改变了,截断了只剩下截取的元素 
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"

####################################################################
# rpoplpush 移除列表最后一个元素,将其添加到新的列表
127.0.0.1:6379> rpush list "hello"
(integer) 1
127.0.0.1:6379> rpush list "hello1"
(integer) 2
127.0.0.1:6379> rpush list "hello2"
(integer) 3
127.0.0.1:6379> rpush list "hello3"
(integer) 4
127.0.0.1:6379> rpoplpush list list1
"hello3"
127.0.0.1:6379> lrange list1 0 -1
1) "hello3"
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "hello1"
3) "hello2"

####################################################################
# lset<key><index><value>将列表key下标为<index>的值替换成<value>
127.0.0.1:6379> EXISTS list
(integer) 0
127.0.0.1:6379> lset list 0 item # 如果不存在列表,就会报错
(error) ERR no such key
127.0.0.1:6379> lpush list hello
(integer) 1
127.0.0.1:6379> lset list 1 item
(error) ERR index out of range
127.0.0.1:6379> lset list 0 item # 如果存在就会替换当前下标的值
OK
127.0.0.1:6379> LRANGE list 0 0
1) "item"

####################################################################
# linsert<key> before | after <value><newvalue> 在<value>的后面插入<newvalue>插入值
127.0.0.1:6379> LPUSH list 1
(integer) 1
127.0.0.1:6379> LPUSH list 2
(integer) 2
127.0.0.1:6379> LINSERT list after 2 3
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "2"
2) "3"
3) "1"
127.0.0.1:6379> LINSERT list before 1 0
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "2"
2) "3"
3) "0"
4) "1"

五、Redis集合(set)

5.1、简介

  • Redis set 对外提供的功能和List类似是一个列表功能,set可以自动排重
  • Redis set是string类型的无序集合添加、删除、查找的复杂度都是O(1)

5.2、常用命令

sadd <key> <value1> <value2> <value3>将一个或多个member元素加入到集合key中,已经存在的member元素将被忽略
smembers<key> 取出该集合的所有值
sismember <key><value>判断集合<key>是否含有该<value>值,有1,没有0
scard<key> 返回该集合的元素个数
srem<key><value1><value2>...删除集合中的某个元素。
spop<key>随机从该集合中吐出一个值。
srandmember<key><n>随机从该集合中取出n个值,不会从集合中删除
smove <source><distination> value把集合中一个值从一个集合移动到另一个集合
sinter <key1><key2>返回两个集合的交集元素
sunion<key1><key2>返回两个元素的并集元素
sdiff<key1><key2>返回两个集合的差集元素(key1中的,不包含key2中的)

简单测试

127.0.0.1:6379> sadd set "hello" # 向set集合中添加元素
(integer) 1
127.0.0.1:6379> sadd set "chen"
(integer) 1
127.0.0.1:6379> sadd set "world"
(integer) 1
127.0.0.1:6379> SMEMBERS set    # 查看指定set的所有值
1) "world"
2) "chen"
3) "hello"
127.0.0.1:6379> SISMEMBER set hello # 判断某一个元素是否在set中,返回1代表存在,返回0代表不存在
(integer) 1
127.0.0.1:6379> SISMEMBER set world!
(integer) 0
127.0.0.1:6379> SCARD set  # 获取set集合中的元素个数
(integer) 3
127.0.0.1:6379> SREM set world  # 移除set集合中的指定的元素
(integer) 1
127.0.0.1:6379> SCARD set
(integer) 2
127.0.0.1:6379> SMEMBERS set
1) "chen"
2) "hello"
127.0.0.1:6379> SRANDMEMBER set  # 随机抽选出某一个元素[也可以是指定的个数]
"hello"
127.0.0.1:6379> SRANDMEMBER set
"chen"
127.0.0.1:6379> SPOP set # 随机删除一些set集合里的元素
"hello"
127.0.0.1:6379> SADD set hello world chen 
(integer) 3
127.0.0.1:6379> SADD set1 hello
(integer) 1
127.0.0.1:6379> SMOVE set set1 world # 将指定的元素从一个集合移动到另外一个集合中去
(integer) 1
127.0.0.1:6379> SMEMBERS set
1) "chen"
2) "hello"
127.0.0.1:6379> SMEMBERS set1
1) "world"
2) "hello"

# 数字集合类:
# - 差集
# - 交集
# - 并集
127.0.0.1:6379> SADD key1 a
(integer) 1
127.0.0.1:6379> SADD key1 b
(integer) 1
127.0.0.1:6379> SADD key1 c
(integer) 1
127.0.0.1:6379> SADD key2 d
(integer) 1
127.0.0.1:6379> SADD key2 c
(integer) 1
127.0.0.1:6379> SADD key2 e
(integer) 1
127.0.0.1:6379> SDIFF key1 key2  # 差集
1) "b"
2) "a"
127.0.0.1:6379> SINTER key1 key2 # 交集
1) "c"
127.0.0.1:6379> SUNION key1 key2 # 并集
1) "a"
2) "c"
3) "b"
4) "e"
5) "d"

六、Redis 哈希(Hash)

6.1、简介

redis hash 是一个键值对集合,是一个string类型的field和value的映射表,hash特别适合储存对象

6.2、常用命令

hset <key><field><value> 给<key>集合的filed赋值i<value>
hget <key1><filed> 从key1>集合<filed>取出<value>
hmset <key1><field><value1><key2><field><value2>批量设置hash的值
hexists<key1><field> 查看哈希表key中,给定域filed是否存在。
hkeys <key> 列出该hash集合的所有field
hvals <key>列出该hash集合的所有的value
hincrby <key><field><increment>为哈希表key中的域field的值加上增量 1 -1
hsetnx <key><field><value> 将哈希表key中的域field的值设置为value,当且仅当field不存在

6.3、简单测试

127.0.0.1:6379> HSET myhash filed1 value1  # set一个具体的 key-value
(integer) 1
127.0.0.1:6379> HGET myhash filed1 # 获取一个字段值
"value1"
127.0.0.1:6379> HMSET myhash filed1 value2 filed2 value3  # set 多个key-value
OK
127.0.0.1:6379> HMGET myhash filed1 filed2 # 获取多个值
1) "value2"
2) "value3"
127.0.0.1:6379> HGETALL myhash  # 获取全部的数据
1) "filed1" 
2) "value2"
3) "value3"
4) "value4"
5) "filed2"
6) "value3"
127.0.0.1:6379> HDEL myhash filed2 # 删除hash指定的key字段,对应的value值也被删除了
(integer) 1 
127.0.0.1:6379> HGETALL myhash
1) "filed1"
2) "value2"
3) "value3"
4) "value4"
127.0.0.1:6379> HMSET myhash filed1 hello filed2 world
OK
127.0.0.1:6379> HGETALL myhash
1) "filed1"
2) "hello"
3) "filed2"
4) "world"
127.0.0.1:6379> HLEN myhash  # 获取hash表的字段数量
(integer) 2
127.0.0.1:6379> HEXISTS myhash filed1 # 判断某一个字段是否存在,返回值1代表存在,否则是不存在
(integer) 1
127.0.0.1:6379> HEXISTS myhash filed3
(integer) 0
127.0.0.1:6379> HKEYS myhash # 获取所有的filed
1) "filed1"
2) "filed2"
127.0.0.1:6379> HVALS myhash # 获取所有的value  
1) "hello"
2) "world"
127.0.0.1:6379> HSET myhash f 1  # 指定增量
(integer) 1
127.0.0.1:6379> HINCRBY myhash f 1
(integer) 2
127.0.0.1:6379> HINCRBY myhash f -1
(integer) 1

七、Redis有序集合Zset

7.1、简介

Redis 有序集合zset与set 类似,是一个没有重复元素的字符串集合

与set不同的是zset是有序的,访问有序集合的中间元素也很快,因为能够使有序集合作为一个没有重复成员的智能列表

7.2、常用命令

zadd <key><score1><value1><score2><value2> 将一个或多个member元素及其score值加入到有序集key中
zrange <key><start><stop>[WITHSCORES]
返回有序集合key中,下表在<start><stop>之间的元素,带WITHSCORES,可以让分数一起和值返回到结果集。
zrangebyscore key minmax[withscores][limit offset count]
返回有序集合key中,所有score值介于min和max之间(包括min和max)的成员。按score值递增次序排列
zrevrangebyscore key maxmin[withscores][limit offset count] 同上改为从大到小排列
zincrby <key><increment><value> 为元素的score加上增量
zrem <key><value> 删除该集合下的,指定值的元素
zcount <key><min><max> 统计该集合,分数区间内的元素个数
zrank <key><value> 返回该值在集合中的排名,从0开始。

7.3、简单测试

127.0.0.1:6379> ZADD myset 1 one  # 添加一个值
(integer) 1
127.0.0.1:6379> ZADD myset 2 two 3 three # 添加多个值
(integer) 2
127.0.0.1:6379> ZRANGE myset 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> ZADD salary 2500 xiaohong
(integer) 1
127.0.0.1:6379> ZADD salary 5000 zhangsan 
(integer) 1
127.0.0.1:6379> ZADD salary 3000 chen
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf # 显示全部的用户 从小到大
1) "xiaohong"
2) "chen"
3) "zhangsan"
127.0.0.1:6379> ZREVRANGE salary 0 -1 # 显示全部的用户 从大到小 
1) "zhangsan"
2) "xiaohong"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores  # 显示全部用户并且附带成绩
1) "xiaohong"
2) "2500"
3) "chen"
4) "3000"
5) "zhangsan"
6) "5000" 
127.0.0.1:6379> ZREM salary chen # 移除有序集合中的指定元素
(integer) 1
127.0.0.1:6379> ZRANGE salary 0 -1 # 获取有序集合中的个数
1) "xiaohong"
2) "zhangsan"
127.0.0.1:6379> ZADD myset 1 hello 2 world 3 chen
(integer) 3
127.0.0.1:6379> ZCOUNT myset 1 2 # 获取指定区间中的成员数量
(integer) 2
127.0.0.1:6379> ZCOUNT myset 1 3
(integer) 3
127.0.0.1:6379> 

视频地址:https://space.bilibili.com/95256449?from=search&seid=9107089521468224616&spm_id_from=333.337.0.0

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
123 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
5月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
84 1
|
1月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
239 3
|
1月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
30 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
1月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
25 3
|
5月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
84 0
|
5月前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
97 0
|
5月前
|
存储 NoSQL 算法
Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
40 0
|
5月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
64 0
|
5月前
|
消息中间件 负载均衡 NoSQL
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
72 0
下一篇
无影云桌面