本章节的内容将会被分为三篇文章进行讲解完全块内容,第一篇紧张讲解一到六,第二篇紧张讲解七到十一(新增了十和十一),第三篇环绕第十二点。
以下正文的部分内容来自《PHP程序员口试笔试宝典》书本,如果转载请保留出处:
七、什么是Redis?

Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(凑集)、zset(sorted set,有序凑集)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。在此根本上,Redis支持各种不同办法的排序。与Memcached一样,为了担保效率,数据都是缓存在内存中。差异是Redis会周期性地把更新的数据写入磁盘或者把修正操作写入追加的记录文件,并且在此根本上实现了master-slave(主从)同步。
Redis的涌现,很大程度上填补了Memcached这类key/value存储的不敷,在部分场合可以对关系数据库起到很好的补充浸染。它供应了Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等客户端,利用起来很方便。
Redis支持主从同步。数据可以从主理事器向任意数量的从做事器上同步,从做事器可以是关联其他从做事器的主理事器。这使得Redis可实行单层树复制。存盘可以故意无意地对数据进行写操作。由于完备实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并吸收主理事器完全的发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
八、如何利用Redis?
set方法的利用示例:
<?php $Redis = new Redis(); $Redis->connect('127.0.0.1', 6378); $res = $Redis->set(aaa,\"大众bbbb\"大众); var_dump($res); //结果:bool(true) ?>
以下仅罗列各利用方法的汇总,详细利用方法可以参考示例和PHP的写法进行利用:
1、字符串类型的利用方法
2、Hash类型利用方法
3、List类型利用方法
4、Set类型利用方法
5、Sorted set类型利用方法
九、利用Redis须要把稳哪些问题?
与MySQL一样,Redis在利用过程中,也会碰到很多的问题,适当的技巧和优化将大大提高Redis的利用性能,提高做事的质量。现将常见的一些问题总结如下:
1.停滞利用keys 操作
keys操作实行速率将会变慢。由于keys命令的韶光繁芜度是O(n),个中n是要返回的keys的个数,由此可见这个命令的繁芜度就取决于数据量的大小了。当数据量比较大时,在这个操作实行期间,其他任何命令在实例中都无法实行,严重影响了性能。 可以利用scan命令来代替,scan命令通过增量迭代的办法来扫描数据库。
2.定位Redis速率降落的缘故原由
利用INFO commandstats命令来查看所有命令的统计情形,如命令实行了多少次,实行命令所耗费的毫秒数等信息。
3.只管即便利用hash的存储办法
Hash的存储办法会大大提高操作效率。
4.设置key值的存活韶光
无论什么时候,只要有可能就利用key超时的上风。一个很好的例子便是存储一些诸如临时认证key之类的东西。当你去查找一个授权key时——以OAUTH为例——常日会得到一个超时时间。这样在设置key的时候,设成同样的超时时间,Redis就会自动为你打消!
而不再须要利用KEYS 来遍历所有的key了。
5.对付很主要的数据,请利用非常处理机制
如果必须确保关键性的数据可以被放入Redis的实例中,那么请利用非常处理机制。险些所有的Redis客户端采取的都是“发送即忘”策略,因此常常须要考虑一个 key 是否真正被放到Redis数据库中了。加入非常处理机制是程序健壮性保障的条件。
6.多实例运用
无论什么时候,只要有可能就分散多Redis实例的事情量。Redis集群许可基于key范围分离出部分包含主/从模式的key。多实例是担保集群资源最大利用,集群稳定的主要保障。
自己整理了一篇“Redis如何实现集群?”的文章,关注"大众号:“琉忆编程库”,回答:“redis”,我发给你。
十、Redis和Memcache有什么不同?
(1)数据构造:Memcache只支持key value存储办法,Redis支持更多的数据类型,比如Key value、hash、list、set、zset; (2)多线程:Memcache支持多线程,Redis支持单线程;CPU利用方面Memcache优于Redis; (3)持久化:Memcache不支持持久化,Redis支持持久化; (4)内存利用率:Memcache高,Redis低(采取压缩的情形下比Memcache高); (5)过期策略:Memcache过期后,不删除缓存,会导致下次取数据数据的问题,Redis有专门线程,打消缓存数据;
十一、Redis如何实现持久化?
Redis是一个支持数据持久化的内存数据库,可以对Redis设置,让Redis周期性的把更新的数据同步到磁盘中担保数据持久化。 Redis支持的持久化策略有两种,分别是:RDB和AOF。
1、RDB持久化
RDB持久化的意思是:指定的韶光间隔内保存数据快照。Redis默认的持久化办法便是RDB。
RDB的事情事理为当 Redis 须要做持久化时,Redis 会 fork 一个子进程,子进程将数据写到磁盘上一个临时 RDB 文件中。当子进程完成写临时文件后,将原来的 RDB 更换掉,这样的好处便是可以 copy-on-write。
在Redis.conf 文件中RDB持久化的默认设置为:
save 300 10 #300秒内,如果超过10个key被修正,则发起快照保存;
RDB的优点:
由于RDB的持久化办法是可以在韶光间隔内进行数据快照,以是RDB非常适宜用于灾害规复。例如设置每小时备份一次,或每天备份一次总的,从而方便数据的追溯和还原到不同版本。
RDB的缺陷:
(1)特定时间下才进行一次持久化,以是易丢失数据;例如你设置30分钟备份一次数据,但是如果Redis做事器发生故障,那么就可能丢失好几分钟的数据没能备份。 (2)弘大数据时,保存时会涌现性能问题。
2、AOF持久化
AOF:先把命令追加到操作日志的尾部,保存所有历史操作。
AOF的事情事理是,每一个写命令都通过write函数追加到 appendonly.aof 中,当Redis涌现故障重启时,将会读取 AOF 文件进行“重放”以规复到 Redis 关闭前的状态。
Redis.conf 对AOF持久化的设置:
Redis.conf appendonly yes #开启全程持久化appendfsync always #每次有数据修正发生时都会写入AOF文件。appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
AOF的优点:
(1)数据非常完全,故障规复丢失数据少; (2)可对历史操作进行处理。
AOF的缺陷:
(1)在备份相同的数据集时,AOF的文件体历年夜于RDB的文件体积; (2)AOF利用fsync策略的话,AOF的速率可能会慢于RDB。
3、选择哪一种Redis做持久化策略更好?
由于Redis是支持同时开启RDB和AOF持久化策略的,以是数据备份安全性考虑的话两者都可以设置,当Redis重启后会优先利用AOF规复数据,担保丢失的数据最少。
如果要二选一的话,可以根据自己的业务进行选择:
(1)如果对数据的丢失哀求很高,可以选择AOF持久化策略; (2)AOF对Redis实行的每一条命令都会追加到磁盘中,会降落Redis的性能,如果对Redis的性能有所考虑,可以选择RDB持久化策略; (3)考虑数据灾害规复的情形,可以选择RDB持久化策略。
转载地址:https://mp.weixin.qq.com/s/xzk3YPCIdhpB4oO_3HAeYg