redis基本操作概览

有梦就能飞 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

查看是否存在key

exists num
exists alist
hexists mmap email

获取多个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
#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

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

相关推荐