Redis常用命令

212 阅读5分钟

对value操作

redis允许模糊查询key 有3个通配符 *、?、[]

randomkey
#返回随机key  
type key
#返回key存储的类型
exists key
#判断某个key是否存在
del key
#删除key
rename key newkey
#改名
renamenx key newkey
#如果newkey不存在则修改成功
move key 1
#将key移动到1数据库
ttl key
#查询key的生命周期(秒)
expire key 
#整数值:设置key的生命周期以秒为单位
pexpire key
#整数值:设置key的生命周期以毫秒为单位
pttl key
#查询key的生命周期(毫秒)
perisist key
#把指定key设置为永久有效

String操作

string的value除了字符串还可以是数字

可以用来实现

  1. 缓存字符串数据
  2. 统计数量
  3. 计数器

常用命令

set key value [ex 秒数] [px 毫秒数] [nx/xx]  
#如果ex和px同时写,则以后面的有效期为准
#nx:如果key不存在则建立
#xx:如果key存在则修改其值
get key
#取值
mset key1 value1 key2 value2 
#一次设置多个值
mget key1 key2
#一次获取多个值
setrange key offset value
#把字符串的offset偏移字节改成value
#如果偏移量 > 字符串长度,该字符自动补0x00
append key value
#把value追加到key 的原值上
getrange key start stop
#获取字符串中[start, stop]范围的值
#对于字符串的下标,左数从0开始,右数从-1开始
#注意:当start>length,则返回空字符串
#当stop>=length,则截取至字符串尾
#如果start所处位置在stop右边,则返回空字符串
getset key nrevalue
#获取并返回旧值,在设置新值
incr key
#自增,返回新值,如果incr一个不是int的value则返回错误,incr一个不存在的key,则设置key为1
incrby key 2
#跳2自增
incrbyfloat by 0.7
#自增浮点数 
setbit key offset value
#设置offset对应二进制上的值,返回该位上的旧值
#注意:如果offset过大,则会在中间填充0
#offset最大到多少
#2^32-1,即可推出最大的字符串为512M
bitop operation destkey key1 [key2..]    
#对key1 key2做opecation并将结果保存在destkey上
#opecation可以是AND OR NOT XOR
strlen key
#取指定key的value值的长度
setex key time value
#设置key对应的值value,并设置有效期为time秒

List操作

Redis的 List 底层是一个每个子元素都是string类型的双向链表,链表的最大长度是2^32,list的pop操作还有阻塞版本,主要是为了避免轮询

可实现的相关应用

  1. 消息队列 (Lpush Rpop)
  2. 栈 (Lpush Lpop)

常用命令

lpush key value
#把值插入到链表头部
rpush key value
#把值插入到链表尾部
lpop key
#返回并删除链表头部元素
rpop key
#返回并删除链表尾部元素
lrange key start stop
#返回链表中[start, stop]中的元素
lrem key count value
#从链表中删除value值,删除count的绝对值个value后结束
#count > 0 从表头删除  count < 0 从表尾删除  count=0 全部删除
ltrim key start stop
#剪切key对应的链接,切[start, stop]一段并把改制重新赋给key
lindex key index
#返回index索引上的值
llen key
#计算链表的元素个数
linsert key after|before search value
#在key 链表中寻找search,并在search值之前|之后插入value
rpoplpush source dest
#把source 的末尾拿出,放到dest头部,并返回单元值
#应用场景: task + bak 双链表完成安全队列
rpoplpush task bak
#接收返回值并做业务处理
#如果成功则rpop bak清除任务,如果不成功,下次从bak表取任务
brpop,blpop key timeout
#等待弹出key的尾/头元素
#timeout为等待超时时间,如果timeout为0则一直等待下去
#应用场景:长轮询ajax,在线聊天时能用到

Set操作

相关应用

使用Set的交集、差集、并集与无序性、确定性、唯一性等特性

  1. 共同好友
  2. 共同关注
  3. 。。。

zSet操作

有序set

更多其他相关命令

Hash操作

HSET key field value
#设置 key 指定的哈希集中指定字段的值。

#如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。

#如果字段在哈希集中存在,它将被重写。

更多其他相关命令

Geospatial地理位置

GEOADD key longitude latitude member [longitude latitude member ...]
# 将指定的地理空间位置(纬度、经度、名称)添加到指定的`key`中
GEOPOS key member [member ...]
#从key里返回所有给定位置元素的位置(经度和纬度)
GEODIST key member1 member2 [unit]
#返回两个给定位置之间的距离。
#如果两个位置之间的其中一个不存在, 那么命令返回空值。
#指定单位的参数 unit 必须是以下单位的其中一个:
# m 表示单位为米。km 表示单位为千米。mi 表示单位为英里。ft 表示单位为英尺。
#如果用户没有显式地指定单位参数, 那么 `GEODIST` 默认使用米作为单位。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
#以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEOHASH key member [member ...]
#返回一个或多个位置元素的 [Geohash](https://en.wikipedia.org/wiki/Geohash) 表示。
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
#这个命令和 [GEORADIUS] 命令一样, 
#都可以找出位于指定范围内的元素, 但是 `GEORADIUSBYMEMBER` 的中心点是由给定的位置元素
#决定的, 而不是像 GEORADIUS那样, 使用输入的经度和纬度来决定中心点指定成员的位置被用作查询的中心。

HyperLogLog基数统计

什么是基数

A = {1,3,5,7,8,8}

B = {1,3,5,6,7}

基数就等5,具体请查看基数的详细介绍

相关应用

  1. 实时统计网站UV
  2. 访客分析
PFADD key element [element ...]
#将除了第一个参数以外的参数存储到以第一个参数为变量名的HyperLogLog结构中.
PFCOUNT key [key ...]
#当参数为一个key时,返回存储在HyperLogLog结构体的该变量的近似基数,如果该变量不存在,则返回0.
PFMERGE destkey sourcekey [sourcekey ...]
#将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 
#合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集.

bitmap位图

相关应用

  1. 统计用户信息 活跃不活跃、登录没登录、打卡没打卡等
  2. 关于两个状态的字段都可以用bitmap
SETBIT key offset value
#设置或者清空key的value(字符串)在offset处的bit值。
GETBIT key offset
#返回key对应的string在offset处的bit值
BITCOUNT key [start end]
统计字符串被设置为1的bit数.

持续更新中...