您的位置:首页 > 数据库 > Redis

Redis安装以及入门认识

2018-01-22 15:33 246 查看
什么叫做内置缓存?存放在jvm内置缓存中,比如oscahe   ehcahe,在内置缓存中查询不到,然后再查询数据库。
什么叫NOSQl:非关系型数据库。
Redis 和 Memcached的区别?redis可以持久化,高可用,灾难备份,

Redis:也叫远程字典服务器,也叫分布式的内存数据库,减轻数据库访问压力,redis是内存数据库,要比io数据库效率要高。

1.---------使用redis有哪些好处?-------------------

(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都很快

(2) 支持丰富数据类型,支持string,list,set,sorted set,hash

(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

2.----------redis的应用场景----------------

token生成,session共享,分布式锁,自增id(redis有一个方法自动获取),验证码

2.----------分布式数据库中CAP原理CAP+BASE----------------

(1).传统ACID是什么?原子性,一致性,隔离性,持久性
(2).NOSQL中的CAP: C强一致性(例如:评论点赞数前后端必须一样),  A可用性(只要保证网站别崩溃就行), P分布式容忍性
CAP只能三选二:  P是分区容错性是我们必须需要实现的,我们只能在一致性与可用性之间进行权衡,没有NOSQL系统能够同时满足这一点
CA:主要是指传统数据库     AP:大多数的网站选择        CP:Redis,Mongodb
(3).BASE:就是为了解决关系数据库一致性引起的问题,降低可用性而提出的解决问题.
(4).分布式+集群:   分布式:不同的多台服务器机器部署不同的服务模块    集群:不同的多台服务器部署相同的服务模块

3.---------redis持久化  主要两个 rdb 和 aop--------

RDB(Redis DataBase)定义:  在特定的时间段内将内存中的数据集快照写入磁盘
行话也叫snapshot快照,它恢复时是将快照的内容读入内存.
保存的是dump.rdp文件
Fork:重新拷贝一个线程,与原线程相同,主要是备份dump.rdp文件,此文件应该和原dump.rdp文件处于不同的主机
如何触发RDB快照:(1)根据默认的配置来进行保存
1分钟内改了1万次
5分钟改了10万次
15分钟内改了1次
(2)通过save命令
(3)执行flushall,但是执行之后文件是空的,没有意义
RDB的 优势:适合大规模的数据恢复   劣势:并不是实时存储,最后一次的备份可能有丢失,Fork效率有问题.
aof:在配置文件中将appendonly打开就可以启用这种方式,是将所有的操作记录全部记录下来aof文件如果记录错误,会有相关的命令去检查文件,会将相应的错误记录去掉.默认的出厂设置是每秒中保存一次,也就是最多丢失一秒钟的数据,最好将aof的文件也备份一份.
劣势:每次发生数据变化就会立即记录到磁盘,性能较差,但是数据的完整性较好
处理:当aof文件大到一定地步的时候,redis会进行压缩也叫重写,一般是默认64M的之后启动.

4.--------redis发布订阅-------

只需要了解即可,真正的企业不会用它做消息中间间,他的主要功能还是分布式缓存数据库

5.-------redis复制----------

主从复制,读写分离,高可用,集群。

常用四种方式:   
  一主二仆 : 一个master主要进行写的操作,两个salve主要进行读的操作
  薪火相传 : 一个master挂掉之后,将配置的salve转换成master角色
 反客为主 : 使当前数据库停止与其它数据库的同步,转成主数据,需要手动通过命令来执行
 哨兵模式  :目前主要的方式 反客为主的自动版 使用投票选举的方式选择一个master,底层会根据机器的情况在计算

以上四种方式在复制的时候又会分为全量复制和部分复制
1. redis什么时候会发生全量复制?
a) redis slave首启动或者重启后,连接到master时
b) redis slave进程没重启,但是掉线了,重连后不满足部分复制条件

2. redis什么时候会发生部分复制?
b) redis slave进程没有重启,但是掉线了,重连了master(因为slave进程重启的话,run id就没有了)
c) redis slave保存的run id与master当前run id一致
d) redis slave掉线期间,master保存在内存的offset可用,也就是master变化不大,被更改的指令都保存在内存

3. redis进程重启后会发生全量复制还是部分复制?
a) master重启时,run id会发生变化
b) slave重启时,run id会丢失
答:很显然,会发生全量复制,因为部分复制的条件之一run id已经不能满足

4.当全量复制或者同步复制完毕,增量是如何更新到slave的?
答:通过流式的命令更新,此时master就是slave的client,这样去理解。

5. run id如何查看?
答:通过info server命令查看

6.如果master和salve都宕机之后,应该怎么办?
使用keepalived监控,自动帮你重启,如果一直重启失败,会以邮件的形式通知.

6.---------redis事物--------------

redis对事物的支持是部分支持.
常用命令:
(1)MUTIL:标记一个事务块的开始。
(2)EXEC: 执行所有事务块内的命令。

(3)DISCARD :取消事务,放弃执行事务块内的所有命令。
(4)WATCH key [key ...] :监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
(5)UNWATCH : 取消 WATCH 命令对所有 key 的监视。

redis的事物执行步骤

(1)开始事务。
(2)命令入队。
(3)执行事务。

redis事物的五大特性
1.正常执行 : 就是按部就班执行一系列的命令
2.放弃事物 : 放弃一系列的操作
3.全体连坐 : 当操作命令有一个错误的,所有队列中的相关操作全部放弃,一次性的全部失败
4.冤头债主 : 事务中任意命令执行失败,其余的命令依然被执行(3和4的区别  相当与运行时异常和非运行时异常)
5.watch监控 :我们先说一下悲观锁和乐观锁
悲观锁(Pessimistic Lock), 每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

乐观锁(Optimistic Lock),每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。

同样的watch监控就相当于乐观锁,当提交时版本号小于当前数据库的版本号时就会报出异常.

6.---------redis宕机之后解决方案--------------

一般我们会用哨兵模式+keepalive
当发现宕机之后,哨兵机制会重新选择一个master,如果所有的redis宕机的话,会使用kepalive进行心跳检测,帮助我们自动重启,如果尝试多次仍然重启不来,就会给我发送邮件通知。

7.---------redis宕机之后数据会失效吗?-------------

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: