Redis笔记(待完)

本文介绍了数据库从MySQL到NoSQL的发展历程,重点讨论了NoSQL在处理大数据量和高性能方面的能力。NoSQL数据库如MongoDB、HBase提供了多样化数据模型。Redis作为键值对数据库,适用于高速缓存和持久化,支持事务、发布订阅模型以及主从复制。针对缓存问题,文章提出了缓存穿透、缓存击穿和缓存雪崩的解决方案,并探讨了Jedis和SpringBoot整合Redis的应用。
摘要由CSDN通过智能技术生成

1、NoSQL概述

数据库发展的几个重要结点:
(1)APP+DAL+MySQL(data access layer,数据访问层,Hibernate、mybatis)

问题:
    单机硬盘、内存容量小
    读写混合,单机压力大
(2)Memcached(缓存)+MySQL+垂直拆分
问题:
    缓存只能解决读的压力,并未解决写的压力
(3)MySQL主从读写分离
问题:
    MySQL主库的写压力仍然大
    MyISAM在高并发下出现严重的锁问题(MyISAM使用表锁,InnoDB使用行锁)
(4)MySQL开始使用InnoDB做默认存储引擎+分表分库(水平拆分)+MySQL集群(水平拆分)
问题:
    不适应处理大数据量
    可扩展性差(实现技术复杂)
    大数据下,IO操作压力大
    表结构更改困难
(5)NoSQL+MySQL(当今)

Q:为什么要使用NoSQL?
A:关系型数据库不能很好的适应大数据时代中各种各样的数据类型(个人信息、地理位置、社交网络等),但NoSQL对大数据的适应性很好。

NoSQL的特点
(1)方便扩展(因为数据之间没有关系)
(2)高性能处理大数据量(因为细粒度缓存)
(3)数据类型多样(对数据库设计要求不高)
(4)NoSQL比RDBMS编程简单
(5)NoSQL的数据结构更多样化(键值对、列、文档、图等)
(6)高性能、高可用、高可扩展性(水平拆分,扩展机器)

2、阿里巴巴架构演进

参考:
阿里巴巴中文站架构技术实践:https://max.book118.com/html/2018/1219/7056023040001165.shtm

3、NoSQL数据模型

 

4、NoSQL四大分类

KV键值对数据库:
Redis、Tair、memecache

文档型数据库:
MongoDB、ConthDB

列存储数据库:
HBase、分布式文件系统

图关系数据库:
Neo4j、InfoGrid

5、CAP

6、BASE

7、Redis简介

Redis(Remote Dictionary Server, 远程字典服务)是一个开源的、C语言编写的、可基于内存、可持久化的、日志型的KV数据库。
Redis能实现 :
(1)数据内存存储和持久化
(2)可用于实现高速缓存
(3)发布订阅系统、地图信息分析、计数器(浏览量)等等。。。。。。

Redis命令
参考:
菜鸟教程:https://www.runoob.com/redis/redis-commands.html
redis官网命令集:https://redis.io/commands

参考:
官网:https://redis.io/
中文网:https://www.redis.cn/

8、五大基本数据类型

9、三种特殊数据类型

10、Redis配置详解

11、Redis持久化

redis是基于内存的数据库,如果不使用持久化,数据断电即失。

1、rdb(redis database)

(1)每间隔一段时间,redis进行一次持久化操作。
(2)父进程分叉出一个子进程和内存页面副本,并与子进程共享内存,子进程将共享的内存数据写入临时的rdb文件(内存数据快照),并将其覆盖正式的rdb文件。(默认保存的文件名是 dump.rdb)
(3)父进程在子进程持久化的时候,仍能处理client的写请求,但写入的不是真实内存,而是内存页面的副本,在子进程完成持久化后,将该内存页面副本替换真实内存。
ps:rdb方式进行持久化,主进程不进行io操作,并在持久化时持续处理写请求;但最后一次持久化后的操作可能丢失。

2、aof(append only file)

