有梦就能飞 2019-06-20
redis-cli -h 192.168.2.215 -p 6379
默认0数据库
)select 1
keys *
set num 1 get num set str "hello" append str "world" strlen str
type num type amap type alist
exists num exists alist hexists mmap email
mget num str mset num 3 str "world"
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
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 #atomic转移列表元素到另一个列表 #从右边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
hset amap name "psersia" #update or insert a key hset amap email "[email protected]" hget amap name hgetall amap hmset mmap username persia password pw age 3 hmget mmap username age hgetall mmap #当字段不存在时赋值,atomic hsetnx mmap email [email protected] 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 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