Redis的数据结构
程序员文章站
2022-06-05 19:38:45
...
Redis的数据结构
1 什么是Redis
Redis(Remote Dictionary Server ) 是一种NoSQL的非关系型数据库。它存储数据的方式不像MySQL、Oracle、SQL Server这类关系型数据库一样以行和列的形式来存储数据。在Redis中没有以行和列形式构成的表格,有的只是key :value的键值对数据(类似于Map集合结构)
2 数据库的分类
在当今的互联网中,通常将数据库分为两类,即关系型数据库和非关系型数据库。
2.1 关系型数据库
关系型数据库是将复杂的数据归结为简单的行和列之间的关系,从而形成一个表格形式(即二维表格形式),数据以行和列的方式进行存储,存储和查询都十分方便。如图:
2.2 非关系型数据库
非关系型数据库,通常泛指NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”。它对于数据的存储的特点都是去掉关系数据库的关系型特性,即对于数据的存储只保留key-value(键-值)属性,类似于map集合的键值对关系。通过key来添加、查询或者删除数据。
3.Redis的特点
- Redis的数据存储是基于内存的,其优点就是数据提取速度快,缺点是一旦断电发生宕机,数据就会丢失。
- Redis的使用场景对数据的要求并不是严格的。(其一旦宕机就会发生数据丢失,因此银行管理系统这种安全系数要求高的一般不使用Redis来存储数据)
- 由于Redis属于NoSQL非关系型数据库,因此Redis的所有存储数据结构都是以Key-Value的形式进行存储的。
- Redis中提供了五种不同的数据类型来满足不同的开发场景 String(字符串) Hash(哈希表) List(双向链表) Set(集合) Sorted Set(排序set)
- Redis中提供了3种持久化模式来保证数据的持久化。(简单来说就是将内存的数据放到硬盘)
- Redis还提供多种淘汰策略来满足缓存的数据一定是最新的。
- Redis中提供了三种架构(主从、哨兵、集群)
4.Redis中的五种数据类型
4.1 String类型命令
set key value:设置一个键值对的数据
get key:获取某一个键值对中的值
mset k1 v1 k2 v2... :同时设置多个键值对
mget k1 v1 k2 v2... :同时获取多个键值对的值片
incr key ;自增(对值自增)
decr key :自减(对值自减)
incrby key 步长 :一次性增加多少
decrby key 步长 :一次性减去多少
4.2Hash类型命令
hset 集合的名字 键的名字 值 : 放入一个键值对(键不可重复)
hget 集合的名字 键的名字 : 按照键来取值
hlen 集合的名字 : 获取当前集合中键值对的数量
hdel 集合的名字 : 键的名字
hincrby 集合的名字 键的名字 : 增加的数量
hgetall 集合的名字 : 直接实现全选的功能
hexists 集合的名字 键的名字 : (判断某个人的购物车里是否有某一件商品)
hkeys 集合的名字 : 获取当前这个人的所有的购物车中的商品
hvals 集合的名字 : 取出当前集合中所有的值
hmset 集合的名字 键的名字 值的名字 键的名字 值的名字 : 放入多个键值对
hmget 集合的名字 键的名字 键的名字 : 取出多个键值对
应用场景如图所示:
4.3 List类型命令
lpush 键 值 :表示的是将一个或者多个值 插入到列表的表头
lpop 键 :移除并返回这个列表的头元素
rpush 键 值 :在列表的表位添加元素
rpop 键 从列表的右侧弹出元素
lrange 键 :索引(从第几个位置到第几个位置)
BLPOP 键:从列表的表头弹出一个元素 如果列表的表头没有元素 那么就阻塞等待
BRPOP 键:从列表的右侧弹出一个元素 如果没有元素 那么就阻塞等待
场景:栈的玩法(先进后出,后进先出)
LPUSH + LPOP RPUSH + RPOP
场景:构造队列(先进先出,后进后出)
LPUSH +RPOP RPUSH +LPOP
场景:阻塞队列
LPUSH+BRPOP
4.4 Set类型命令
sadd 键 值 :就是向set集合中添加一个值 (可以用在点赞上,因为set不能存储相同的数据,可防止多次点赞)
srem 键 值 :删除这个键中的某一个值 (可以用在取消点赞上)
sismember 键 值 : 检查某一个值是否在这个集合中存在
smembers key :表示的是获取这个集合中的所有数据
srandmemebr key count :从集合中选出count个元素 ,元素不从key中删除(值是随机的)
spop key count :从集合中选中count个元素 元素从集合中删除
sinter key1 key2 ... :做做交集运算
sinterstore desternation key:将交集的结果存入新的集合
sunion key1 key2 ... :并集运算
sunionstore desternation key :将并集的结果存入这个集合
sdiff key1 key2 ... :差集运算
adiffstore desternation key :将差集的结果存入这个集合
scard key :计算当前set集合中的元素的个数
4.5 Sorted Set类型命令
备注:Sorted Set是自动根据打分实现排序的(排序是从0开始的)
zadd 集合的名字 打分 键的名字 :向Sorted Set中添加一个数据
zrange 集合的名字 开始的位置 结束的位置 : 获取集合中某一个区间的值(按分数从小到大进行排序)
zincrby 集合的名字 加的分值 key的名字 //给某一个值添加分值
zrevrank 集合的名字 键的值 :查看当前数据的排名
zrem 集合的名字 键的名字 :删除某一条数据
zscore 集合的名字 键的名字
zcount 集合的名字 开始 结束 :获取得分在某一个区间类的数据的个数