REDIS

总结一下redis 为啥横空出世:

 

1,Redis支持 string :2进制最大512;list:按照添加顺序保存顺序的字符序列表。set:无序的字符串集合,不存在重复元素。sorted set:已排序的字符串集合。hash :key/valve对的一种集合。

数据类型比mencach 多(string),使用方便。

2,单进程单线程的,利用队列技术将并发问题变为串行访问,消除了传统数据库串行的控制的开销。

多线程处理会涉及到锁,而且多线程处理会涉及到线程切换而且消耗CPU,但cpubu不是Redis的瓶颈,Redis受网络带宽,机器内存的影响。---单线程无法发挥多喝Cpu性能,不过可以通过通过在单片机开启Redis实例来解决。(求解?)

 

Redis 优势:

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

2),支持丰富的类型:string ,list ,set ,sorted set,hash

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

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

比mencached的优势

5),可以持久化数据。数据类型丰富,memncached  只有string。

6),支持数据备份,即master/slave 模式的数据备份。

 

Redis 数据淘汰策略:

 

Redis内存数据及上升到一定大小,就会执行淘汰策略:

volatile-ttl :从已设置的过期的数据集中,挑选将要过期的数据集淘汰。

volatitle-lru:从过期的数据集中挑选最近最少使用的淘汰。

volatitle-random;从已设置的数据集中任意挑选数据淘汰。

allkeys-lru:从数据集中挑选最近最少使用的数据淘汰。

allkeys-random:

noenviction: 进制淘汰数据。

 

Redis的持久化方式:

RDB 持久化,原理是将Redis在内存中的数据记录定时dump到磁盘上的rdb文件,指定时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入零时文件,写入成功后,再替换之前的文件,用二进制压缩存储。

AOF持久化

原理是将Redis日志已追加的方式写入文件。

一以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录。可以打开文件查看详细的记录。当服务器重启的时候,重新执行这些命令来恢复原始数据。AOF命令以Redis协议追加每次的写操作到文件尾,Redis换可以对AOF文件进行后台重写,是得AOF文件的体积不至于过大。

 

-------------------------------------------------------------mmmmmmmmmmmmmmmmmmmmm-----------------------------------------------------------------------------mmmmmmmmmmmm-----------

如何选择Redis持久化方式策略?

    在介绍持久化策略之前,首先要明白无论是RDB还是AOF,持久化的开启都是要付出性能方面的代价的。对比RDB持久化,一方面是bdsave在进行fork操作时Redis主进程会阻塞,另一方面,子进程向硬盘写数据也会带来IO压力;对于AOF持久化,向硬盘写数据的频率大大提高(everysec策略下为秒级),IO压力更大,设置可能造成AOF追加阻塞文件。此外,AOF文件的重写与RDB的basave类似,会有fork时的阻塞和子进程的IO压力问题。相对来说,由于AOF向硬盘中写数据的频率更高,因此对Redis主进程性能的影响会更大。

    在实际生产环境中,根据数据量、应用对数据的安全要求、预算限制等不同情况,会有各种各样的持久化策略;如完全不使用任何持久化,使用RDB或AOF一种,或同事开启RDB和AOF持久化等。此外,持久化的选择必须与Redis的主从策略一起考虑,因为主从复制与持久化同样具有数据备份的功能,而且主机master和从机slave可以独立的选择持久化方案。


Redis集群的主从复制模型是怎样的?

    为了是在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群是用了主从复制模型,每个节点都会有N-1个复制品


Redis集群会有写操作丢失吗?为什么?

    Redis并不能保证数据强一致性,这意味着在实际中集群在特定的条件下可能会丢失写操作


Redis集群之间是如何复制的

异步复制


Redis如何做内存优化

    尽可能使用散列表(hashes),散列表(是说列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面,比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户所有信息存储到一张散列表中


Redis回收进程如何工作?

    一个Client运行了新的命令,添加了新的数据,Redis会检查内存使用情况,如果大于maxmemory的限制,则根据设定好的策略进行回收


Redis常用的使用场景

Session共享(单点登录)

页面缓存

队列

排行榜/计算器

 

转载于:https://www.cnblogs.com/lining-ning/p/10901020.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值