以日志的形式追加记录所有的写操作指令,并保存在aof文件中。启动redis,将把aof所有的指令重新执行一遍以恢复内存数据。
优势:
sync every ops,数据完整性更好
sync every secs,可能丢失一秒数据,但效率会高
never sync,效率最高
劣势:
aof更消耗存储空间,修复速度也比rbd更慢
aof运行效率也更慢

12、事务操作

13、订阅/发布模型

14、主从复制

主从复制的目的是为了避免单点故障。

参考:https://blog.csdn.net/weixin_39764056/article/details/104345786

15、哨兵模式

哨兵的作用有两个:
1、通过发送命令,监控各个服务器的运行状态。
2、当监测到服务器down机时,通过发布/订阅模式,通知其他slave服务器修改配置文件,切换master服务器。

多哨兵模式
单哨兵模式可能会出现问题,因此存在多哨兵共同监控服务器,哨兵之间也会相互监测。

主观下线:一个哨兵发现master服务器down机。
客观下线:发现master服务器down机的哨兵达到一定数量时,其中一个哨兵发起failover操作,多个哨兵一起投票,选举一个正常运行的slave服务器,发起failover的哨兵发起投票结果,并通过订阅/发布模式通知其他哨兵切换master。

哨兵模式的配置参考:https://www.jianshu.com/p/06ab9daf921d

16、缓存穿透及解决方案(面试高频,工作常用)

当大量用户同时去查询缓存中不存在的数据项,将会造成数据库的高负荷,就像缓存被穿透了。

解决方案:
(1)布隆过滤器
布隆过滤器是一种数据结构,对所有可能的查询参数以hash形式存储,在控制层先进行校验,查询的hash结果在布隆过滤器中不存在,则丢弃该请求,避免对底层存储系统进行大量无效查询。
布隆过滤器原理参考:
https://www.cnblogs.com/zqyx/p/13673597.html
https://baike.baidu.com/item/%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8/5384697?fr=aladdin
(2)缓存空对象
对于没有命中的缓存读请求,在缓存中添加一个空对象,避免对数据库服务器的大量空结果读访问。
缺点:
空对象消耗了一定的内存空间。
缓存中的空对象可能会与服务器中的数据存在数据不一致的情况(缓存空对象未超时,但该对象的键在数据库中被写入了内容),可能会影响业务。

17、缓存击穿及解决方案(面试高频,工作常用)

当某个key(数据库记录)具有较大的并发访问量,当该key在缓存中过期,对该key的大量访问将会直接落到底层存储系统上,并且该底层存储系统也会回写缓存,这将造成底层存储系统的压力过大。

解决方案
(1)热点数据取消过期时间
(2)加互斥锁(分布式锁)
保证每个key在一个时间内只有一个线程访问,其他线程不能持有该锁,只能等待。
缺点:这种方式对分布式锁的压力较大。

18、缓存雪崩及解决方案(面试高频,工作常用)

某个时间段内,缓存集中过期失效。(场景比如:redis宕机、业务某种需求等)

解决方案:
(1)redis高可用:
增设redis服务器,搭建集群,异地多活。
关闭不必要的服务。
(2)限流降级(spring cloud)
缓存失效后,通过加锁、队列的方式控制读数据库、写缓存的线程数量。
(3)数据预热:
预先访问可能存在高并发访问的数据(提前回写缓存)、设置均匀分布的失效时间。

19、基础API之Jedis详解

20、SpringBoot集成Redis

SpringData提供数据及数据库访问技术,基于Spring编程模型,保留了基础数据存储的特殊特征。
Spring1.x中的SpringData使用jedis,Spring2.x中的SpringData使用lettce实现SpringBoot和Redis整合:
(1)jedis:TODO
(2)lettuce:TODO

21、Redis实践

 

 

 

 

 

 

 

Redis API文档Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。redis的官网地址,非常好记,是redis.io。(域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)目前,Vmware在资助着redis项目的开发和维护。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值