欢迎投稿

今日深度:

Redis 常用命令总结,redis常用命令总结

Redis 常用命令总结,redis常用命令总结


  • Redis的使用
    • Redis 介绍
    • Redis 特点
    • Redis 优势
    • Redis 连接
    • Redis 服务
    • 数据结构
      • Key 相关命令
      • 字符串(String)
      • 哈希(Hashes)
      • 列表(List)
      • 集合(Set)
      • 有序集合(Zset)
    • Redis 发布订阅
    • Redis 事务
    • Redis 脚本
    • 其他命令
      • 数据备份与恢复
      • Redis 密码
      • Redis 配置文件 redis.conf

Redis的使用

Redis 介绍

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

在线练习教程:
Check this interactive tutorial that will walk you through the most important features of Redis.

Remote Dictionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。它通常被称为数据结构服务器,存储的数据结构可以是字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

Redis 特点

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-cli -h host -p port -a password
select index 切换 redis 数据库
flushdb 删除当前数据库所有的 key
flushall 删除所有数据
auth password 验证密码
echo message
ping 查看服务是否在运行
quit 退出连接

Redis 服务

info 返回redis 服务信息
Redis 服务器 | 菜鸟教程

数据结构

Key 相关命令

keys pattern 查看符合指定模式的 key
rename key newkey 如果 newkey 已经存在,会覆盖它的值
renamenx key newkey 仅当 newkey 不存在时,将 key 改名为 newkey s
type key 返回 key 所存储的值的类型:none | string | list | set | zset | hash
del key [key ...] 删除成功返回1,多个累加计数。
exists key [key ...] 存在返回1,多个累加计数。
expire key seconds 设置超期
expireat key timestamp
pexpire key milliseconds
pexpireat key milliseconds-timestamp
persist key 持久化 key,移除超期时间
ttl key 以秒为单位返回 key 的剩余过期时间。key 不存在,返回 -2;没有设超期时间,返回 -1。
pttl key 以毫秒为单位返回 key 的剩余过期时间。
randomkey 从当前数据库中随机返回一个 key,数据库为空,返回 nil。
move key db 把 key 移到另一个数据库,如果它也有该 key,move 失败。
incr key key 值自增(值是整数),原子性操作

字符串(String)

set key value [EX seconds] [PX milliseconds] [NX|XX]
get key
mget key [key ...] 获取多个 key 的值
getrange key start end 包含 start 和 end。 0 到 -1 包含所有。
getset key value 设置新值并返回旧值

哈希(Hashes)

Redis hash 是一个键值(key=>value)对集合,适合存储对象。
hset key field value
Eg:

HSET user:1000 name "John Smith" 
HSET user:1000 password "s3cret" 

hsetnx key field value 只有在字段不存在时,设置字段的值
hget key field
hmset key field value [field value ...]
hmget key field [field ...]
hgetall key 获取所有的字段和值
hkeys key 获取所有的字段
hlen key 获取字段的数量
hvals key 获取所有的值
hdel key field [field ...]
hdel key field [field ...] 删除成功返回1,多个累加计数。
hexists key field
hincrby key field increment 如果 field 不存在,新增。
hscan key cursor [MATCH pattern] [COUNT count]

列表(List)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
lpush key value [value ...] 后添加的在最前面
rpush key value [value ...] 后添加的在最后面
lpushx key value 将一个值插入到已存在的列表头部
rpushx key value

lrange key start stop,0 到 -1 返回所有
lindex key index 通过索引获取列表的值
llen key 获取列表长度

lset key index value 通过索引设置列表元素的值
linsert key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素。如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。

lpop key 移出并获取列表的第一个元素
rpop key
ltrim key start stop
lrem key count value 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。COUNT 的值可以是以下几种:
* count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
* count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
* count = 0 : 移除表中所有与 VALUE 相等的值。

brpop key [key ...] timeout 移除并获取列表的最后一个元素
blpop key [key ...] timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

127.0.0.1:6379> blpop family 5
1) "family"
2) "xiaocan"
127.0.0.1:6379> blpop family 5
(nil)
(5.13s)

