1. 字符串 String
字符串(String)存储类型,键值对形式存储即 key-value,最基础的数据结构。
-
操作指令 / 可做操作:
设置值
#设置值 set key value #设置秒过期时间 setex key seconds value #键必须不存在才可以设置成功,用于添加 setnx key value #键必须存在才可以设置成功,用于更新 setxx key value #批量设置值 mset key1 value key2 value #值自增 incr key #值自增几个数 incrby key num #incrbyfloat 自增浮点数 decr自减 decrby自减指定数字
setnx 由于单线程命令处理机制,同时执行setnx只会有一个客户端能成功,因此setnx可以作为分布式锁的一种实现方案。
获取值
#获取值 get key #检查键是否存在 exist key #批量获取值 mget key1 key2 key3 #获取原来的值,设置新的值 getset key value #截取字符串 getrange key start(0) end(1)
-
String存储的结构
2. 哈希 hash
hash的键值——本身又是一个键值对结构。
如:key:{{field:value},{fieldN:value}}
-
操作指令 / 可做操作:
数据结构可视为:key是指一行数据,field是这行数据的各个column,value是column的值
#设置值 hset key field value #获取值 hget key field #删除field hdel key field #批量操作 hmset key field1 value field2 value hmget key field1 field2 #判断field是否村子 hexists key field #获取所有的field名字 hkeys key #获取所有的值 hvals key #field值自增,自减等操作/在string的命令前加上h hincrby key field
-
hash数据结构
3. 列表 List
用来存储多个有序的字符串,可以对列表两端插入和弹出,还可以指定范围获取元素,可以充当栈和队列的角色。
结构类似 key: a,b,c,d,e
-
操作指令 / 可做操作:
#从右边插入元素 rpush key value value2 #从左侧插入元素 lpush key value value2 #从左到右获取列表所有元素 lrange key 0 -1 #某元素前后插入数据 / 在 pivot 元素前后插入 value值 linsert key before|after pivot value #获取指定范围内的元素列表 lrange key start end #获取指定下标值 lindex key index #从左侧弹出元素/删除 lpop key #从右侧弹出元素 rpop key #删除元素从列表中找到等于value的元素进行删除,根据count的不同分为三种情况 #count>0,从左到右,删除最多count个元素。 #count<0,从右到左,删除最多count绝对值个元素。 #count=0,删除所有。 lrem key count value #修改指定下表的元素 lset key index newValue
-
使用场景
简单的消息队列,redis+lpush+brpop实现阻塞队列。
文章列表,文章列表是有序的,list也可顺序存储。lpush+lpop=Stack(栈) lpush+rpop=Queue(队列) lpsh+ltrim=Capped Collection(有限集合) lpush+brpop=Message Queue(消息队列)
-
存储结构
4. 集合 set
集合类型也是用来保存多个字符串元素,但和列表类型不一样,集合中不允许有重复的元素,并且集合中的元素是无序的,不能通过下标获取元素。
redis支持集合取交集,并集,差集
-
操作指令 / 可做操作:
#添加元素 sadd key value1 value2 value3 #删除元素 srem key value1 value2 #计算元素个数 scard key #判断元素是否在集合中 sismember key value #随机返回N个元素 srandmember key count #随机弹出一个元素 spop myset #获取所有元素 smembers key
-
集合与集合间的操作
#求集合交集 sinter key1 ke2 #求集合并集 sunion key1 key2 #返回所有给定 key 与第一个 key 的差集 sdiff key1 key2 #将计算出的交集,并集,差集结果保存 sinterstore destination key [key ...] suionstore destination key [key ...] sdiffstore destination key [key ...]
-
存储结构
5. 有序集合 zset
有序集合基于socre分数作为排序依据,有序集合中元素不能重复,但是socre排序依据可以重复。
数据结构 | 是否元素重复 | 是否有序 | 排序实现方式 |
---|---|---|---|
列表 | 是 | 是 | 索引下标 |
集合 | 否 | 否 | 无 |
有序集合 | 否 | 是 | score分值排序 |
-
操作指令 / 可做操作:
#添加元素与相应分数 / 仅添加成员不添加分数会报错 zadd key score member #计算某个成员的分数 zscore key member #返回成员排名,0位开始 zrank key member #删除成员 zrem key member #增加成员分数 增加member成员num分数 zincrby key num member
-
存储示例