redis入门篇
[TOC]
基本操作
- redis 命令不缺分大小写,但是 key名称区分大小写。比如
del mykey
等同于 DEL mykey
,但是 del mykey
不等于 del MYKEY
登入与登出
/usr/local/bin/redis-cli -a RbY9k2_NBf1QWy8I -c -h 127.0.0.1 -p 6379
/usr/local/bin/redis-server -v
/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379
> auth "RbY9k2_NBf1QWy8I"
> info Server
> exit
数据库的管理
select 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> dbsize
(integer) 3
127.0.0.1:6379> info keyspace
db0:keys=2,expires=0,avg_ttl=0
db1:keys=3,expires=0,avg_ttl=0
select 1
flushdb
flushall
账号的管理
acl cat
acl cat string
acl setuser tuser
acl setuser tuser >Admin_147
acl setuser tuser on
acl setuser tuser on >Admin_147
acl list
acl users
acl whoami
acl setuser tuser on >Admin_147 ~* -@all +@read +@write
acl setuser tbusr on >Admin_147 ~tb:*
acl setuser tuser on allkeys -set
acl getuser tuser
acl setuser tuser on
acl setuser tuser off
acl deluser tuser
实例的管理
info
info server
info keyspace
config get *
config get dir
config get maxmemory maxclients
config set maxclients 3000
config get maxclients
save
bgsave
shutdown
对不同数据类型的操作
key 键值
命令 |
描述 |
示例 |
DEL |
删除指定的 key |
del mykey |
DUMP |
序列化给定 key,并返回被序列化的值 |
dump mykey |
EXISTS |
检查给定 key 是否存在 |
exists mykey |
EXPIRE |
为 key 设置过期时间(秒) |
expire mykey 60 |
EXPIREAT |
以 UNIX 时间戳为单位设置 key 的过期时间 |
expireat mykey 1672531199 |
KEYS |
查找匹配给定模式的所有 key |
keys user* |
MOVE |
将 key 移动到另一个数据库 |
move mykey 1 |
PERSIST |
移除 key 的过期时间,令其持久存在 |
persist mykey |
PEXPIRE |
设置 key 的过期时间(毫秒) |
pexpire mykey 60000 |
PEXPIREAT |
设置毫秒级的 UNIX 时间戳作为 key 的过期时间 |
pexpireat mykey 1672531199123 |
PTTL |
以毫秒为单位返回 key 的剩余存活时间 |
pttl mykey |
RENAME |
将 key 重命名为 newkey |
rename mykey newkey |
RENAMENX |
当且仅当 newkey 不存在时,将 key 重命名为 newkey |
renamenx mykey newkey |
SORT |
对 key 进行排序,返回或存储排序后的结果 |
sort mylist |
TTL |
以秒为单位返回 key 的剩余存活时间 |
ttl mykey |
TYPE |
返回 key 所存储的值的类型 |
type mykey |
UNLINK |
异步删除 key,避免阻塞 Redis |
unlink mykey |
SCAN |
增量迭代数据库中的 key |
scan 0 MATCH user* COUNT 100 |
set key1 "hello"
set key2 "world"
del key1 key2
del key3
keys pay*
keys pay??
keys *pay*
keys *
set key1 "hello"
set key2 "world"
exists key1 key2
exists key3
set key1 "hello"
expire key1 60
set key1 "hello"
expire key1 60
ttl key1
set key1 "hello"
expire key1 60
persist key1
ttl key1
set key1 "hello"
touch key1 key2
set key1 "hello"
move key1 1
del key1 key2 key3 key4
set key1 "hello"
rename key3 key4
rename key1 key2
get key2
del key1 key2 key3 key4
set key1 "hello"
set key2 "world"
renamenx key3 key4
renamenx key1 key2
get key2
set key1 "hello"
copy key1 key2
copy key1 key2 replace
copy key1 key2 DB 2
set key1 "value"
lpush key2 "value"
sadd key3 "value"
type key1
type key2
type key3
list 列表
命令 |
描述 |
示例 |
LPUSH |
将一个或多个值插入到列表头部 |
lpush mylist "a" "b" |
RPUSH |
将一个或多个值插入到列表尾部 |
rpush mylist "a" "b" |
LPOP |
移除并返回列表的第一个元素 |
lpop mylist |
RPOP |
移除并返回列表的最后一个元素 |
rpop mylist |
LLEN |
获取列表的长度 |
llen mylist |
LRANGE |
获取列表中指定范围的元素 |
lrange mylist 0 -1 |
LINDEX |
获取列表中指定索引的元素 |
lindex mylist 0 |
LSET |
将列表中指定索引的元素设置为新的值 |
lset mylist 0 "newvalue" |
LREM |
从列表中移除指定的元素,count 表示移除的数量 |
lrem mylist 2 "a" |
LTRIM |
修剪列表,只保留指定范围内的元素 |
ltrim mylist 1 3 |
RPOPLPUSH |
移除列表的最后一个元素并将其插入到另一个列表的头部 |
rpoplpush mylist myotherlist |
BLPOP |
阻塞弹出列表的第一个元素,若列表为空则等待直到超时或有新元素 |
blpop mylist 0 |
BRPOP |
阻塞弹出列表的最后一个元素,若列表为空则等待直到超时或有新元素 |
brpop mylist 0 |
BRPOPLPUSH |
阻塞移除列表的最后一个元素,并将其插入到另一个列表头部 |
brpoplpush mylist myotherlist 0 |
string 字符串
命令 |
描述 |
示例 |
SET |
设置指定 key 的值 |
set mykey "Hello" |
GET |
获取指定 key 的值 |
get mykey |
GETSET |
设置指定 key 的新值并返回旧值 |
getset mykey "NewValue" |
MSET |
一次设置多个 key-value |
mset key1 "a" key2 "b" |
MGET |
一次获取多个 key 的值 |
mget key1 key2 |
SETEX |
设置 key 的值及其过期时间(秒) |
setex mykey 10 "Hello" |
SETNX |
只有在 key 不存在时,才设置 key 的值 |
setnx mykey "Hello" |
INCR |
将 key 的整数值加 1 |
incr mycounter |
INCRBY |
将 key 的整数值加指定的增量 |
incrby mycounter 5 |
DECR |
将 key 的整数值减 1 |
decr mycounter |
DECRBY |
将 key 的整数值减指定的减量 |
decrby mycounter 5 |
APPEND |
将 value 追加到原 key 值的末尾 |
append mykey " World" |
STRLEN |
返回 key 所存储的字符串值的长度 |
strlen mykey |
SETRANGE |
用指定的字符串覆盖 key 从偏移量开始的值 |
setrange mykey 6 "Redis" |
GETRANGE |
返回 key 中字符串值的子字符串,范围由 start 和 end 指定 |
getrange mykey 0 4 |
MSETNX |
当所有给定 key 都不存在时,同时设置多个 key-value |
msetnx key1 "a" key2 "b" |
set key1 "hello"
get key1
hash 哈希
命令 |
描述 |
示例 |
hset key field value |
给key集合中的filed键赋值value |
- |
hget key1 field |
集合field取出value |
- |
hmset key1 field1 value1 field2 value2 |
批量设置hash的值 |
- |
hexists key1 field |
查看哈希表key中,给定域field是否存在 |
- |
hkeys key |
列出该hash集合的所有field |
- |
hvals key |
列出该hash集合的所有value |
- |
hincrby key field increment |
为哈希表key中的域field的值加上增量1 -1 |
- |
hsetnx key field value |
将哈希表key中的域field的值设置为value |
- |
set 集合
- set集合类型也是保存多个字符串类型的元素,但是和列表类型不同的是,set集合中的元素是无序的,并且不允许重复
命令 |
描述 |
示例 |
SADD |
向集合中添加一个或多个成员 |
sadd myset "apple" "banana" |
SCARD |
获取集合中成员的数量 |
scard myset |
SDIFF |
返回一个集合与其他集合的差集 |
sdiff myset1 myset2 |
SDIFFSTORE |
将差集结果存储在指定的集合中 |
sdiffstore resultset myset1 myset2 |
SINTER |
返回集合的交集 |
sinter myset1 myset2 |
SINTERSTORE |
将交集结果存储在指定的集合中 |
sinterstore resultset myset1 myset2 |
SISMEMBER |
判断成员是否在集合中 |
sismember myset "apple" |
SMEMBERS |
返回集合中的所有成员 |
smembers myset |
SMOVE |
将指定成员从一个集合移动到另一个集合 |
smove myset1 myset2 "apple" |
SPOP |
随机移除并返回集合中的一个或多个成员 |
spop myset 1 |
SRANDMEMBER |
随机返回集合中的一个或多个成员,但不移除 |
srandmember myset 2 |
SREM |
移除集合中的一个或多个成员 |
srem myset "apple" "banana" |
SUNION |
返回所有集合的并集 |
sunion myset1 myset2 |
SUNIONSTORE |
将并集结果存储在指定的集合中 |
sunionstore resultset myset1 myset2 |
zset 有序集合
- zset有序集合与普通集合set非常相似,是一个可以存在重复元素的字符串集合。与set集合不同的是,有序集合中的每个元素都有一个唯一的浮点类型的分数(score)与之关联,使得有序集合中的元素是可以维护有序性的,在进行排序的时候就是根据分数(score)的大小来说进行升序/降序排序
命令 |
描述 |
示例 |
zadd key score1 value1 score2 value2 |
将一个或多个member元素及其score值加入到有序key中 |
- |
zrange key start stop (withscores) |
返回有序集key,下标在start与stop之间的元素 |
- |
zrangebyscore key min max(withscores) |
返回有序集key,所有score值介于min和max之间的成员 |
- |
zrevrangebyscore key max min (withscores) |
同上,改为从大到小排列 |
- |
zincrby key increment value |
为元素的score加上增量 |
- |
zrem key value |
删除该集合下,指定值的元素 |
- |
zcount key min max |
统计该集合,分数区间内的元素个数 |
- |
zrank key value |
返回该值在集合中的排名,从0开始 |
- |
数据结构 |
是否允许重复元素 |
是否有序 |
有序依据 |
应用场景 |
列表 |
是 |
是 |
索引下标 |
时间轴、消息队列等 |
set 集合 |
否 |
否 |
- |
标签、社交等 |
zset 有序集合 |
否 |
是 |
分数 |
排行榜系统、社交等 |