Redis 命令详解 | 字数总计: 2.8k | 阅读时长: 11分钟 | 阅读量:
一、全局命令
查看当前所有key
判断某个key是否存在(存在返回1,不存在返回0)
查看key是什么类型(key不存在返回none)
删除key(返回成功删除key的个数)
键重命名
1 2 rename key newkey renamenx key newkey 只有newkey不存在时才会被覆盖
为指定的key设置过期时间
1 2 3 4 expire key 10 单位秒,过期后会自动删除 expireat key 10 单位秒,10秒后过期 pexpire key 1000 单位毫秒,超过过期时间后会自动删除 pexpireat key 1000 单位毫秒,1000毫秒后过期
查看还有多少秒过期,-1表示永不过期,-2表示已过期
随机返回一个key
迁移键
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 (1)move key db (不建议再生产环境中使用)把指定的键从源数据库移动到目标数据库 (2)dump+restore dump key Restore key ttl value Dump+restore可以实现在不同的redis实例之间进行数据迁移的功能,整个迁移的过程分为两步; 1)在源redis上,dump命令会将键值序列化,格式采用的是RDB格式 2)在目标redis上,restore命令将上面序列化的值进行复原,其中ttl参数代表过期时间,ttl=0代表没有过期时间 =======例======= 源redis 127.0.0.1:6379> get redis "world" 127.0.0.1:6379> dump redis "\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8" 目标redis 127.0.0.1:6379> get redis (nil) 127.0.0.1:6379> restore redis 0 "\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8" OK 127.0.0.1:6379> get redis "world" (3)migrate migrate实际上是把dump、restore、del 3个命令进行组合,从而简化了操作步骤 源redis中执行 127.0.0.1:6379> migrate xxx.xxx.xxx.xxx 6379 flower 0 1000 replace (将键flower迁移至目标xxx.xxx.xxx.xxx:6379的库0中,超时时间为1000毫秒,replace表示目标库如果存在键flower,则覆盖)
遍历key
1 2 3 4 (1)全量遍历键 keys pattern (2)渐进式遍历 scan 可以有效的解决keys命令存在的阻塞问题,scan每次的额复杂度是O(1)
二、数据库管理
切换数据库(默认16个,根据编号0-15区分不同数据库,进入redis后默认是0库)
查看当前数据库的key的数量
清空当前数据库
清空所有数据库
三、针对key的操作
设置值
1 2 3 4 5 6 set key value [ex] [px] [nx|xx] ex为键值设置秒级过期时间 px为键值设置毫秒级过期时间 nx键必须不存在,才可以设置成功,用于添加 xx与nx相反,键必须存在,才可以设置成功,用于更新 setnx、setex 与上面的nx、ex作用相同
获取值(不存在则返回nil)
批量设置值
1 2 mset key value [key value ......] mset a 1 b 2 c 3 d 4
批量获取值
计数
1 2 3 4 5 6 incr key decr key /inceby key increment /decrby key increment 返回结果分为3中情况: 值不是整数,返回错误; 值是整数,返回自增后的结果; 键不存在,按照值为0自增,返回结果为1。
追加值
1 append key value 可以向字符串尾部追加值
字符串长度
设置并返回原值
设置指定位置的字符
1 2 3 4 5 6 7 setrange key offeset value 127.0.0.1:6379> get liming "class4" 127.0.0.1:6379> setrange liming 0 m (integer) 6 127.0.0.1:6379> get liming "mlass4"
获取部分字符串
1 2 getrange key start end start和end分别为开始和结束的偏移量,偏移量从0开始
四、Hash操作
设置值
1 2 hset key field value hset user:1 name tom
获取值
1 2 3 4 5 6 7 hget key field 127.0.0.1:6379> hset user:1 name Tom (integer) 1 127.0.0.1:6379> hget user:1 name "Tom" 127.0.0.1:6379> hget user:1 age (nil)
删除field
1 2 hdel key field [field ......] 会删除一个或多个field,返回结果为成功删除fiel的个数
计算field的个数
批量设置或获取field-value
1 2 Hmget key field [field ......] Hmset key field value [field value]
判断field是否存在
获取所有field
1 2 3 4 5 6 hkeys key 127.0.0.1:6379> hkeys user:1 1) "name" 2) "age" 3) "grand" 4) "city"
获取所有value
1 2 3 4 5 6 hvals key 127.0.0.1:6379> hvals user:1 1) "Tom" 2) "20" 3) "3" 4) "beijing"
获取所有的field、value
计算value字符串的长度
五、列表List操作
1. 添加
从右边插入元素
1 rpush key value [value......]
从左边插入元素
1 lpush key value [value......]
向某个元素前或者后插入元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 linsert key before|after pivot value linsert命令会从列表中找到等于pivot的元素,在其前或者后插入一个新的元素value 127.0.0.1:6379> rpush mylist a b c d e f b a (integer) 8 127.0.0.1:6379> linsert mylist after f g (integer) 9 127.0.0.1:6379> lrange mylist 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "f" 7) "g" 8) "b" 9) "a"
2. 查找
获取指定范围内的元素列表
1 2 3 lrange key start end 索引下标从左到右分别是0到N-1,从右到左分别是-1到-N;end选项包含了自身 lrange key 0 -1 可以从左到右获取列表的所有元素 lrange mylist 1 3 获取列表中第2个到第4个元素
获取列表指定下标的元素
获取列表长度
3. 删除
从列表右侧弹出元素
从列表左侧弹出元素
删除指定元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 lrem key count value Lrem命令会从列表中找到=value的元素进行删除,根据count的不同分为3种情况: 1)Count>0,从左到有,删除最多count个元素 2)Count<0,从右到左,删除最多count绝对值个元素 3)Count=0,删除所有 列表listaaa为a a a a java php b a b 127.0.0.1:6379> lrem listaaa 5 a (integer) 5 127.0.0.1:6379> lrange listaaa 0 -1 1) "java" 2) "php" 3) "b" 4) "b" 127.0.0.1:6379> lrem listaaa 3 php (integer) 1 127.0.0.1:6379> lrange listaaa 0 -1 1) "java" 2) "b" 3) "b"
4. 修改
1 2 lset key index newValue 修改指定索引下标的元素 Eg:lset listaaa 1 python
5. 阻塞操作
1 2 3 blpop key [key ...] timeout brpop key [key ...] timeout blpop和brpop是lpop、rpop的阻塞版本,除了弹出方式不同,使用方法基本相同,timeout阻塞时间
列表为空
1 2 brpop list:test 3 3秒后返回 brpop list:test 0 一直处于阻塞中
列表不为空
1 2 3 4 5 brpop mylist 0 立刻返回 127.0.0.1:6379> brpop mylist 0 1) "mylist" 2) "a"
六、Set操作(不可重复)
1. 集合内的操作
添加元素
1 sadd key element [element .....] 返回结果为添加成功的元素个数
删除元素
1 srem key element [element .....] 返回结果为删除成功的元素个数
计算元素个数
1 Scard key scard的时间复杂度为O(1),直接用redis内部的变量
判断元素是否在集合中
1 Sismember key element 在集合中则返回1,否则返回0
随机从集合返回指定个数元素
1 Srandmember key [count] count可不写,默认为1
从集合随机弹出元素
1 Spop key [count] 3.2版本开始支持[count]
获取所有元素
1 Smembers key 它和lrange、hgetall都属于比较重的命令,有时候可以使用sscan来完成
2. 集合间的操作
求多个集合的交集
1 sinter key [ key ......]
求多个集合的并集
求多个集合的差集
1 sdiff key [key ......] 第一个key里面有的,第二个key里面没有的
将交集、并集、差集的结果保存
1 2 3 4 sinterstore destination key [ key ......] sunionstore destination key [ key ......] sdiffstore destination key [ key ......] 例如:sinterstore user:1_2:inter user:1 user:2 user:1_2:incr也是集合类型
七、ZADD操作(有序集合)
添加成员
1 zadd key score member[score member .....] 返回结果为添加成功的元素个数
计算成员个数
1 zcard key scard的时间复杂度为O(1),直接用redis内部的变量
计算某个成员分数
计算成员的排名
删除成员
1 zrem key member [member .......]
增加成员的分数
1 zincrby key increment member
返回指定排名范围的成员
1 2 zrange key start end [withscores] 从低分到高分 zrevrange key start end [withscores] 从高分到低分
返回指定分数范围的成员
1 2 zrange key min max [withscores] [limit offset count ] 按照分数从低分到高分 zrevrange key max min [withscores] [limit offset count ] 按照分数从高分到低分
返回指定分数范围的成员个数
删除指定排名内的升序元素
1 zremrangebyrank key start end
删除指定分数范围的成员
1 zremrangebystore key min max
八、pub/sub(发布、订阅)
发布消息
1 2 publish channel message publish channel:sports 'I want to go eatting'
订阅消息
1 2 subscribe channel [channel .....] subscribe channel:sports
取消订阅
1 unsubscribe channel [channel .....]
按照模式订阅
1 psubscribe pattern [pattern ......]
按照模式取消订阅
1 unpsubscribe pattern [pattern ......]
查询订阅
1 2 3 4 5 6 7 8 9 10 (1)查看活跃的频道 pubsub channels 127.0.0.1:6379> pubsub channels 1) "channel:sports" 2) "__sentinel__:hello" (2)查看频道订阅数 pubsub numsub [channel ......] pubsub numsub channel:sports (3)查看模式订阅数 pubsub numpat
说明:
客户端在执行订阅命令之后进入了订阅状态,只能接收四个命令:subscribe、psubscribe、unsubscribe、punsubscribe;
新开启的订阅客户端,无法收到该频道之前的消息,因为redis不会对发布的消息进行持久化。
九、Transaction(事务)
取消执行事务块内的所有命令
执行事务块内的命令
标记一个事务块的开始
取消watch命令对所有key的监视
监视一个或者多个key,如果事务执行之前,这个kye被其它命令所动,则事务被打断
十、Connection(连接)
登录redis时输入密码
打印一个特定的信息message,测试时使用
测试与服务器的连接,如果正常则返回pong
请求服务器关闭与当前客户端的连接
切换到指定的数据库
十一、Server(服务器)
后台异步保存数据到硬盘
为连接设置、获取名字
1 client setname/client getname
关闭地址为 ip:port的客户端
以人类可读的方式,返回所有的连接客户端信息和统计数据
取得运行redis服务器的配置参数
设置redis服务器的配置参数
1 config set parameter value
重置info命令的某些统计数据
返回redis服务器的各种信息和统计数据
返回最近一次redis成功将数据保存到磁盘时的时间
实时打印出redis服务器接收到的指令
将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘
将当前服务器转变为指定服务器的从属服务器
Redis 用来记录查询执行时间的日志系统
1 slowlog subcommand [argument]
部分内容摘自https://segmentfault.com/a/1190000010999677