brpoplpush source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

rpoplpush source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回

集合(Set)

Redis的Set是string类型的无序集合。集合中的数据是唯一的。集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。
添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误。
sadd key member [member ...]
smembers key
scard key 获取集合的成员数
sismember key member 判断 member 是否是集合 key 的成员,1 包含,0 不包含
srandmember key [count] 随机返回 count 个元素
spop key [count] 随机移除 count 个元素
srem key member [member ...] 移除多个元素
smove source destination member

sdiff key [key ...] 返回第一个集合对于其他集合的差集
sdiffstore destination key [key ...]
sinter key [key ...] 返回所有集合的交集
sinterstore destination key [key ...]
sunion key [key ...] 返回所有集合的并集
sunionstore destination key [key ...]

sscan key cursor [MATCH pattern] [COUNT count]

有序集合(Zset)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
Zset的成员是唯一的,但分数(score)却可以重复。
zadd key [NX|XX] [CH] [INCR] score member [score member ...]
zrange key start stop [WITHSCORES] 0 到 -1 列出所有的成员
zcard key 获取集合的成员数
zcount key min max 分数在指定区间的成员个数
zincrby key increment member 对指定成员的分数加上增量 increment
zrank key member 返回指定成员的索引
zrem key member [member …]

zinterstore destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

其他参考:Redis 有序集合(sorted set) | 菜鸟教程

Redis 发布订阅

psubscribe pattern [pattern …] 订阅符合模式的频道
punsubscribe [pattern [pattern ...]]

subscribe channel [channel ...] 订阅频道
unsubscribe [channel [channel ...]] 退订
[image:DCE87475-84CF-42D7-A143-4B39492D6CFB-14511-000100A737659DE0/B4FF0428-5B45-48AC-989A-B6C2880FB840.png]

publish channel message 发布消息,返回接收到消息的订阅者的个数

pubsub subcommand [argument [argument ...]]

Redis 事务

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
* 批量操作在发送 EXEC 命令前被放入队列缓存。
* 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
* 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:
1. 开始事务。
2. 命令入队。
3. 执行事务。

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

It’s important to note that even when a command fails, all the other commands in the queue are processed – Redis will not stop the processing of commands.
multi 开始事务,exec 执行事务,discard取消事务:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set a aa
QUEUED
127.0.0.1:6379> set b bb
QUEUED
127.0.0.1:6379> set c cc
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) OK

watch key [key ...]
unwatch

Redis 脚本

Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL
eval script numkeys key [key ...] arg [arg ...
SCRIPT FLUSH 清除所有 Lua 脚本缓存。

例子:

redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second

1) "key1"
2) "key2"
3) "first"
4) "second"

更多参考:Redis 脚本 | 菜鸟教程

其他命令

数据备份与恢复

save 备份当前数据,会保存在 dump.rdb 文件中。
创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示:

redis 127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/var/db/redis"

Redis 密码

打开 redis 配置文件 redis.conf,Mac 下使用 brew 安装 redis,配置文件在 /usr/local/etc/ 目录下。修改 requiredpass 配置:

requirepass xiaocan

保存文件,重启 redis,即可生效。
执行 redis-cli 进入 redis 控制台,此时还没有权限操作,输入密码 auth xiaocan 即可。
或者直接使用 redis -a xiaocan 进行登录。

查看密码

127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "xiaocan"

设置密码。这个是临时密码,重启 redis 后不可用,会读取配置文件的密码。

127.0.0.1:6379> CONFIG set requirepass ling
OK

Redis 配置文件 redis.conf

config get *
config get [key]
config set [key] [value]

了解每项配置的具体含义:Redis 配置 | 菜鸟教程

www.htsjk.Com true http://www.htsjk.com/redis/25981.html NewsArticle Redis 常用命令总结,redis常用命令总结 Redis的使用 Redis 介绍 Redis 特点 Redis 优势 Redis 连接 Redis 服务 数据结构 Key 相关命令 字符串(String) 哈希(Hashes) 列表(List) 集合(Set) 有序集...
相关文章
    暂无相关文章
评论暂时关闭