Redis命令

154 阅读4分钟

说明:本系列Redis版本为Windows版5.0.14,string、list、hash、set、zset基础命令以及expire相关命令跳过

string

setex name 5 codehole # 等价于set+expire,如果key已经存在,则替换旧值

setnx name codehole # 如果name不存在就执行set创建,存在则不替换

incr age # 对整数age执行+1操作

incrby age 5 # 对整数age执行+5操作

setbit str 2 1 # 对字符串str第二位设置为1,可设置为0或1 说明:一个字节占八位,位下标设值顺序从左往右,如上面setbit之后,str的二进制表示为0010000

getbit str 2 # 对字符串第二位取值,返回0或1 (integer) 1

bitcount str # 查询str一共有多少位为1

bitcount str start end # 查询str字符串第start至第end个字符中有多少位为1 说明:如str为hello,则bitcount str 0 1查询的是h、e这16位中有多少位是1

bitpos str 1 # 返回第一个1位,可选0或1

bitpos str 1 start end # 返回str字符串第start至第end个字符中第一个1位 说明:返回位置从整个字符串开始算起

假设str二进制表示为01101000

bitfield str get u4 0 # 从第一个位开始取4个位,结果是无符号数 (u) (integer) 6

说明:0110=6

bitfield str get u3 2 # 从第三开始取3个位,结果是无符号数 (u) (integer) 5 说明:101=5

bitfield str get i3 2 # 从第三开始取3个位,结果是有符号数 (i) (integer) -3

说明:101->110->111=-3

bitfield str set u8 0 97 # 从第0位开始,将接下来的8位用无符号97替换

bitfield str incrby u4 2 1 # 从第三位开始,对接下来的4位无符号数+1 (integer) 11

说明: 1010->1011=11,无符号四位最大可表示15,超过之后折返为0(wrap),可指定其他溢出策略,假设当前四位已经是15

bitfield str overflow sat incrby u4 2 1 # 保持最大值 (integer) 15

bitfield str overflow fail incrby u4 2 1 # 不执行 (integer) (nil)

hash

hincrby map age 1 # 对hash结构的map中的整数age执行+1操作(可为任意整数)

GeoHash

GeoHash存储坐标点,可以用来统计距离,它的底层使用的是zset结构,所以删除元素可以用zset的相关命令

geoadd company 116.48105 39.996794 juejin

说明:给company集合增加一个值juejin,经纬度最终会转为分数

geodist company juejin baidu km "10.5501"

说明:以km的形式展示juejin和baidu之间的距离,距离单位也可以为m

geopos company juejin # 返回company集合中juejin的经纬度坐标

    1. "116.48104995489120483"
    2. "39.99679348858259686"

georadiusbymember company juejin 20 km [withcoord] [withdist] [withhash] count 3 desc

说明:company集合里,返回juejin周边20公里内最多三个元素按距离从远到近排列。withcoord展示经纬度,withdist展示距离,withhash展示经纬度hash

georadius company 116.514202 39.905409 20 km [withcoord] [withdist] [withhash] count 3 desc

说明:company集合里,返回[116.514202,39.905409]周边20公里内最多三个元素按距离从远到近排列。其余同georadius命令。

scan

keys *pattern*用来搜索名称包含pattern的key,它会返回所有符合的key名称,当数据量很大时很占时间,因此有了scan命令。

scan 0 match key99* count 1000

  1. "13976"
    1. "key991"
    2. "key992" ......

说明:从游标0开始遍历,返回名称为key99开头的key,最多1000条,返回的第一个参数是游标,第二个是key名称。当游标为0时,说明遍历结束。

sort

sort list|set [by] [limit start end] [get] [alpha] [asc|desc] [store new_list]

说明:对list或者set集合排序,可选项[by]表示根据什么排序;可选项[limit start end]限定返回的元素数量,不写则表示全部返回;可选项[get]表示返回什么;可选项alpha表示按照ascii顺序排序,不写则只能按照数字排序,并且集合不能包含非数字元素;可选项[asc|desc]表示升序降序,默认是升序,可选项[store new_list]表示将排序结果放到一个新集合里。

最简单的sort排序:

lpush sl 2 1 3
sort s1

1) "1"
2) "2"
3) "3"

最复杂的sort排序

lpush sl 2 1 3
hmset ss:1 name n1 score 100
hmset ss:2 name n2 score 60
hmset ss:3 name n3 score 90

sort sl by ss:*->score desc limit 0 3 get ss:*->name

1) "n1"
2) "n3"
3) "n2"

说明:集合中的元素x对应ss:x,根据hash结构的score字段进行降序排序,返回name字段,这里by的是hash,也可以by string

惰性删除

unlink key

说明:将key丢给后台线程,让其删除,而不是直接删除