Redis基础篇 - 5类基本数据结构

Redis基础篇 - 5总基本数据结构

  • 前言:现在Java开发都要求会点中间件,Redis又是其中最普遍的。不会点Redis都不好意思说是个开发了。虽然可能一般用的不多,最多用来做个缓存。那些集群,哨兵,持久化,分布式锁和消息队列可能都没用到
    但是总要有梦想是不是

大纲脑图:本文只了解基本数据结构
在这里插入图片描述

1. Redis是什么

  • Redis是一款开源的,基于内存的,K-V结构的,“单线程”,支持持久化的非关系型数据
  • 开源意味着免费使用。(别小看免费,要是MySQL和Oracle数据库一样也不会这么多人用了)
  • 支持持久化,可以固化到内存
  • 基于内存,K-V结构,利用hash查询,还在内存里面,查询非常高效
  • 支持集群,能提供高可用
  • 单线程,意味着线程安全,且代表了原子性。天生对事务友好,而且单线程意味着效率比较高(前提得是操作内存,如果是操作磁盘,单线程的程序估计就导致低效率了)

2. 五种基本数据结构

  • Redis是基于K-V数据结构的,其K都是String类型,5中类型指的是V。
  • 可以对比着Java的容器理解,K是容器实例名字用Hash举个例子,【hmset book book0 Java核心技术 book1 MySQL必知必会 book2 Redis深度历险】是不是很像HashMap,其中book是HashMap对象,book0 Java核心技术,book2 MySQL必知必会,book2 Redis是面的K-V数据
  • 另外,Redis的字符串不用加引号
2.1 String

String字符串是最基本的数据结构

2.1.1 基本特点
  • 动态字符串,用多少申请多少空间,可以扩展
  • 最大512M(咱也没弄清楚为什么是512M,我猜测是如果超过了512M迁移起来很不方便,毕竟是单线程,如果String太大,迁移就可能卡顿)
  • 小于1M的时候,扩展系数树 *2,也就是每次扩展放大一倍,当大于1M是,每次扩展是+1M (了解网络的的能知道,解决网络拥塞的算法里面,有个慢开始,拥塞避免算法。相当类似了)
2.1.2 应用场景

1.服务器存储Session
2.支持位图操作,可以用来存储签到数据
3. 分布式锁也是用的这个(不是利用其数据结构,什么数据结构都一样,里利用Redis的单线程特点)

2.1.3 CRUD语句
//增和改
set book Java核心技术
//批量处理
mset book1 Java核心技术 book2 Redis深度历险 book3 人生的智慧
//查询
get book
//批量查询
mget book1 book2
//删除
del book1 book2 book3
2.2 List(列表)

类比Java的LinkedList,是个双向链表

2.2.1 基本特点
  1. 两端都可以出队或入队
  2. 之前用的压缩列表(zipList)存储,后面改快速列表(quickList)
2.2.2 应用场景
  1. 消息队列(缺陷是不能重复消费,rpop之后数据就没了)
2.2.3 CRUD语句
//入队 往队尾添加和往队首添加
rpush book Java核心基础 Redis设计与实现原理 并发编程的艺术
lpush book MySQL技术内幕
//出队 队头弹出和队尾弹出
lpop book
rpop book
//删除 队列
del book
2.3 Hash(字典)

可以参考Java的HashMap基本是一致的,都是数组加链表的形式,不过扩容稍微有点不同

2.3.1 基本特点
  • 与HashMap类似
  • 元素较少时用压缩列表(zipList)存储
  • 渐进式扩容:扩容时有两个Hash,将旧的数据新Hash插入,如果查询的数据在就Hash上,马上将其存到新Hash上,新存的数据都放在新Hash上
  • 如果Hash变小,当容量小于数组的10%时,提供会缩小以节省空间
  • siphash算法(就认为是个很好的hash算法,细节咱暂不清楚,,,)
2.3.2 应用场景
  • 用来存储具体的实例对象,各个属性以K-V结构存储(参考我下面的语句,实例名dog001,属性name的值为 小花 属性weight 为10kg 属性sound为 汪汪汪)
2.3.3 CRUD语句
//添加
hset dog001 name 小花
//批量添加
hmset dog001 weight 10kg sound 汪汪汪
//查询全部
hgetall dog001
//查询单个key
hget dog001 name
//批量查询
hmget dog001 name weight
//删除
del dog001 
2.4 Set(集)

参考Java的HashSet理解

2.4.1 基本特点
  • 不允许重复数据,利用Hash实现,只不过其value都是null
  • 无序
2.4.2 应用场景
  1. 用来去重是极好的
  2. 用来统计访问人数
2.4.3 CRUD语句
//新增
sadd book Java核心技术 Java编程实现 MySQL实现原理
//变量
smembers book
//删除
del book
2.5 Zset(或者叫Sort Set,有序集)

这个有点坑,在不同的文章,叫法不一样。我最开始看的时候还以为Zset和SortSet是两种数据结构。我个人倾向Zset这种,因为其命令是Zadd这种

2.5.1 基本特点
  • 在Set的基础上带有Score字段,带有权重
  • 不允许重复
  • 元素较少时用压缩列表存储
  • 跳跃列表(咱还么看明白)实现查询
2.5.2 应用场景
  • 有优先级的消息队列
  • 统计用户一段时间的访问情况
2.5.3 CRUD语句
//添加
zadd book 50 Java核心技术 20 Redis深度历险 30 MySQL必知必会
//查询
zrange book 0 50
//删除
del book

3. 小结

  • 一共有五种数据结构(针对V)
  • K全部是String
  • Hash一般用来存储对象 渐进式Hash
  • List用的最多,可以做消息队列
  • Zset也可以用来做带权重的的队列

语法记忆

  • 删除语句是通用的 del
  • 各个和名字官僚例如get语句 Hash 是H开头,List是L开头 Zset是Z开头
  • 批量处理价m
  • 一般都是 get,set add 的变种

吐槽:之前看的时候就觉得Redis的基础语句蛮简单的,后面我电脑到手。收到看了下。发现基础语句比我想象的要,,简单些。就类似于MarkDown语句。多用自然就熟悉了。而且有共性
这篇博客本来应该是昨天就搞完的。结果今天下午2020-4-2 18:07:34还没搞完

  • 更多Redis语句学习可以去菜鸟教程
  • 不用安装,线上语句练习直接去Redis官网
  • 书籍推荐:《Redis深度历险:核心原理和应用实践》- 钱文品 注
						花间一壶酒,独酌不相亲。举杯邀明月,对影成三人
						博主:五更依旧朝花落
发布了35 篇原创文章 · 获赞 19 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/m0_37628958/article/details/105271022
今日推荐