Redis VS Memcached
通过对比学习,可以加深理解组件的特性。下面两段文字,摘自各自的官方文档。
http://www.redis.io/
http://memcached.org/
Redis官方简介
Redis is an open source (BSD licensed), in-memory data structure store, used as database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.
Memcached官方简介
Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.
Memcached is simple yet powerful. Its simple design promotes quick deployment, ease of development, and solves many problems facing large data caches. Its API is available for most popular languages.
两者主要有以下区别(也是redis更优秀的地方)
redis可以用来做存储(storge), 而memccached是用来做缓存(cache)
这个特点主要因为其有”持久化”的功能.
存储的数据有”结构”,对于memcached来说,存储的数据,只有1种类型--”字符串”,
而redis则可以存储字符串,链表,哈希结构,集合,有序集合.
redis服务端支持高可用。
1.Redis安装与启动
比memcached安装还简单。
$ cd /usr/local/src $ wget http://download.redis.io/releases/redis-3.2.3.tar.gz $ tar xzf redis-3.2.3.tar.gz $ cd redis-3.2.3 #如果要执行make test测试,需要安装tcl $ yum install tcl $ make PREFIX=/usr/local/redis install $ cp /usr/local/src/redis-3.2.3/redis.conf /usr/local/redis/
工具列表
$ ls /usr/local/redis/bin/ redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
redis-benchmark 性能测试工具
redis-check-aof 日志文件检测工(比如断电造成日志损坏,可以检测并修复)
redis-check-dump 快照文件检测工具,效果类上
redis-cli 客户端
redis-server 服务端
redis 版hello world
$ /usr/local/redis/bin/redis-server $ /usr/local/redis/bin/redis-cli redis> set foo bar OK redis> get foo "bar"
2.配置文件(redis.conf)
由于redis比memcached功能更全,命令更多,配置参数也响应更多。简单分类下
模块 | 作用 | 参数 |
INCLUDES | 包含 | |
NETWORK | 网络 | |
GENERAL | 公共 | daemonize no #默认情况下redis 不是以守护进程的模式运行。 pidfile /var/run/redis.pid port 6379 logfile stdout logfile stdout |
REPLICATION | 复制 | slaveof <masterip> <masterport> #只在slave添加该参数,用于创建一个镜像服务; masterauth <master-password> |
SNAPSHOTTING | 快照 将内存中的数据刷写到磁盘上 | save <seconds> <changes> 触发刷新操作 stop-writes-on-bgsave-error yes rdbcompression yes dbfilename dump.rdb repl-timeout 60 |
SECURITY | 安全 | #requirepass foobared 配置redis访问密码的参数 #rename-command 重命名或禁用某些命令 |
LIMITS | 限制 | maxclients 10000 #最大并发连接数,默认为一万,这个跟系统本身的 open-file-limit 有关 maxmemory <bytes> maxmemory-policy |
APPEND ONLY MODE | appendfilename appendonly.aof #append file 的文件名称 appendfsync everysec #append log AOF日志文件同步的频率刷写磁盘的频率 fsync() 请求操作系统马上把数据写到磁盘上 Redis支持三种不同的模式: no:不要立刻刷,只有在操作系统需要刷的时候再刷。比较快。 always:每次写操作都立刻写入到aof文件。慢,但是最安全。 everysec:每秒写一次。折衷方案。 默认的 "everysec" 通常来说能在速度和数据安全性之间取得比较好的平衡。 no-appendfsync-on-rewrite no # 如果AOF的同步策略设置成 "always" 或者 "everysec",那么后台的存储进程(后台存储或写入AOF日志)会产生很多磁盘I/O开销。 某些Linux的配置下会使Redis因为 fsync() 而阻塞很久。 目前对这个情况还没有完美修正,甚至不同线程的 fsync() 会阻塞我们的 write(2) 请求。 为了缓解这个问题,可以用下面这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻止 fsync()。 这就意味着如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。 这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定) 如果有延迟的问题那就把这个设为 "yes",否则就保持 "no",这是保存持久数据的最安全的方式。 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb #AOF文件自动重写。 | |
LUA SCRIPTING | LUA脚本 | |
REDIS CLUSTER | 集群 |
用于开实例的集群模式 cluster-conf-file 设定了保存节点配置文件的路径, 默认值为 nodes.conf 。 cluster-node-timeout 15000 #节点互连超时的阀值 cluster-slave-validity-factor slave节点检测因数,开始failover的超时时限是通过factor与timeout的乘积来确定的。 cluster-require-full-coverage <yes/no> : 如果某一些key space没有被集群中任何节点覆盖,集群将停止接受写入。 |
SLOW LOG | 日志 | #Redis慢查询日志可以记录超过指定时间的查询。运行时间不包括各种I/O时间。 例如:连接客户端,发送响应数据等。只计算命令运行的实际时间(这是唯一一种命令运行线程阻塞而无法同时为其他请求服务的场景 slowlog-log-slower-than 10000(单位微秒) #慢查询日志长度,这个长度没有限制。只要有足够的内存就行可以通过 SLOWLOG RESET 来释放内存(当一个新的命令被写进日志的时候,最老的那个记录会被删掉。)。 slowlog-max-len 128 (ps:日志居然是在内存里面的,) 对于虚拟内存的使用, ### 警告!虚拟内存在Redis 2.4是反对的。 ### 非常不鼓励使用虚拟内存!! 在2.6中 根本没有其相关配置, |
LATENCY MONITOR | 监控报告 | ... |
EVENT NOTIFICATION | 通知,消息队列 | ... |
ADVANCED CONFIG | 高级 | ... |
参考资源
http://weipengfei.blog.51cto.com/1511707/1217504
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。