Redis入门第二天
本系列是Redis的入门系列第二部分的内容:主要介绍了Redis的数据类型:String、Hash、List、Set以及zset
Redis
Redis数据类型
官方命令大全网址
- String(字符串类型)
- hash(散列类型)
- List(列表类型)
- Set(集合类型)
- SortedSet(有序集合类型,简称zset)
命令不区分大小写,但是key区分大小写
String 类型
-
赋值:
SET key value
-
取值:
GET key
-
取值并赋值:
GETSET key value
-
数值增减:
-
前提条件:
- 当value是整数数据
- 数值增减都是原子操作
-
递增数字
INCR key
-
增加指定的整数
INCRBY key increment
-
递减数字
DECR key
-
减少指定的帧数
DECRBY key increment
-
-
仅当不存在时赋值(可以实现分布式锁的功能)
setnx key value
实例:
-
向尾部追加值:向键值的末尾追加value,如果键值不存在则设置该键为value。最后返回追加后字符串的总长度
APPEND key value
-
获取字符串长度:不存在返回0
STRLEN key
-
同时设置/获取多个键值
- MSET key value key value …
- MGET key key …
-
应用场景之自增主键
- 需求:商品编号采用INCR命令生成
- 实现:定义商品编号key:items:id
Hash 类型
Hash叫做散列类型,提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合等其他类型
-
赋值:
- HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0
- HSET key field value
-
一次赋值多个
- HMSET key field value [field value …]
-
当字段不存在时赋值
- 类似于HSET,区别在于如果字段存在,该命令不执行任何操作
- HSETNX key field value
-
取值
- HGET key field
-
一次获取多个值
- HMSET key field [field …]
-
获取所有字段的值
- HGETALL key
-
删除字段:可以删除一个或者多个字段、返回值是被删除的字段个数
- HDEL key field [field …]
-
增加数字
- HINCRBY key field increment
-
判断字段是否存在
- HEXISTS key field
-
只获取字段名或字段值
- HKEYS key
- HVALS key
-
获取字段数量
- HKEN key
-
获取所有字段
- HGETALL key
-
应用之存储商品信息
- 注意事项:存在哪些对象数据,特别是对象属性经常发生增删改操作的数据
- 商品信息字段
- 【商品id,商品名称,商品描述,商品库存,商品好评】
- 定义商品信息的key
- 商品id为1001的信息在Redis中的key为:【items.1001】
List类型
Redis的列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获取列表的某一个片段。
列表类型内容是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为0/1,获取越接近两端的元素速度就越快。意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。
-
向列表两端添加元素
- 向列表左边添加元素
- LPUSH key value [value …]
- 向列表右边添加元素
- RPUSH key value [value …]
- 向列表左边添加元素
-
查看列表:获取列表中的某一片段,将返回start、stop之间的所有元素(包括两端的元素),索引从0开始。索引可以是负数,“-1”代表最后一遍的一个元素
- LRANGE key start stop
-
从列表两端弹出元素:先将列表左边的元素从列表中移除,然后返回被移除的元素值
- LPOP key
- RPOP key
-
获取列表中元素的个数
- LLEN key
-
删除列表中指定个数的值
- LREM命令会删除列表中前count个数为value的元素,返回实际删除的元素个数
- 语法:LREM key count value
- count>0:从列表左边开始删除
- count<0:出列表右边开始删除
- count=0:删除所有值为value的元素
-
获取/设置指定索引的元素值
- 获取指定索引的元素值
- LINDEX key index
- 设置指定索引的元素值
- LSET key index value
- 获取指定索引的元素值
-
向列表中插入元素:首先会在列表中从左到右查询值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面
- LINSERT key BEFORE|AFTER pivot value
-
将元素从一个列表转移到另一个列表中
- RPOPLPUSH source destination
-
应用之商品评论列表
- 需求1:用户针对某一商品发表评论,一个商品会被不同的用户进行评论,存储商品评论时,要按时间顺序排序
- 需求2:用户在前端页面查询该商品的评论,需要按照时间顺序降序排序
- 思路:
- 使用list存储商品评论信息,key是该商品的id,value是商品评论信息商品编号为1001的商品评论key
Set类型
set类型即集合类型,其中的数据是不重复且没有顺序
集合类型 | 列表类型 | |
---|---|---|
存储内容 | 至多232-1个字符串 | 至多232-1个字符串 |
有序性 | 否 | 是 |
唯一性 | 是 | 否 |
集合类型的常用操作是向集合中加入或者删除元素、判断某个元素是否存在等,由于集合类型的Redis内部是使用值为空散列表实现。
Redis还提供了多个集合之间的交集、并集、差集的运算
- 添加元素
- SADD key member [member …]
- 删除元素
- SREM key member [member …]
- 获取集合中的所有元素
- SMEMBERS key
- 判断元素是否在集合中
- SISMEMBER key member
- 集合运算命令
- 差集运算
- SDIFF key [key …]
- 交集运算
- SINTER key [key …]
- 并集运算
- SUNION key [key …]
- 差集运算
- 获取集合中的元素个数
- SCARD key
- 从集合中弹出一个元素:由于集合时无序的,所有spop命令会从集合中随机选择一个元素弹出
- SPOP key
SortedSet类型zset
在集合类型的基础上,有序集合为集合中的每个元素都关联一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在集合中,还能获取最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作
有序集合和列表
- 相同:
- 有序
- 可以获得某一范围的元素
- 区别:
- 列表是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多时,访问中间数据的速度会变慢
- 有序集合类型是使用散列实现的,所以即使是读取位于中间部分的数据也是很快的
- 列表中不能简单的调整某个元素的位置,但是有序集合可以(改分数)
- 有序集合比列表类型更加消耗内存
-
添加元素:元素已存在会覆盖分数,返回值是新加入到集合中的元素个数
- ZADD key score member [score member …]
-
获取排名在某个范围的元素列表:按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包括两端的元素)
- ZRANGE key start stop [WITHSCORES] 需要获取分数在尾部加上WITHSCORES参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oxNLid1O-1578993448744)(C:\Users\sunmingzhi\AppData\Roaming\Typora\typora-user-images\1578648433108.png)]
-
获取元素的分数
- ZSCORE key member
-
删除元素:移除有序集key中的一个或多个成员,不存在的成员将被忽略;当key存在单不是有序集类型时,返回错误
- ZREM key member [member …]
-
获取指定分数范围的元素
- ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
-
增加某个元素的分数:返回值是更改后的分数
- ZINCRBY key increment member
-
获取集合中元素的数量
- ZCARD key
-
获取指定分数范围内的元素的个数
- ZCOUNT key min max
-
按照排名范围删除元素
- ZREMRANGEBYRANK key start stop
-
获取元素的排名
- 从小到大:
- ZRANK key member
- 从大到小
- ZREVRANK key member
- 从小到大:
-
应用之商品销售排行榜
- 需求:根据商品销售对商品进行排序
- 思路:定义商品销售排行榜(sorted set 集合),key为item:sellsort,分数为商品销售量
通用命令
-
keys
- keys pattern
-
del
- del key
-
exists:确认一个key是否存在
- exists key
-
expire
EXPIRE key seconds
设置key的生存时间(单位:秒)key 在多少秒后会自动删除
TLL key
查看key剩余的生存时间
PERSIST key
清除生存时间
PEXPIRE key milliseconds
生存时间设置单位为:秒
-
rename
- rename oldkey newkey
-
type
- type key