Redis常用命令

释放双眼,带上耳机,听听看~!

redis中的常用命令举例如下,更多命令参考redis命令参考

Redis中存储的数据类型

String:基本的数据类型,二进制安全,可以存储任意类型:如二进制图像
Hash:String元素组成的字典,适合用于存储对象
List:双向列表,按照String元素插入顺序排序(先进后出)
Set:String元素组成的无序集合,通过哈希表实现,不允许重复
SortedSet(zset):通过分数来为集合中的成员进行从小到大的排序

Stirng类型


1
2
3
4
5
6
7
8
9
10
11
1SET key value [EX seconds] [PX milliseconds] [NX|XX]
2GET key
3示例:
4redis> SET key-with-expire-time "hello" EX 10086
5OK
6redis> GET key-with-expire-time
7"hello"
8redis> TTL key-with-expire-time
9(integer) 10069
10
11

Hash类型


1
2
3
4
5
6
7
8
9
10
1HSET hash field value
2HGET hash field
3示例:
4redis> HSET website google "www.google.com"
5(integer) 0
6
7redis> HGET website google
8"www.google.com"
9
10

List类型


1
2
3
4
1LPUSH key value [value …]
2LPOP key
3
4

Set类型


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1 添加单个元素
2redis> SADD bbs "discuz.net"
3(integer) 1
4 添加重复元素
5redis> SADD bbs "discuz.net"
6(integer) 0
7 添加多个元素
8redis> SADD bbs "tianya.cn" "groups.google.com"
9(integer) 2
10
11redis> SMEMBERS bbs
121) "discuz.net"
132) "groups.google.com"
143) "tianya.cn"
15
16

ZSet(SortedSet)类型


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1# 添加单个元素
2redis> ZADD page_rank 10 google.com
3(integer) 1
4# 添加多个元素
5redis> ZADD page_rank 9 baidu.com 8 bing.com
6(integer) 2
7redis> ZRANGE page_rank 0 -1 WITHSCORES
81) "bing.com"
92) "8"
103) "baidu.com"
114) "9"
125) "google.com"
136) "10"
14# 添加已存在元素,且 score 值不变
15redis> ZADD page_rank 10 google.com
16(integer) 0
17redis> ZRANGE page_rank 0 -1 WITHSCORES  # 没有改变
181) "bing.com"
192) "8"
203) "baidu.com"
214) "9"
225) "google.com"
236) "10"
24# 添加已存在元素,但是改变 score 值
25redis> ZADD page_rank 6 bing.com
26(integer) 0
27redis> ZRANGE page_rank 0 -1 WITHSCORES  # bing.com 元素的 score 值被改变
281) "bing.com"
292) "6"
303) "baidu.com"
314) "9"
325) "google.com"
336) "10"
34
35

**其他命令参考:**redis命令大全
KEYS pattern:查找所有符合给定模式pattern的key
KEYS指令一次性返回所有匹配的key,建的数量过大会使服务卡顿
SCAN cursor [MARTCH pattern] [COUNT count]

基于游标(cursor)的迭代器,需要基于上一次的游标延续之前的迭代过程
以0作为游标开始一次新的迭代,知道命令返回游标0完成一次遍历
不保证每次执行都返回某个给定数量的元素,支持模糊查询
一次返回的数量不可控,只能是大概率符合count参数

如果通过Redis实现分布式锁
SETNX key value:如果key不存在,则创建并赋值

返回值:设置成功,返回1;设置失败,返回0

如何解决SETNX长期有效的问题

使用expire 设置key的生存时间,当key过期时(生存时间为0),会被自动删除
Redis常用命令
将两者集合起来
SET key value [EX seconds][PX milliseconds] [NX|XX]
Ex seconds :设置的过期时间为seconds秒
PX milliseconds :设置的过期时间为millisecond 毫秒
NX :只在键不存在时,才对键进行设置操作
XX :只在键已经存在是,才对键进行设置操作
SET :操作成功完成是,返回OK,否则返回nil
Redis常用命令

大量的key同时过期的注意事项
集中过期,由于清除大量的key很耗时,会出现短暂卡顿的现象

解决方案:在设置key的过期时间的时候,给每个key加上随机值,以便让他们分散些

如何使用Redis做异步队列
使用List作为队列,rpush生产消息,lpop消费消息

缺点:没有等待队列里有值就直接消费
弥补:可以通过在应用层引入Sleep机制去调用lpop重试
Redis常用命令
BLPOP key [key…] timeout :阻塞直到队列有消息或者超时
缺点:只能供一个消费者消费

pub/sub:主题订阅者模式

发送者(pub)发送消息,订阅者(sub)接收消息
订阅者可以订阅任意数量的频道
缺点:消息的发布是无状态的,无法保证可达

Redis如何做持久化
RDB(快照)持久化:保存某个时间点的全量数据快照
1、手动触发持久化

SAVE(不经常使用):阻塞Redis的服务器进程,直到RDB文件被创建完毕
BGSAVE:Fork出一个子进程来创建RDB文件,不阻塞服务器进程

2、自动触发持久化

根据redis.conf配置里的Save m n定时触发(用的是BGSAVE)
主从复制时,主节点自动触发
执行Debug Reload时
执行Shutdown且没有开启AOF持久化

快照的缺点:

内存数据的全量同步,数据量大会由于I/O而严重影响性能
可能会因为Redis挂掉而丢失从当前至最近一次快照期间的数据

优点:

全量数据快照,文件下,恢复快

AOF(Append-only-File)持久化:保存写状态

记录下除了查询以外的所有变更数据库状态的指令
以append的形式追加保存到AOF文件中(增量)
AOF的优点:可读性高,适合保存增量数据,数据不易丢失
AOF的缺点:文件体积大,恢复时间长

给TA打赏
共{{data.count}}人
人已打赏
安全经验

如何避免Adsense违规封号

2021-10-11 16:36:11

安全经验

安全咨询服务

2022-1-12 14:11:49

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索