注意:所有文章除特别说明外,转载请注明出处.
Redis - FD
Redis 是一个基于内存的高性能key-value数据库,通过提供多种键值数据类型来适应不同场景下的存储需求。
应用场景:1.会话缓存(session cache)(数据查询、短链接、新闻内容、商品内容等) 2.全页缓存(FPC) 3.任务队列(秒杀、抢购、12306) 4.排行榜/计数器 5.发布/订阅 6.分布式集群架构中的session分离 7.数据过期处理
扩展:为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方案,就是NoSql数据库。NoSQL:not-Only SQL表示非关系型数据库,作为关系型数据库的良好补充。
1.Redis特点
优点:
1.速度快,因为数据都是存储在内存中的,类似于HashMap,HashMap的优势就在于查找和操作的时间复杂度都为O(1)。Redis在本质上是一个KEY-VALUE
类型的内存数据库,很像memcached
,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。
2.由于其实纯内存操作,所以性能非常好,是已知性能最快的key-value DB。
3.reids支持保存多种数据结构,此外单个value的最大限制是1GB,不想memcached只能保存1MB数据。
4.支持丰富的数据类型,支持string,list,set,sorted set,hash。
5.支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
6.丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
缺点:
7.reids的缺点主要是,数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
2.Redis支持的数据类型
- String 可以是字符串,整数或浮点数,对整个字符串或者字符串中的一部分执行操作。
- List 表示一个链表
- Sets 求交集/并集
- Sorted Set
- hashs
3.Redis需要将所有数据放到内存中的原因
1.Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。
2.如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。
3.如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。
注意:1.reids是单进程单线程的,利用队列技术将并发访问变成串行访问,消除传统数据库串行控制的开销。
2.
4.Redis常见性能问题解决
1.master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件。
2.如果数据比较重要,某个Slave
开启AOF
备份数据,策略设置为每秒同步一次。(slave?aof?是啥)
3.为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内。
4.尽量避免在压力很大的主库上增加从库。
5.从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3等,这样的结构方便解决单点故障问题,实现Slave对Master的替换,如果Master挂了可以立刻启用Slave1做Master,其他不变。
5.Redis与memcached的区别
1.memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型。
2.redis的速度比memcached快很多。
3.redis可以持久化其数据。(数据的持久化就是将内存中的数据模型转化为存储模型,数据模型是任何的数据结构或者是对象,存储模型可以是关系型/xml文件/二进制流) 狭义:持久化仅仅是将对象数据永久保存在数据库中。广义:持久化包括和数据库相关的各种操作,封装数据访问细节,为大部分业务逻辑提供面向对象的API。
6.Redis持久化方案区别/优缺点
首先我们知道,Redis为我们提供两种持久化的方式,RDB(Redis DataBase)/AOF(Append Only File)。
1.RDB方式:快照式的持久化方法,将某一时刻的数据持久化到磁盘中。
1.因为Redis在持久化的过程中,会首先将数据写入到一临时文件中,在持久化过程都结束之后才会用此临时文件替换已经持久化好的文件。所以因为这个特性让我随时进行备份。
2.于RDB方式,Redis单独创建一个子进程来进行持久化,主进程不会进行任何IO操作,这就确保Redis很好的性能。
3.如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。
2.AOF方式:将执行过的 写指令
记录下来,在数据恢复时按照从前到后
的顺序再将指令执行一遍。
1.AOF 命令以Redis协议追加保存每次写的操作到文件末尾。Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。默认的 AOF 持久化策略是每秒钟 fsync 一次(fsync是指把缓存中的写指令记录到磁盘中),因为在这种情况下,redis仍然可以保持很好的处理性能,即使redis故障,也只会丢失最近1秒钟的数据。
2.如果在追加日志时,恰好遇到磁盘空间满、inode满或断电等情况导致日志写入不完整,也没有关系,redis提供了redis-check-aof工具,可以用来进行日志修复。
3.因为此种是采用追加的方式,所以如果我们不做任何处理的话,AOF文件会变得越来越大。所以在此Redis提供AOF文件重写机制,即当AOF文件的大小超过所设定的阈值时,redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。
4.在进行AOF重写时,我们仍然采用是先写临时文件,最后在全部完成之后再替换掉的流程,所以在断电、磁盘满等问题都不会影响AOF文件的可用性。
7.如何维护集群之间的关系(集群之间如何建立连接)
集群?
8.Redis存取实体的方式
在存储的时候需要将实体 序列化
,然后可以当字符串一样存储,取数据也一样,取出来的数据要 反序列化
。
9.Redis保留时间
Redis保留时间在未设置的情况下会一直存在,除非服务停掉且没有保存到磁盘。如果已手动或自动保存过,则再次启动服务还会存在。
待续……….
10.Redis事务
Redis - SD
1.安装配置
1.首先去Redis的官网下载Redis的压缩包,然后编译Redis源码并启动。
2.启动Redis