Redis入门学习总结

Redis学习总结

对redis进行学习总结

Redis介绍

Redis是使用c语言开发的一个高性能键值数据库。Redis可以通过一些键值类型来存储数据。
键值类型: String字符类型 map散列类型 list列表类型 set集合类型 sortedset有序集合类型

Redis的数据结构

  • String
    介绍:Redis中的字符串结构是类似java中的ArrayList结构,是可以动态扩容的,扩容方式为翻倍现有容量,
    限制:大小限制在512M(key同样)
  • Hash
    介绍:Redis中的哈希表结构类似与Java中的HashMap结构,都是由数组+链表组成的二维结构,数组大小也是2^n次方,哈希碰撞频繁,有扩容和缩容(Java没有)的功能,扩容方式不是一次性的rehash,因为Redis是单线程的,rehash如果数据较多的情况下会耗费较长时间,导致线程卡顿,所以Redis采用了渐进式rehash的方案。它会同时保留两个新旧hash结构,在后续的定时任务以及hash结构的读写指令中将旧结构的元素逐渐迁移到新的结构中。这样就可以避免因扩容导致的线程卡顿现象,缩容同理。
    限制:2^32-1个元素
  • List
    介绍:类似队列/栈结构,可以从左进右出,右进左出,双向链表
    优化:使用ziplist结构。由于需要建立链表结构,而且redis中的是双向链表,所以需要大量指针导致占用内存,所有有ziplist结构(元素较少,由一段连续的内存组成,节省大量指针空间),然后有多个压缩链表组成一段quickList,这样既可以实现链表快速插入弹出功能,又节省了大量指针所需的空间
    限制:2^32-1个元素
  • Set
    介绍:与HashMap类似,不过是由value直接作为hash值,且一个集合中不会有相同value
    限制:2^32-1个元素
  • Sorted-set
    介绍:由value+score组成元素,score是来进行排序的标准,有hash表和跳跃列表组合的特殊结构
    限制:2^32-1个元素
    跳跃列表介绍:跳跃链表是一种特殊的链表结构,由于链表没有像数组一样拥有快速查找的功能,也无法使用二分法,所以通过使用跳跃列表来提高链表的查询功能(B+树就是一种跳跃列表)

在这里插入图片描述

Redis特性

  • redis储存在内存中
    redis不同于mysql,数据是储存在内存中而不是磁盘中,速度快很多。

  • 单线程
    redis是单线程的,减少了线程切换和竞争的开销,速度非常快。

  • 多数据库
    redis中提供16个数据库,编号为0-15,可以通过move实现数据转移

  • 持久化
    redis支持持久化,主要分为两种方式:RDB和AOF(可通过redis.conf配置文件进行配置)
    1.RDB:通过快照方式,定期将缓存内容写入磁盘中。(dump.rdb)
    优点:容易恢复,占用空间相对AOF小,性能也比AOF高
    缺点:高可用性较低,由于是定期进行保存,可能导致数据部分丢失
    900秒内有一个key修改,同步一次、300秒有10个修改、60秒有100000.
    2.AOF:通过设置同步方式来实现同步(数据写入appendonly.aof)
    1、每秒同步:性能较高,不过可能会出现数据丢失
    2、每修改同步:实现完全数据同步,不过性能较低
    3、不同步
    优点:高可用性较高,保证数据安全
    缺点:保存相同数据下文件大小比RDB大,且性能比RDB低
    在这里插入图片描述
    :可以两种模式都开启

  • 事务支持
    redis支持事务

multi  #开启事务
exec  #提交事务
discard  #事务回滚

Redis的主从复制

  • 什么是主从复制?

持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,如下图
在这里插入图片描述
说明:
主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务。
主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上。
只有一个主redis,可以有多个从redis。
主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求
一个redis可以即是主又是从,如下图:在这里插入图片描述
此应用自 https://juejin.im/post/5a912b3f5188257a5c608729#heading-31

注意

  • 从java对象储存到redis中,需要进行序列化,从redis取出为java对象,需要反序列化

参考博客:
https://juejin.im/post/5a912b3f5188257a5c608729#heading-31
https://juejin.im/post/5b53ee7e5188251aaa2d2e16#heading-4
Redis安装步骤

猜你喜欢

转载自blog.csdn.net/qq_41797857/article/details/89098849