第五章 Redis的数据结构
五种数据类型:字符串(string)、字符串列表list、有序字符串集合sorted set、哈希hash、字符串集合set
Key定义的注意点:不要过长,不超过1024个字节,不仅消耗内存,还降低查找效率;也不要太短,设一个key为a,降低可读性;并有统一的命名规范。
1.字符串string
在redis以二进制形式,字符串类型的value最长512兆
存储string常用命令:
赋值:set company imooc
取值:get company
Getset company baidu 先获取再设置
删除:del company 再get会返回nil,代表不存在
数值的增减: incr key 将指定key的value增1,如果不存在设置为0增1,如果不能转成整形返回错误,递减:decr
Incrby指定增加多少:increby num 5 给num对应的value增加5
Append num 5:在num后边附加5,如果不存在则创建为附加的值
2.hash
String key和string value的map容器
每一个hash可以存储很多个键值对
Hset myhash username jack 存值
Hset myhash age 18
Hmset myhash2 username rose age 21可以存储多个键值对
Hget myhash username
Hmget myhash username age 一次得到多个属性的值
Hgetall myhash 获取所有的属性和属性值
Hdel myshash2 username age删除多个属性
Hdel 删除不存在的字段返回的是0
Del:删除整个集合 del myhash
Hincrby myhash age 5增加数字
判断某个指定key中的某个属性是否存在:
Hexists my hahs username(存在返回1,不存在返回0)
Hesists myhahs password 返回0
Hlen 获取属性的数量:hlen myhash
获取所有的属性名称:hkeys myhash
获取所有的属性值:hvals myhash
3.list(key和下标)
ArrayList使用数组方式(根据索引查询速度很快,但是新增和删除有元素的位移操作比较慢)
LinkedList使用双向链表(每个元素记录了前后元素的指针)
双向链表增加/删除数据
存储list:
两端添加:从左侧添加 lpush myslist a b c (返回长度)
Rpush mylist a b c
查看列表:lrange mylist -1(倒数第一个),-2:倒数第二个
Lrange mylist 0 -1
两端弹出:lpop mylist 存在则返回弹出的第一个元素,不存在返回nil
Rpop右侧弹出
Llen mylist:获取元素的个数
Lpushx: lpush mylist x 向头部插入一个具体的值
Rpush mylist y 向尾部插入
Lrem mylist + count +具体的value:删除count个为value的元素(count>0 从前向后遍历,<0从后向前遍历,=0删除所有值等于value的元素)
Lset设置角标元素的值(0:第一个元素,-1:最后一个元素):lset mylist 3 mm
Linsert mylist before b 11:在第一个b之前插入元素(after在b之后插)
尾部元素弹出并添加到头部:rpoplpush mylist5 mylist6 将mylist5的尾元素插入mylist6的头部
使用场景:消息队列,lpush向链表添加新元素,这样的称之为生产者,另外一个元素取出元素成为消费者。如果去除元素后消费者崩溃,丢失了一个消息,因此消费者取出后,放入一个备份队列对其进行备份。发现备份队列过期后重新放回主消息队列,让其他消费者继续处理。
4.存储set
Set集合和list相比不允许出现重复元素(和c++一样)
常用命令:待补充
5.sorted set
和set相似,字符串集合,不允许重复,区别:sorted set中每一个成员有一个分数与之关联,通过分数对集合中的成员进行从小到大的排序。分数可以重复。添加/删除/更新一个成员很快速,事件复杂度logn(成员个数)。因为成员有序,即便访问集合中部元素依然高效。
在这一点在其他数据库中建模很困难。主要应用场景:游戏排名,微博热搜。
常用命令:待补充
第六章 keys通用操作
获得所有keys: keys *
查询: keys my?:以my开头
删除: del
是否存在: exists +key
重命名:rename +key +新名字
设置过期时间: expire newcompany 1000
看超时时间: ttl newcompany
获取类型:type mylist (typemysort:返回zsort)