Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
官网redis.io
Redis与Memcached的比较
1,网络IO模型 Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, 网络层使用libevent封装的事件库,多线程模型可以发挥多核作用. Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大.2,内存管理方面
Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费. Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache.3,数据一致性问题
Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断.4,存储方式及其它方面
Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能.Redis除key/value之外,还支持list,set,sorted set,hash等众多数据结构,提供了KEYS进行枚举操作,但不能在线上使用,如果需要枚举线上数据,Redis提供了工具可以直接扫描其dump文件,枚举出所有数据,Redis还同时提供了持久化和复制等功能.
总结:
Redis使用最佳方式是全部数据in-memory. Redis更多场景是作为Memcached的替代者来使用. 当需要除key/value之外的更多数据类型支持时,使用Redis更合适. 当存储的数据不能被剔除时,使用Redis更合适. redis一般用于构建实时消息队列系统或者缓存。一、安装redis
centos 6.5 x86_64wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar xzvf redis-3.2.9.tar.gz
cd redis-3.2.9
make && make install
启动redis
/src/redis-server redis.conf 停止redis reis-cli shutdown kill -9可能会丢失数据设置Redis 随机启动
vi /etc/rc.local, 在其中加入下面一行代码 /root/redis-3.2.4/src/redis-server 查看客户端 列出所有连接 client list杀死某个连接
client kill number获取慢查询日志
slowlog get清空慢查询
slowlog reset探测服务延迟
redis-cli --latency
redis-cli退出quit
设置密码
config set requirepass 12345验证密码
auth 12345选择数据库
select db-index默认数据库是16个
config get 获取服务器配置信息config get * 查看所有配置
config set 临时设置
config rewrite 永久设置,将目前服务器的参数设置写入redis.conf
二、安装PHP支持插件
wget https://github.com/nicolasff/phpredis/archive/master.tar.gztar xzvf master.tar.gz
cd phpredis-master
phpize
./configure
make && make install
echo "extension = redis.so" >> /etc/php.ini
service php-fpm restart
查看phpinfo
![](http://static.oschina.net/uploads/space/2016/0621/103625_ifXF_2404183.png)
<?php
$redis = new Redis(); $redis->connect('127.0.0.1',6379); echo "Connection to server sucessfully!"; $redis->set('test','hello world!'); echo $redis->get('test'); ?>http://yourseverip/phpredis.php 输出Connection to server sucessfully! hello world!就成功了。