欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis的数据结构

程序员文章站 2022-06-05 19:38:45
...

Redis的数据结构

1 什么是Redis

Redis的数据结构
Redis(Remote Dictionary Server ) 是一种NoSQL的非关系型数据库。它存储数据的方式不像MySQL、Oracle、SQL Server这类关系型数据库一样以行和列的形式来存储数据。在Redis中没有以行和列形式构成的表格,有的只是key :value的键值对数据(类似于Map集合结构)

2 数据库的分类

在当今的互联网中,通常将数据库分为两类,即关系型数据库和非关系型数据库。

2.1 关系型数据库

关系型数据库是将复杂的数据归结为简单的行和列之间的关系,从而形成一个表格形式(即二维表格形式),数据以行和列的方式进行存储,存储和查询都十分方便。如图:
Redis的数据结构

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中的五种数据类型

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 集合的名字  键的名字 键的名字 : 取出多个键值对

应用场景如图所示:
Redis的数据结构

4.3 List类型命令

lpush  键  值  :表示的是将一个或者多个值 插入到列表的表头
lpop  键      :移除并返回这个列表的头元素   
rpush 键  值  :在列表的表位添加元素
rpop 键   从列表的右侧弹出元素
lrange 键 :索引(从第几个位置到第几个位置)
BLPOP 键:从列表的表头弹出一个元素  如果列表的表头没有元素  那么就阻塞等待
BRPOP 键:从列表的右侧弹出一个元素 如果没有元素 那么就阻塞等待

场景:栈的玩法(先进后出,后进先出)
LPUSH + LPOP RPUSH + RPOP
场景:构造队列(先进先出,后进后出)
LPUSH +RPOP RPUSH +LPOP
场景:阻塞队列
LPUSH+BRPOP
Redis的数据结构

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 集合的名字   开始  结束   :获取得分在某一个区间类的数据的个数