Redis命令

14 5月

全局命令

keys pattern  	                      // 正则匹配key。常见 keys * 匹配全部key。keys h?ll*匹配hill和hello等
dbsize                                // key总数
exists key                            // key是否存在
del key [key...]                      // 删除key
expire key seconds	              // key将在n秒后过期,可以通过ttl key观察剩余过期时间
expireat key timestamp 	              // key将在时间戳后过期
pexpire key milliseconds	      // key将在n毫秒后过期
pexpireat key milliseconds-timestamp  // key将在毫秒级时间戳后过期
type key                              // 5种数据类型:string,list,hash,set,zset(有序set)
rename key newkey	              // 重命名key,如果新命名的key已经存在,将覆盖
renamenx key newkey	              // 重命名key,为防止覆盖,只允许新命名的key不存在时重命名
randomkey	                      // 随机返回一个key

迁移key命令:move,dump + restore,migrate

move key db   // 在Redis内部多个数据库间迁移。但生产环境不适合多数据库,这个命令知道一下即可

用 dump + restore 实现在不同Redis实例间进行数据迁移,分两步:

dump key               // 在源Redis上序列化key,格式是RDB格式
restore key ttl value  // 在目标Redis上复原key,ttl表示过期时间,如果ttl=0表示无过期时间

用 migrate 也能实现在不同Redis实例间进行数据迁移,本质上就是封装了dump + restore + del命令

migrate host port key|"" destination-db timeout [copy] [replace] [keys key [key…]]   
    // host和port是目标Redis的IP和端口
    // key|"":如果要迁移多个key,就设为""
    // destination-db:目标Redis的数据库索引
    // timeout:迁移的毫秒级超时时间
    // [copy]:copy迁移后不删除源Redis里的key
    // [replace]:不论目标Redis是否存在该key都会覆盖
    // [keys key [key…]]:迁移多个key时用

数据库管理:

select dbIndex  // Redis默认配置有16个数据库,链接后默认就是0号数据库

但这个功能不太好,因为Redis是单线程,多个数据库用一个CPU,彼此间还是会受到影响。而且多个数据库用数字进行切会增加复杂度,因此如分布式实现Redis Cluster只允许用0号数据库。如果真的要用多数据库,完全可以在一台机器上部署多个Redis实例,彼此用端口做区分。现代计算机通常是有多个CPU的,这样既保证了业务间数据的独立和不受影响,又合理地使用了CPU。

flushdb   // 清除当前数据库
flushall  // 清除所有数据库

字符串命令

set key value [ex seconds] [px milliseconds] [nx|xx]  // ex seconds:key的秒级过期时间
                                                      // px milliseconds:key的毫秒级过期时间
                                                      // nx:key必须不存在才能设置成功,用于添加
                                                      // xx:key必须存在才能设置成功,用于更新
setnx key value              // 和nx一样
                             // 例如多个客户端同时执行setnx操作相同的键,只有一个客户端才能设置成功,是一种分布式锁的实现方案
setex key seconds value      // 和xx一样      
get key                      // 获取key
mset key value [key value…]  // 批量设置key-value
mget key [key…]              // 批量获取,除了简化命令外,批量操作其实可以节省网络请求
getset key value             // 先get原来的值,再set新值
setrange key offset value    // 设置指定位置的字符
getrange key start end       // 获取指定范围的字符
incr key                     // 自增value,如果不是数字,返回错误
decr key                     // 自减value
incrby key increment         // 自增指定数字,例如视频每放一次,播放次数自增
decrby key decrement         // 自减指定数字
incrbyfloat key increment    // 自增浮点数
append key value             // value的尾部追加值
strlen key                   // 字符串长度

哈希命令

hset key field value                  // 为key设置一对field-value
get key field                         // 获取key的field的值
hdel key field [field…]               // 删除key的field
hlen key                              // 统计field的数量
hmset key field value [field value…]  // 批量设置key的field-value
hmget key field [field…]              // 批量获取key的field值
hexists key field                     // 判断key里field是否存在
hkeys key                             // 获取key里所有的field(该命令可能叫hfields比较好…)
hvals key                             // 获取key里所有value
hgetall key                           // 获取key里所有field-value
hincrby key field                     // 自增value
hincrbyfloat key field                // 自增浮点数
hstrlen key field                     // 计算value字符串的长度

