连接redis

redis-cli -h 192.168.2.215 -p 6379

查看键

keys *

存取变量

set num 1
get num

字符串操作

set str "hello"
append str "world"
strlen str

查看类型

type num
type amap
type alist

查看是否存在key

exists num
exists alist
hexists mmap email

切换数据库(默认0数据库)

select 1

获取多个key

mget num str
mset num 3 str "world"

bit操作

set fg "bar"
getbit fg 0
getbit fg 6
setbit fg 0 1
bitcount fg

原子操作

incr num
incrby num 3
decr num
decrby num 2
incrbyfloat num 2.1
#没有decrbyfloat
incrbyfloat num -0.1 

list操作

lpush alist a
lpush alist b
lpush alist c
rpush alist d
lpop alist
rpop alist
llen alist
  • 获取片段,包含最右边的元素,支持负数索引

lrange alist 0 4
  • 获取所有元素

lrange alist 0 -1
  • 从左边开始删除第一个值为p的元素

lrem alist 1 p
  • 删除所有值为p的元素

lrem alist 0 p
  • 从右边开始删除第一个值为p的元素

lrem alist -1 p
  • 查找索引为0的元素

lindex alist 0
  • 查找右边第一个元素

lindex alist -1
  • 通过索引赋值

lset alist 2 y
  • 删除指定索引外的元素

ltrim alist 0 3
  • 在指定值w后插入

linsert alist after w k
  • 在指定值w之前插入

linsert alist before w x
  • 从右边pop一个元素到目标列表

rpoplpush alist blist

按其他键排序

lpush slist 2 1 3
set itemscore:1 50
set itemscore:2 100
set itemscore:3 -10
sort slist by itemscore:* desc

集合操作

sadd myset a
sadd myset b c
  • 查看所有

smembers myset
  • 查看集合元素个数

scard myset
  • 删除元素

srem myset c
  • 判断元素是否在集合中

sismember myset c
  • 集合运算

sadd seta 1 2 3
sadd setb 2 3 4
  • 计算差集

sdiff seta setb
  • 计算差集并存储到setj

sdiffstore setj seta setb
sadd setc 2 3
sdiff seta setb setc
  • 计算交集

sinter seta setb
  • 计算交集并存储到setx

sinterstore setx seta setb
  • 计算并集

sunion seta setb
  • 计算并集并存储到setu

sunionstore setu seta setb
  • 随机获取元素

srandmember seta 2
  • 从集合随机弹出一个元素

spop seta
  • 集合排序,默认将元素转为双精度浮点,从小到大排序

sort seta
  • 按照字典顺序

sort setn alpha

有序集合

  • 列表是双向链表实现的,获取靠近两端的元素速度快,当元素增多时访问中间元素变慢

  • 比较适合新鲜事、日志这种很少查询中间元素的应用

  • 有序集合是使用散列表/跳跃表实现的,读取中间元素也很快

  • 列表不能简单调整某个元素的位置,有序集合可以

  • 有序集合会给每个元素计算分数,更耗内存,是所有集合中最高级的

zadd sortset 89 tom 90 jim 100 david
  • 更新jim分数

zadd sortset 78 jim
  • 按照得分从小到大查看元素

zrange sortset 0 -1
  • 按照得分从大到小查看元素

zrevrange sortset 0 -1
  • 查看元素和得分

zrange sortset 0 -1 withscores
  • 查看得分

zscore sortset david
  • 按照得分范围查看,包含90

zrangebyscore sortset 90 100
  • 不包含90

zrangebyscore sortset (90 100
  • 无穷,从第二个人开始取3个人

zrangebyscore sortset (80 +inf limit 1 3
  • 增加某个元素分数

zincrby sortset -3 tom
  • 获取元素个数

zcard sortset
  • 获取指定范围内元素个数

zcount sortset 90 100
zcount sortset (89 +inf
  • 删除一个或多个元素

zrem sortset jim
  • 按照排名删除

zremrangebyrank sortset 0 2
  • 按照分数范围删除分数

zremrangebyscore sortset (60 80
  • 获取排名,从小到大

zrank sortset jim
  • 获取排名,从大到小

zrevrank sortset jim
  • 计算有序集合交集

zadd t1 1 a 2 b
zadd t2 10 a 20 b
  • 2为元素个数

zinterstore rs 2 t1 t2
  • aggregate为新集合元素分数的计算方式

zinterstore rs1 2 t1 t2 aggregate min
zinterstore rs2 2 t1 t2 aggregate max
zinterstore rs3 2 t1 t2 aggregate sum
  • 增加权重

zinterstore rs4 2 t1 t2 weights 1 0.1
zrange rs2 0 -1 withscores

map操作

hset amap name "psersia"
//update or insert a key
hset amap email "a@g.com"
hget amap name

hgetall amap

hmset mmap username persia password pw age 3
hmget mmap username age
hgetall mmap
//当字段不存在时赋值,atomic
hsetnx mmap email p@gmail.com
hincrby mmap age 2
//如果不存在,则创建一个key
hincrby mmap score 60
hdel mmap score
hkeys mmap
hvals mmap
hlen mmap

事务

multi
sadd "user:1:following" 2
sadd "user:2:followers" 1
exec
  • watch的变量在watch之后被修改

#于是事务不执行,count值为2
set count 1
watch count
set count 2
multi
set count 3
exec
get count

设置缓存时间

set mycache 100
  • 15分钟后失效,-1为永久存活

expire mycache 900
  • 重新设置生存时间

expire mycache 90
#以毫秒为单位
pexpire mycache 1000

查看剩余的存活时间

ttl mycache
  • 取消缓存,改为永久存活

persist mycache
  • set也可以清除生存时间

set mycache hello
ttl mycache

lpush,rpop实现消息队列

lpush q hello world
lpush q test msg
lrange q 0 -1
rpop q
//带10秒的超时时间
brpop q 10
//超时时间设为0,当没有元素时一直阻塞
brpop q 0

发布订阅模式

publish mychannel hi
subscribe mychannel
//匹配mychannel.1,mychannel.10
psubscribe mychannel.?*
unsbuscribe mychannel

codecraft
11.9k 声望2k 粉丝

当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很自豪告诉世人,我曾经将代码注入生命去打造互联网的浪潮之巅,那是个很疯狂的时代,我在一波波的浪潮上留下...