Memcache 与Redis

来源:互联网 发布:白金数据电影 编辑:程序博客网 时间:2024/06/04 18:57

两者之间的区别:

就目前市场来看 Redis的市场占有率是比较高的

1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。

2. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。

3. Redis支持数据的备份

4. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

 

Memcache与redis如何实现消息队列:

Memcache 消息队列参考网址: http://www.111cn.net/phper/php-gj/52627.htm

Redis消息队列:

具体实现方法自己百度吧 本人百度了半天 没有显著的效果 这里只提供一个简单的思路利用 redis特有的list链表类型 或者set集合类型

啥是消息队列:保证先进先出的原则的一个数据列表。
程序原理:把先进的数据取出来并且删除掉。
redis如何实现 
使用的数据类型是list内置的队列系统
第一种方法:通过rpoplpush命令处理(这个命令主要是从第一个list的尾部移除元素并将其添加到第二个list头部,最后 返回被移除的元素值,整个操作是原子性的,如果第一个list为空或者不存在则返回nil)
第二种方法:通过spop(随机返回并删除名称为key的set中的一个元素)

 

Memcache内存分配机制:(参考网址:http://www.open-open.com/lib/view/open1376034527667.html)

按slab需求分配page,各slab按需使用chunk存储。
这里有几个特点要注意,

Memcached分配出去的page不会被回收或者重新分配

Memcached申请的内存不会被释放

slab空闲的chunk不会借给任何其他slab使用

Redis持久化操作:(参考网站:http://zhengdl126.iteye.com/blog/2191834)

快照持久化

快照是默认的持久化方式。关键字有save/bgsave(异步)

客户端也可以使用save或者bgsave命令通知redis做一次快照持久化。save操作是在主线程中保存快照的,由于redis是用一个主线程来处理所有客户端的请求,这种方式会阻塞所有客户端请求。所以不推荐使用。

工作原理:

当redis需要做持久化时,redis会fork一个子进程;子进程将数据写到磁盘上一个临时RDB文件中;当子进程完成写临时文件后,将原来的RDB替换掉

缺点:

在redis异常死掉时, 最近的数据会丢失(丢失数据的多少视你save策略的配置),所以这是它最大的缺点,当业务量很大时,丢失的数据是很多的。AOF方法可以做到全部数据不丢失,但redis的性能就要差些。AOF就可以做到全程持久化,只需要在配置文件中开启(默认是no),appendonly yes开启AOF之后,redis每执行一个修改数据的命令,都会把它添加到aof文件中,当redis重启时,将会读取AOF文件进行“重放”以恢复到 redis关闭前的最后时刻。

append only file (AOF持久化) 精细持久化

当使用AOF时,redis推荐同时使用BGREWRITEAOF。(作用:精简AOF文件大小)

原理:

通俗的讲:

首先redis会fork一个子进程;子进程将最新的AOF写入一个临时文件;父进程把内存中的最新执行的修改写入(这时仍写入旧的AOF,rewrite如果失败也是安全的);当子进程完成rewrite临时文件后,父进程会收到 一个信号,并把之前内存中增量的修改写入临时文件末尾;这时redis将旧AOF文件重命名,临时文件重命名,开始向新的AOF中写入。

详细的讲:

1. redis调用fork ,现在有父子两个进程
2. 子进程根据内存中的数据库快照,往临时文件中写入重建数据库状态的命令
3.父进程继续处理client请求,除了把写命令写入到原来的aof文件中。同时把收到的写命令缓存起来。这样就能保证如果子进程重写失败的话并不会出问题。
4.当子进程把快照内容以命令方式写到临时文件中后,子进程发信号通知父进程。然后父进程把缓存的写命令也写入到临时文件。
5.现在父进程可以使用临时文件替换老的aof文件,并重命名,后面收到的写命令也开始往新的aof文件中追加。

优化:

为以防万一(机器坏掉或磁盘坏掉),记得定期把使用 filesnapshotting 或 Append-only 生成的*rdb *.aof文件备份到远程机器上(利用scp命令: 将一台服务器上的文件拷贝到另一台服务器上)

Redis主从配置及原理:

(1)Slave服务器连接到Master服务器.

(2)Slave服务器发送SYCN命令.

(3)Master服务器备份数据库到.rdb文件.

(4)Master服务器把.rdb文件传输给Slave服务器.

(5)Slave服务器把.rdb文件数据导入到数据库中.

 

Redis集群(两个概念 哈希一致性/哈希槽)

参考网址: http://www.cnblogs.com/zhaoguihua/p/redis-005.html

0 0
原创粉丝点击