redis的数据结构及命令

redis支持的数据类型

  1. STRING 字符串、整数或者浮点数
  2. LIST 链表,每个节点都是一个字符串
  3. SET 无序收集器
  4. HASH 包含键值对的无序散列表
  5. ZSET 有序集合

通用键值操作

#获取所有键值对 结合正则表达式 keys pattern
keys *

#随机获取key
randomkey

#获取key的类型
type 键值名

#判断key是否存在
exists 键值名

#删除key
del 键值名

#修改键值名
rename 原名 目标名 #将会覆盖重名
renamenx 原名 目标名 #名不冲突才进行改名操作

#移动key到其他数据库
#默认开启16个数据库,0—15
select 服务器id #切换到指定数据库,默认都是在0号数据库进行操作
move 键值名 服务器id #移动指定key到指定库

#设置key的有效期
ttl 键值名 #查询有效期 -1表示永久有效 -2表示不存在
expire 键值名 生命周期 #设置生命周期,以秒为单位
pexpire 键值名 生命周期 #设置生命周期,以秒为单位
persist 键值名 #设置key永久有效

Redis字符串类型的操作

#设置String的值
#ex秒数 ps毫秒数 不能混用 如果同时存在,以后面的为准
set search www ex 参数

#nx不在有效 xx存在有效
set search www nx #不存在情况下设置search的值为www

#一次性设置多个键值
mset a aman b bold #a设置为aman,b设置为bold

#偏移字符串 替换指定位置的内容
set word hello
setrange word 2 ?? #word将变成he??o
setrange word 6 ! #对于空的位置使用 0x00进行填充

#追加字符串
append word 值

#获取部分的值
getrange key start stop #包括边界值
getrange key 0 -4 #最后一个值是-1

#获取旧值,设置新值 即CAS操作
set status sleep
getset status awake

#增、减操作 (秒杀计数的实现)
set num 10000
decr num #减一
incr num #加一
#decrbyfloat、incrbyfloat进行浮点数操作
decrby num 5 #数量减5
incrby num 5 #数量加5

#大小写切换,通过ASCII进行转换 位运算加减32
set char A
setbit char 2 1 #char变成a
setbit char 2 1 #char变回A

#让两个字符做AND、OR等位操作 结果会放在第一key中
bitop or char1 char2 char3

Redis中list的相关命令(包括链表)

#lpush 放在链表的左侧 rpush放在链表的右边 
lpush character a
rpush character b
lpush character c #最终结果是 c、a、b

#取出链表中的值
lrange character 0 -1 #获取链表中所有的值

#lpop rpop分别从左右弹出值
rpop character #返回的值是弹出的值 b

#获取索引上的的值
lindex key index
lindex character 0 #输出的即为c

#获取链接表的元素个数
llen key

#在某个值的前后插入值(先查后插)
#before after
#如果存在多条查询结果的话,只会对第一个进行插入操作
linsert key before a b #链表变为c、b、a

#一个链表右边弹出的数据 从另一个链表的左边注入
#这个操作本身是原子操作
#适用于批处理过程出现异常后,进行回滚或者复查
rpoplpush 链表1 链表2

#等待立即弹出
#适用于在线聊天的场景
brpop(blpop) key timeout
brpop key 5 #等待5秒后立即弹出

Redis中set的相关命令(包括链表)
set的特点:无序性、唯一性

#设置一个set
sadd key 参数一 参数二 #可以同时插入多个

#查看所有元素
semmbers key

#删除元素
srem key 参数一

#随机弹出并删除集合中的一个元素
spop key

#随机获得一个,但不删除
srandmember key

#获取集合的长度
scard key

#查看是否存在这个元素
sismember key 参数

#移动集合元素
smove key1 key2 参数 #将元素从key1移到到key2

#多set求交集
sinter key1 key2
sinterstore key1 key2 result #将交集结果存在result

#多set求并集
sunion key1 key2
sunionstore key1 key2 result #将并集结果存在result

Redis中的有序set的相关指令
有序性:通过给元素添加权重值来进行排序

#添加元素及权重
zadd key 权重1 元素1 权重2 元素2

#列出元素
zrange key start end #从零开始,取出范围的值
zrange key start end withscores #携带权重
zrange key 0 -1 #列出所有元素

#根据权重取元素
zrangebyscore key value1 value2 #取权重从value1到value2的元素
zrangebyscore key value1 value2 limit 1 2 #跳过第一个 取2个
zrangebyscore key value1 value2 limit 1 2 withscores #携带权重

#获取元素的名次 包含第0名
zrank key value1 #从小到大排序
zrevrank key value2 #倒序

#删除元素
zremrangebyscore key min max #根据权重删除包括边界值
zremrangebyrank key start end #根据排名删除 从0开始 包括边界值

#统计集合元素个数
zcard key
zcount key start stop #根据权重,求范围内的元素个数 包括边界值

#集合求并集 权重进行聚合函数运算 sum
zadd lisi 3 cat 5 dog 6 horse
zadd wang 2 cat 6 dog 8 horse 1 donkey

#对lisi wang 求交集并将结果放入result
#并且对权重进行sum、max、min操作,min以小的为准,max以大的为准
#2是numkeys,是比较集合的个数
zinterstore result 2 lisi wang aggregate sum
#weights 2 1设置权重比
zinterstore result 2 lisi wang aggregate weights 2 1 sum

Redis中的hash的相关指令
特征:以键值对的形式存在,是一个管理数组

#设定元素 
hset user name lisi
hset user aga q0
hmset user1 name wang age 10 #同时设置多个属性

#查看这个hash中所有属性
hgetall user
hget user name #获取一个元素中的一个域
hmget user name age #获取一个元素中的多个域

#删除
hdel user age #获取一个元素中的一个域

#查看有多少个域
hlen user

#判断域是否存在
hexists user name

#对单个域 进行操作
hincrby user age 1 #年龄增长
hincrbyfloat user age 0.5 #浮点数增长
hdecrby user age #减小

#查看
hkeys key #获取所有域
hvals key #获取所有域的值

深入学习Redis之Redis指令操作_redis指令