Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP,Java客户端,使用很方便。

Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实际会严重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。

Redis除了作为存储之外还提供了一些其它方面的功能,比如聚合计算、pubsub、scripting等,对于此类功能需要了解其实现原理,清楚地了解到它的局限性后,才能正确的使用,比如pubsub功能,这个实际是没有任何持久化支持的,消费方连接闪断或重连之间过来的消息是会全部丢失的,又比如聚合计算和scripting等功能受Redis单线程模型所限,是不可能达到很高的吞吐量的,需要谨慎使用。

本例子Linux采用的centOs5.4

下面来介绍一下redis的安装

[java] view plain copy print ?

  1. wget  http: //redis.googlecode.com/files/redis-2.0.4.tar.gz
  2. tar zxvf redis- 2.0 . 4 .tar.gz
  3. cd  redis- 2.0 . 4
  4. make

make完后 redis-2.0.4目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli

安装成功

启动服务

./redis-server

也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动

./redis-server redis.conf

redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了

注意启动的时候,会出现

WARNING overcommit_memory is set to 0!Background save may fail under

low memory condition. To fix this issue add'vm.overcommit_memory = 1' to /etc/sysctl.conf and  

[6020] 10 Aug 20:58:21 * The server is nowready to accept connections on port 6379

[6020] 10 Aug 20:58:21 - 0 clientsconnected (0 slaves), 533432 bytes in use

[6020] 10 Aug 20:58:30 - 0 clientsconnected (0 slaves), 533432 bytes in use

还有就是执行:sysctl vm.overcommit_memory=1

关于redis一些资料的学习可以到http://www.cnblogs.com/xhan/archive/2011/02/08/1949867.html 去学习 ,很全面

下面介绍一个简单java客户端Jedis,大家可以到https://github.com/xetorthio/jedis 这网址下载

redis作为NoSQL数据库的一种应用,响应速度和命中率上还是比较高效的。项目中需要用集中式可横向扩展的缓存框架,做了一点调研,即便redis、memcached存在效率上的差异(具体比较参考http://timyang.net/data/mcdb-tt-redis/),但其实都能满足目前项目的需求;但是redis还是比较风骚的,支持链表和集合操作,支持正则表达式查找key,目前项目缓存的结果大多是链表,如果链表新增或者修改数据的话,redis就体现出了极大的优势(memcached只能重新加载链表,redis可以对链表新增或者修改)

1:下载redis

下载地址 http://code.google.com/p/redis/downloads/list

推荐下载redis-1.2.6.tar.gz,之前这个版本同事已经有成功安装运行的经验,redis-2.0.4.tar.gz 这个版本我安装后无法操作缓存数据,具体原因后续再说

2:安装redis

下载后解压 tar zxvf redis-1.2.6.tar.gz 到任意目录,例如/usr/local/redis-1.2.6

解压后,进入redis目录

cd /usr/local/redis-1.2.6

make

拷贝文件

cp redis.conf /etc/ 这个文件时redis启动的配置文件

cp redis-benchmark redis-cli redis-server /usr/bin/ #这个倒是很有用,这样就不用再执行时加上./了,而且可以在任何地方执行

设置内存分配策略(可选,根据服务器的实际情况进行设置)

/proc/sys/vm/overcommit_memory

可选值:0、1、2。

0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

值得注意的一点是,redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为8G,这个时候也要同样分配8G的内存给child,如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)

开启redis端口,修改防火墙配置文件

vi /etc/sysconfig/iptables

加入端口配置

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

重新加载规则

service iptables restart

3:启动redis服务

[root@Architect redis-1.2.6]# pwd

/usr/local/redis-1.2.6

[root@Architect redis-1.2.6]# redis-server /etc/redis.conf

查看进程,确认redis已经启动

[root@Architect redis-1.2.6]# ps -ef | grep redis

root       401 29222  0 18:06 pts/3    00:00:00 grep redis

root     29258     1  0 16:23 ?        00:00:00 redis-server /etc/redis.conf

如果这里启动redis服务失败,一般情况下是因为redis.conf文件有问题,建议检查或找个可用的配置文件进行覆盖,避免少走弯路,这里建议,修改redis.conf,设置redis进程为后台守护进程

# By default Redis does not run as a daemon. Use 'yes' if you need it.

# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.

daemonize yes

4:测试redis

[root@Architect redis-1.2.6]# redis-cli

redis> set name songbin

OK

redis> get name

"songbin"

5:关闭redis服务

redis-cli shutdown

redis服务关闭后,缓存数据会自动dump到硬盘上,硬盘地址为redis.conf中的配置项dbfilename dump.rdb所设定

强制备份数据到磁盘,使用如下命令

redis-cli save 或者 redis-cli -p 6380 save(指定端口)

安装的时候,make完了之后再make install 就自动安装到/usr/local/bin下了,不用手动cp的

redis函数操作

http://www.runoob.com/redis/sorted-sets-zscore.html

出自http://blog.csdn.net/ajun_studio/article/details/6698147 和http://www.oschina.net/question/12_18065?sort=time

Welcome to redis-py’s documentation!

Indices and tables

http://redis-py.readthedocs.org/en/latest/

最新文章

  1. Android NDK debug 方法
  2. dsview
  3. SQL-基础知识
  4. tcp粘包问题(封包)
  5. 设置groupBox背景透明
  6. PAT 05-树6 Path in a Heap
  7. Delphi For Android 开发笔记 1 - 开发工具介绍
  8. Apache James搭建内网邮件服务器
  9. 【Android - 进阶】之自定义视图浅析
  10. 在VS上配置OpenCV
  11. 时间相关库<ctime>解析
  12. oracle 内连接,外连接
  13. java中外部类和内部类的访问控制符区别
  14. ZoomIt: 非PPT演示必备辅助软件
  15. Codeforces Round #485 (Div. 2) D. Fair
  16. C#扩展方法实现
  17. PHP添加Memcached扩展
  18. Python eval,exac,compile
  19. weblogic配置集群(二)
  20. [转][html][jquery]

热门文章

  1. 在eclipse中安装插件
  2. WebService学习过程中的心得和问题
  3. 拦路虎:jQuery
  4. iOS运行时 -- Runtime(摘抄自网络)
  5. js简单的工厂模式
  6. BZOJ-1880 Elaxia的路线 SPFA+枚举
  7. BZOJ1208 宠物收养所
  8. POJ1364 King
  9. (Beta)Let's-版本发布说明
  10. IOS基础之 (九) Foundation框架