因为最近项目会用到redis,之前在项目中会用到memcached,所以对redis进行了一番研究,这里做一个较详细的整理以供分享!
一、redis介绍
redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务器。
Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。它提供Python,Ruby,Erlang,PHP客户端,使用很方便。问题是这个项目还很新,可能还不足够稳定,而且没有在实际的一些大型系统应用的实例。此外,缺乏mc中批量get也是比较大的问题,始终批量获取跟多次获取的网络开销是不一样的。
性能测试结果:
SET操作每秒钟 110000 次,GET操作每秒钟 81000 次。
二、redis安装
2.1、linux安装
2.1.1、下载安装包
Wget
(笔者当前的最新版是2.6.14,可以去
[root@localhost 4setup]# wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz
2.1.2,安装部署
[root@localhost 4setup]# tar xzf redis-2.6.14.tar.gz[root@localhost 4setup]# cd redis-2.6.14[root@localhost redis-2.6.14]# make
2.1.3、启动服务
在src目录下,运行redis-server。如果不指定conf文件的话,则按默认配置启动,如果指定conf文件的话则按conf文件的配置启动:
./redis-server ../etc/redis.conf
Redis 服务端的默认连接端口是 6379。
2.1.4、客户端连接
在src目录下,运行redis-cli。比如,连接本机的redis,可用如下命令:
./redis-cli -h 127.0.0.1 -p 6379
2.1.5、查看运行状态
如果在conf文件中设置了“daemonize no”的话,则运行状态信息会在终端直接打印;
如果设置了“daemonize yes”的话,则会以守护进程形式在后台运行,log输出位置则通过conf中的logfile设置,如:logfile /usr/local/redis/var/redis.log
2.1.6、停止redis实例
./redis-cli shutdown
redis.conf文件的详细设置可参考:
另外也可参考笔者分享的另一篇文章《谈谈Memcached与Redis》
笔者的单独的简易设置为:
daemonize yespidfile /usr/local/redis/var/redis.pidport 6379timeout 300loglevel debuglogfile /usr/local/redis/var/redis.logdatabases 16save 900 1save 300 10save 60 10000rdbcompression yesdbfilename dump.rdbdir /usr/local/redis/var/appendonly noappendfsync always
2.2、window安装
window上的安装、配置和linux类似,甚至更简单,笔者在这就不赘述了,也可以参考以下两个链接:
三、与memcached的比较
memcache和redis都是内存型数据库,数据保存在内存中,通过tcp直接存取,memcached优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存。在我们团队的项目中,一开始用的是memcached,后来用redis替代。
相比memcached:1、redis具有持久化机制,可以定期将内存中的数据持久化到硬盘上。2、redis具备binlog功能,可以将所有操作写入日志,当redis出现故障,可依照binlog进行数据恢复。3、redis支持virtual memory,可以限定内存使用大小,当数据超过阈值,则通过类似LRU的算法把内存中的最不常用数据保存到硬盘的页面文件中。4、redis原生支持的数据类型更多,使用的想象空间更大。5、一致性哈希被用在redis的sharding中,一般是在负载非常高需要水平扩展时使用。我们还没有用到这方面的功能,一般的项目,单机足够支撑并发了。redis 3.0将推出cluster,功能更加强大。详细的对比,可参考笔者分享的另一篇文章《谈谈Memcached与Redis》。