Redis – 超高性能 key-value 数据库
Redis已经出2.0了,是出手的时候了。
Redis的介绍 数据库主要类型有对象数据库,关系数据库,键值数据库等等,对象数据库太超前了,现阶段不提也罢;关系数据库就是平常说的MySQL,PostgreSQL这些熟的不能再熟的东西,至于键值数据库则是本文要着重说的,其代表主要有MemcacheDB,Tokyo Cabinet等等。 Redis本质上也是一种键值数据库的,但它在保持键值数据库简单快捷特点的同时,又吸收了部分关系数据库的优点。从而使它的位置处于关系数据库和键值数 据库之间。Redis不仅能保存Strings类型的数据,还能保存Lists类型(有序)和Sets类型(无序)的数据,而且还能完成排序(SORT) 等高级功能,在实现INCR,SETNX等功能的时候,保证了其操作的原子性,除此以外,还支持主从复制等功能。 详细描述参见官方手册,同时,官方提供了一个名为Retwis的项目的源代码,可以对照着官方介绍学习,注意其中关于Data Layout的描述,其他没什么。 项目实践中,多以关系数据库为主,不过合理的使用Redis这样的键值数据库,往往能扬长避短,比如说实现一个类似消息队列的功能,对MySQL来说,除非使用Q4M,否则很难满足高并发请求,不过对Redis来说,通过内建的Lists支持,消息队列就是小菜一碟。 Redis的安装 tar zxvf redis-version.tar.gz 由于没有make install,所以得把源代码目录里的关键文件手动复制到适当的位置: cp redis.conf /etc/ 如果内存情况比较紧张的话,需要设定内核参数: echo 1 > /proc/sys/vm/overcommit_memory 然后编辑redis.conf配置文件(/etc/redis.conf),按需求做出适当调整,比如: daemonize yes 如果要记录日志的话,最好先调整loglevel到一个合适的级别,然后设定logfile,如果不需要,则可以像上面这样直接把日子丢弃到/dev/null里,还有一点,缺省情况下,数据文件dump.rdb会被生成到当前目录,可以通过dir参数设定合适的目录。 此外,如果你决定把Redis用于产品环境,还要注意maxmemory选项,因为Redis在启动时会把所有数据加载到内存中,所以设定maxmemory相对安全。 接下来直接启动服务就可以了,只有配置文件一个参数: redis-server /etc/redis.conf 确认运行了之后,可以用redis-benchmark命令测试看看,还可以通过redis-cli命令实际操作一下,比如: redis-cli set foo bar 在设置键对应的值的时候,按照协议的规定是要提供数据大小这个参数的,上面的redis-cli命令之所以没有提供这个参数是因为redis-cli本身进行了封装。 可以通过telnet来验证一点: telnet 127.0.0.1 6379 更多命令介绍参考文档介绍。 Redis源代码里附带了多种客户端的扩展,比如说php(client-libraries/php),这是一个纯PHP的实现方案,也有二进制版本的实现(phpredis)。其他语言即便没有现成的扩展实现,也可以自己按照协议规范写一个扩展,应该不是什么难事。 Redis内存要求很高,如果你的数据量很大的话,可能会导致系统使用swap,这会使性能急剧下降。此时更好的方法是通过consistent hashing把数据分布到多个服务器上,文档上给出了简单的例子解释: For example imagine to have N Redis servers, server-0, server-1, …, server-N. You want to store the key “foo”, what’s the right server where to put “foo” in order to distribute keys evenly among different servers? Just perform the crc = CRC32(“foo”), then servernum = crc % N (the rest of the division for N). This will give a number between 0 and N-1 for every key. Connect to this server and store the key. 在线演示: 参考链接: http://github.com/jdp/redisent/tree/master PHP API:http://github.com/antirez/redisdotphp http://rediska.geometria-lab.net/ |
原文出处:http://hi.baidu.com/thinkinginlamp/blog/item/3358c93d174e35ce9f3d62bf.html
本文出自 传播、沟通、分享,转载时请注明出处及相应链接。
本文永久链接: https://www.nickdd.cn/?p=961