Redis:原理速成+项目实战——Redis常见命令(数据结构、常见命令总结)

‍作者简介:一位大四、研0学生,正在努力准备大四暑假的实习
上期文章:Redis:原理速成+项目实战——初识Redis、Redis的安装及启动、Redis客户端
订阅专栏:Redis速成
希望文章对你们有所帮助

Redis数据结构

  • Redis数据结构介绍
  • Redis通用命令
  • String类型
  • Key的层级格式
  • Hash类型
  • List类型
  • Set类型
  • SortedSet类型

Redis数据结构介绍

Redis是一个key-value数据库,key为String类型,而value类型有很多样。
Redis为方便学习,将操作不同数据类型的命令做了分组,在官网中可以查看到不同的命令:
Redis官网——常见命令commands
如下所示:
Redis:原理速成+项目实战——Redis常见命令(数据结构、常见命令总结)_第1张图片

Redis通用命令

为方便演示,我们在Redis命令行中创建简单数据库:
Redis:原理速成+项目实战——Redis常见命令(数据结构、常见命令总结)_第2张图片
通用命令是部分数据类型的都可以使用的指令,我们可以在官方文档中查看:
Redis:原理速成+项目实战——Redis常见命令(数据结构、常见命令总结)_第3张图片
官方文档对命令的解释是比较详细的,如果大家经常使用命令的话,有点印象的时候,其实在命令行里面看也是很方便的:

在这里,我就总结一下最常用的几个命令就好了:

1、KEYS:查看符合模板的所有key
Redis:原理速成+项目实战——Redis常见命令(数据结构、常见命令总结)_第4张图片
其中,*表示多个字符,?表示单个字符,容易想到这种模糊搜索的方式肯定是效率不太高的。
2、DEL:删除一个指定的KEY
Redis:原理速成+项目实战——Redis常见命令(数据结构、常见命令总结)_第5张图片
其中,mset是一种加入多种键值对的方式,在之后会介绍。
可以发现,del可以删除一个或多个key,要删除的某个key如果不存在也不会报错,命令运行的结果是成功删除的key的个数。
3、EXISTS:判断KEY是否存在,存在返回1,否则返回0
在这里插入图片描述
4、EXPIRE、TTL:
(1)EXPIRE:给一个key设置有效期,到期自动删除这个key
(2)TTL:查看一个KEY的剩余有效期

上面的命令定时为20s,利用TTL可以查看这个key还有多久到期,到-2就正式到期了,这时候这个key就会被自动删除。
Redis:原理速成+项目实战——Redis常见命令(数据结构、常见命令总结)_第6张图片
如果我们在增加key后没有设置失效时间,那么其TTL的返回值就是-1,表示永久有效。
为什么需要EXPIRE这个命令呢?因为Redis数据的存储是在内存中的,内存的空间相比磁盘珍贵的多的。

String类型

字符串类型是Redis中最简单的存储类型。
键值对中,根据字符串的格式不同,又可以分为3类:

string:普通字符串
int:整数,可以自增自减
float:浮点型,可以自增自减

KEY VALUE
msg hello world
num 10
score 92.5

无论哪种格式,其底层都是字节数组的形式来存储,只是编码方式不同,字符串类型的最大空间不能超过512M。
String常见命令如下:

命令 作用
SET 添加或修改已经存在的一个String类型的键值对
GET 根据key获取String类型的value
MSET 批量添加多个String类型的键值对
MGET 根据多个key获取多个String类型的value
INCR 让一个整型的key自增1
INCRBY 让一个整型的key按指定步长自增
INCRBYFLOAT 让一个浮点类型的数字按指定步长自增
SETNX 添加一个String类型的键值对,前提是该key不存在
SETEX 添加一个String类型的键值对,且指定有效期

实验:
Redis:原理速成+项目实战——Redis常见命令(数据结构、常见命令总结)_第7张图片
Redis:原理速成+项目实战——Redis常见命令(数据结构、常见命令总结)_第8张图片

Key的层级格式

