Redis基本类型和基本操作
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
2.Redis常见命令
Redis是典型的key-value数据库key一般是字符串而value包含很多不同的数据类型
Redis为了方便我们学习将操作不同数据类型的命令也做了分组在官网 https://redis.io/commands 可以查看到不同的命令
不同类型的命令称为一个group我们也可以通过help命令来查看各种不同group的命令。
2.1.Redis通用命令
通用指令是部分数据类型的都可以使用的指令常见的有
-
KEYS查看符合模板的所有key
-
DEL删除一个指定的key
-
EXISTS判断key是否存在
-
EXPIRE给一个key设置有效期有效期到期时该key会被自动删除
(单位s) 整数回复具体如下 1如果设置了超时。
0如果未设置超时。例如.key不存在或者由于提供的参数而跳过操作 -
TTL查看一个KEY的剩余有效期
-1代表永久有效
-
MSET
通过help [command] 可以查看一个命令的具体用法例如
# 查看keys命令的帮助信息
127.0.0.1:6379> help keys
KEYS pattern
summary: Find all keys matching the given pattern
since: 1.0.0
group: generic
2.2.String类型
String类型也就是字符串类型是Redis中最简单的存储类型。
其value是字符串不过根据字符串的格式不同又可以分为3类
- string普通字符串
- int整数类型可以做自增、自减操作
- float浮点类型可以做自增、自减操作
不管是哪种格式底层都是字节数组形式存储只不过是编码方式不同。字符串类型的最大空间不能超过512m.
2.2.1.String的常见命令
String的常见命令有
-
SET添加或者修改已经存在的一个String类型的键值对
-
GET根据key获取String类型的value
-
MSET批量添加多个String类型的键值对
-
MGET根据多个key获取多个String类型的value
-
INCR让一个整型的key自增1
-
INCRBY:让一个整型的key自增并指定步长例如incrby num 2 让num值自增2
-
INCRBYFLOAT让一个浮点类型的数字自增并指定步长浮点数没有默认增长必须指定
-
SETNX添加一个String类型的键值对前提是这个key不存在否则不执行真正的新增功能如果是set存在过的键值会被覆盖
-
SETEX添加一个String类型的键值对并且指定有效期添加和设置有效期两个行为合二为一
2.2.2.Key结构
Redis没有类似MySQL中的Table的概念我们该如何区分不同类型的key呢
例如需要存储用户、商品信息到redis有一个用户id是1有一个商品id恰好也是1此时如果使用id作为key那就会冲突了该怎么办
我们可以通过给key添加前缀加以区分不过这个前缀不是随便加的有一定的规范
Redis的key允许有多个单词形成层级结构多个单词之间用’:'隔开格式如下
项目名:业务名:类型:id
这个格式并非固定也可以根据自己的需求来删除或添加词条。这样以来我们就可以把不同类型的数据区分开了。从而避免了key的冲突问题。
例如我们的项目名称叫 heima有user和product两种不同类型的数据我们可以这样定义key
-
user相关的keyheima:user:1
-
product相关的keyheima:product:1
如果Value是一个Java对象例如一个User对象则可以将对象序列化为JSON字符串后存储
KEY | VALUE |
---|---|
heima:user:1 | {“id”:1, “name”: “Jack”, “age”: 21} |
heima:product:1 | {“id”:1, “name”: “小米11”, “price”: 4999} |
并且在Redis的桌面客户端中还会以相同前缀作为层级结构让数据看起来层次分明关系清晰
2.3.Hash类型
Hash类型也叫散列其value是一个无序字典类似于Java中的HashMap结构。
String结构是将对象序列化为JSON字符串后存储当需要修改对象某个字段时很不方便
Hash结构可以将对象中的每个字段独立存储可以针对单个字段做CRUD
Hash的常见命令有
-
HSET key field value添加或者修改hash类型key的field的值
-
HGET key field获取一个hash类型key的field的值
-
HGETALL获取一个hash类型的key中的所有的field和value
-
HKEYS获取一个hash类型的key中的所有的field
-
HINCRBY:让一个hash类型key的字段值自增并指定步长
-
HSETNX添加一个hash类型的key的field值前提是这个field不存在否则不执行
2.4.List类型
Redis中的List类型与Java中的LinkedList类似可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。
特征也与LinkedList类似
- 有序
- 元素可以重复
- 插入和删除快
- 查询速度一般
常用来存储一个有序数据例如朋友圈点赞列表评论列表等。
List的常见命令有
- LPUSH key element … 向列表左侧插入一个或多个元素
- LPOP key移除并返回列表左侧的第一个元素没有则返回nil
- RPUSH key element … 向列表右侧插入一个或多个元素
- RPOP key移除并返回列表右侧的第一个元素
- LRANGE key star end返回一段角标范围内的所有元素
- BLPOP和BRPOP与LPOP和RPOP类似只不过在没有元素时等待指定时间而不是直接返回nil
2.5.Set类型
Redis的Set结构与Java中的HashSet类似可以看做是一个value为null的HashMap。因为也是一个hash表因此具备与HashSet类似的特征
-
无序
-
元素不可重复
-
查找快
-
支持交集、并集、差集等功能
Set的常见命令有
- SADD key member … 向set中添加一个或多个元素
- SREM key member … : 移除set中的指定元素
- SCARD key 返回set中元素的个数
- SISMEMBER key member判断一个元素是否存在于set中
- SMEMBERS获取set中的所有元素
- SINTER key1 key2 … 求key1与key2的交集
例如两个集合s1和s2:
求交集SINTER s1 s2
求s1与s2的不同SDIFF s1 s2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v5eSo0g9-1673958152553)(assets/L9vTv2X.png)]
2.6.SortedSet类型
Redis的SortedSet是一个可排序的set集合与Java中的TreeSet有些类似但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性可以基于score属性对元素排序底层的实现是一个跳表SkipList加 hash表。
SortedSet具备下列特性
- 可排序
- 元素不重复
- 查询速度快
因为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即可例如
-
升序获取sorted set 中的指定元素的排名ZRANK key member
-
降序获取sorted set 中的指定元素的排名ZREVRANK key memeber
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |