Redis学习及实践


因为最近项目会用到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 http://redis.googlecode.com/files/redis-2.6.14.tar.gz

  (笔者当前的最新版是2.6.14,可以去https://code.google.com/p/redis/downloads/list查看最新版)

1 [root@localhost 4setup]# wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz

  2.1.2,安装部署
123 [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文件的配置启动:
1 ./redis-server ../etc/redis.conf

  Redis 服务端的默认连接端口是 6379。
  2.1.4、客户端连接
  在src目录下,运行redis-cli。比如,连接本机的redis,可用如下命令:
1 ./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实例
1 ./redis-cli shutdown

redis.conf文件的详细设置可参考:
另外也可参考笔者分享的另一篇文章《谈谈Memcached与Redis》
笔者的单独的简易设置为:
daemonize yes
pidfile /usr/local/redis/var/redis.pid
port 6379
timeout 300
loglevel debug
logfile /usr/local/redis/var/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /usr/local/redis/var/
appendonly no
appendfsync always

2.2、Windows安装
Windows上的安装、配置和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》  。

Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里

推荐阅读:

Redis集群明细文档

Ubuntu 12.10下安装Redis(图文详解)+ Jedis连接Redis

Redis系列-安装部署维护篇

CentOS 6.3安装Redis

Redis配置文件redis.conf 详解

  • 1
  • 2
  • 下一页
【内容导航】
第1页:安装+配置 第2页:Redis的master/slave复制

相关内容