Redis没有类似MySQL中的table的概念,因此要想个办法来区分不同类型的key。
其实,Redis的key允许有多个单词来形成层级结构,多个单词之间用’:'隔开,格式类似:

项目名:业务名:类型:id

若value是一个Java对象,例如一个user对象,则可以将对象序列化成JSON字符串后存储:

KEY VALUE
wxj:user:1 {“id”: 1, “name”: “Jack”, “age”: 21}
wxj:product:1 {“id”:1, “name”: “库里10”, “price”: 1999}

Redis:原理速成+项目实战——Redis常见命令(数据结构、常见命令总结)_第9张图片
这种层级格式我们可以打开可视化工具去比较清晰的查看,便捷我们的开发。

Hash类型

Hash类型也叫做散列,其value是一个无序字典,类似于Java中的HashMap。
而String结构将对象序列化为json字符串后存储,当需要修改字段的时候就会很不方便,必须完全的覆盖字符串。
而Hash可以将对象的每个字段独立进行存储,这样就可以对单个字段来做CRUD了:

KEY VALUE-field VALUE-value
wxj:user:1 name Jack
wxj:user:1 age 21
wxj:user:2 name Rose
wxj:user:2 age 18

Hash常见命令:

命令 作用
HSET key field value 添加或修改hash类型key的field的值
HGET key field 获取一个hash类型key的field的值
HMSET 批量添加多个hash类型key的field的值
HMGET 批量获取多个hash类型key的field的值
HGETALL 获取一个hash类型的key中的所有的field和value
HKEYS 获取一个hash类型的key中的所有的field
HVALS 获取一个hash类型的key中的所有的value
HINCRBY 让一个hash类型的key按指定步长自增
HSETNX 添加一个hash类型的key的field值,前提是该field不存在

实验部分就自行做实验,其实这无非就是个Map嵌套的Map而已。

List类型

Redis中的List与Java中的LinkedList类似(有序、元素可重复、插入删除快,查询慢),可以看成是一个双向链表。既支持正向检索也支持反向检索。

命令 作用
LPUSH key element 左侧插入一个或多个元素
LPOP key 左侧删除第一个元素
RPUSH key element 右侧插入一个或多个元素
RPOP key 右侧删除第一个元素
LRANGE key star end 返回一段角标范围内的所有元素
BLPOP、BRPOP 与LPOP、RPOP类似,但是在没有元素的时候会等待指定时间,而不是直接返回nil

在这里插入图片描述
这就跟双向队列似的,先push进去的是1,那么从左边取出来的就是3。

Set类型

Redis的Set结构与Java中的HashSet类似(无序、元素不重复、查找快、支持集合的交并差),可以看成一个value为null的HashMap。

命令 作用
SADD key member 向set中添加一个或多个元素
SREM key member 移除set中的指定元素
SCARD key 返回set中元素的个数
SISMEMBER key member 判断一个元素是否存在于set中
SMEMBERS 获取set中的所有元素

SortedSet类型

Redis中的SortedSet是一个可排序的set集合,与Java中的TreeSet类似,但底层数据结构差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加hash表。
SortedSet具备的特性:可排序、元素不重复、查询速度快。
所以SortedSet经常被拿来实现排行榜这样的功能。

命令 作用
ZADD key score member 添加一个或多个元素到sorted set ,如果已经存在则更新其score值
ZREM key member 删除sorted set中的一个指定元素
ZSCORE key member 获取sorted set中的指定元素的score值
ZRANK key member 获取sorted set 中的指定元素的排名
ZCARD key 获取sorted set中的元素个数
ZCOUNT key min max 统计score值在给定范围内的所有元素的个数
ZINCRBY key increment member 让sorted set中的指定元素自增,步长为指定的increment值
ZRANGE key min max 按照score排序后,获取指定排名范围内的元素
ZRANGEBYSCORE key min max 按照score排序后,获取指定score范围内的元素
ZDIFF、ZINTER、ZUNION 求差集、交集、并集

所有的排名都是升序的,要降序就需要在命令的Z后面添加REV。

你可能感兴趣的:(Redis速成,redis,数据结构,linux)