Redis常用命令

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

Redis中存储的数据类型

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

Stirng类型

SET key value [EX seconds] [PX milliseconds] [NX|XX]
GET key
示例:
redis> SET key-with-expire-time "hello" EX 10086
OK
redis> GET key-with-expire-time
"hello"
redis> TTL key-with-expire-time
(integer) 10069

Hash类型

HSET hash field value
HGET hash field
示例:
redis> HSET website google "www.google.com"
(integer) 0

redis> HGET website google
"www.google.com"

List类型

LPUSH key value [value …]
LPOP key

Set类型

 添加单个元素
redis> SADD bbs "discuz.net"
(integer) 1
 添加重复元素
redis> SADD bbs "discuz.net"
(integer) 0
 添加多个元素
redis> SADD bbs "tianya.cn" "groups.google.com"
(integer) 2

redis> SMEMBERS bbs
1) "discuz.net"
2) "groups.google.com"
3) "tianya.cn"

ZSet(SortedSet)类型

# 添加单个元素
redis> ZADD page_rank 10 google.com
(integer) 1
# 添加多个元素
redis> ZADD page_rank 9 baidu.com 8 bing.com
(integer) 2
redis> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"
# 添加已存在元素,且 score 值不变
redis> ZADD page_rank 10 google.com
(integer) 0
redis> ZRANGE page_rank 0 -1 WITHSCORES  # 没有改变
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"
# 添加已存在元素,但是改变 score 值
redis> ZADD page_rank 6 bing.com
(integer) 0
redis> ZRANGE page_rank 0 -1 WITHSCORES  # bing.com 元素的 score 值被改变
1) "bing.com"
2) "6"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"

其他命令参考: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),会被自动删除
在这里插入图片描述
将两者集合起来
SET key value [EX seconds][PX milliseconds] [NX|XX]
Ex seconds :设置的过期时间为seconds秒
PX milliseconds :设置的过期时间为millisecond 毫秒
NX :只在键不存在时,才对键进行设置操作
XX :只在键已经存在是,才对键进行设置操作
SET :操作成功完成是,返回OK,否则返回nil
在这里插入图片描述

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

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

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

缺点:没有等待队列里有值就直接消费
弥补:可以通过在应用层引入Sleep机制去调用lpop重试
在这里插入图片描述
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的缺点:文件体积大,恢复时间长

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值