列表命令

添加命令:

rpush key value [value…]              // 从右边插入元素
lpush key value [value…]              // 从左边插入元素
linsert key before|after pivot value  // 找到等于pivot的元素,在其前|后插入元素

查找命令:

lrange key start end  // 指定范围内查找
lindex key index      // 根据index查找元素
llen key              // 获取list长度

删除命令:

lpop key              // 删除最左边元素
rpop key              // 删除最右边元素
lrem key count value  // 找到value元素后开始删除,count>0从左往右删,count<0从右往左删,count=0全删
ltrim key start end   // 按照索引范围删除

修改命令:

lset key index newValue  // 根据index修改元素

阻塞操作:

blpop key [key…] timeout  // 是lpop的阻塞版本,移出并获取列表的第一个元素
                          // 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
                          // 如果timeout设为0,会一直等待下去,直到有元素能弹出为止
brpop key [key…] timeout  // 是rpop的阻塞版本,其他同上

用lpush + brpop可实现阻塞队列,生产者客户端用lpush加入元素,多个消费者客户端用brpop命令阻塞式“抢”列表尾部的元素。这样多个消费客户端可以保证了消费的负载均衡和高可用性。

集合命令

set和list不同,set中不允许有重复的元素。例如用set给用户添加关心的话题。

集合内操作:

sadd key element [element…]  // 添加元素
srem key element [element…]  // 删除元素
scard key                    // 计算元素个数
sismember key element        // 判断元素是否在set中
srandmember key [count]	     // 随机从集合返回指定个数元素,count默认值为1
spop key		     // 随机弹出元素
smembers key		     // 获取全部元素

集合间操作:

sinter key [key…]  // 求交集
sunion key [key…]  // 求并集
sdiff key [key…]   // 求差集
sinterstore destination key [key…]  // 将交集的结果保存
sunionstore destination key [key…]  // 将并集的结果保存
sdiffstore destination key [key…]   // 将差集的结果保存

有序集合命令

有序集合是能排序的,为set中每个元素分配一个score,根据score来排序。有序集合为我们提供了获取指定分数和元素范围查询,计算成员排名等功能。可以用于排行榜系统等。

集合内操作:

zadd key [nx|xx] [ch] [incr] score element [score element…]  // 添加元素
                                                             // nx:元素必须不存在才能设置成功,用于添加
                                                             // xx:元素必须存在才能设置成功,用于更新
                                                             // ch:返回操作后有序集合内元素和分数发生变化的个数
                                                             // incr:对score做增加,相当于zincrby
zcard key                                                       // 计算元素个数
zscore key member                                               // 获取元素分数
zrank key member                                                // 获取元素排名(从低到高排)
zrevrank key member                                             // 获取元素排名(从高到低排)
zrem key member [member…]                                       // 删除元素
zincrby key increment member                                    // 增加元素分数
zrange key start end [withscores]                               // 返回指定排名范围内的元素(从低到高排)
zrevrange key start end [withscores]                            // 返回指定排名范围内的元素(从高到低排)
zrangebyscore key min max [withscores] [limit offset count]     // 返回指定分数范围内的元素
                                                                // limit offset count可以指定起始位置和个数
zrevrangebyscore key min max [withscores] [limit offset count]  // 返回指定分数范围内的元素,参数同上
zcount key min max	        // 返回指定分数范围内的元素个数
zremrangebyrank key start end 	// 删除指定排名内的升序元素
zremrangebyscore key min max 	// 删除指定分数范围内的元素

集合间操作:

zinterstore destination numkeys key [key…] [weights weight [weight…]] [aggregate sum|min|max]  
    // 交集结果保存起来。numkeys:需要做交集计算key的个数
    // key [key…]:需要做交集计算的key
    // [weights weight [weight…]]:每个key的权重,计算时每个元素的score会乘以这个权重
    // [aggregate sum|min|max]:计算完交集后做汇总,默认是sum
zunionstore destination numkeys key [key…] [weights weight [weight…]] [aggregate sum|min|max]   
    // 并集结果保存起来,参数同上

发表评论

电子邮件地址不会被公开。 必填项已用*标注