Redis是一个key-value存储系统。和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表)、sets(集合)和zsets(有序集合)几种数据类型。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
下面是官方的bench-mark数据:
- The test was done with 50 simultaneous clients performing 100000 requests.
- The value SET and GET is a 256 bytes string.
- The Linux box is running Linux 2.6, it’s Xeon X3320 2.5Ghz.
- Text executed using the loopback interface (127.0.0.1).
Results: about 110000 SETs per second, about 81000 GETs per second.
更多详细数据请见官方bench-mark page(http://code.google.com/p/redis/wiki/Benchmarks)
Redis的代码遵循ANSI-C编写,可以在所有POSIX系统(如Linux, *BSD, Mac OS X, Solaris等)上安装运行。而且Redis并不依赖任何非标准库,也没有编译参数必需添加。redis的安装出奇的简单,这可能也是他风靡的一个原因,让人很容易上手,不像某些东西,编译阶段就能让人完全绝望。
先去官网下载源码:
wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz
解压:
tar –zxvf redis-2.4.6.tar.gz
编译
需要说明的事,redis的安装非常简单,已经有现成的Makefile文件,直接运行make命令即可。
make
make install
Redis 由四个可执行文件:redis-benchmark、redis-cli、redis-server、redis-stat 这四个文件,加上一个redis.conf就构成了整个redis的最终可用包。它们的作用如下:
现在就可以启动redis了,redis只有一个启动参数,就是他的配置文件路径。
redis-server /etc/redis.conf
注意,默认复制过去的redis.conf文件的daemonize参数为no,所以redis不会在后台运行,这时要测试,我们需要重新开一个终端。修改为yes则为后台运行redis。另外配置文件中规定了pid文件,log文件和数据文件的地址,如果有需要先修改,默认log信息定向到stdout.
下面是redis.conf的主要配置参数的意义:
这时你可以打开一个终端进行测试了,配置文件中默认的监听端口是6379
我们可以开启一个Redis客户端进行测试
[root@SNDA-192-168-1-114 ~]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
[root@SNDA-192-168-1-114 ~]# redis-server /etc/redis.conf
[root@SNDA-192-168-1-114 ~]# redis-cli
redis 127.0.0.1:6379> quit
redis 的作者antirez曾称其为一个数据结构服务器(data structures server),这是一个非常准确的表述,redis的所有功能就是将数据以其固有的几种结构保存,并提供给用户操作这几种结构的接口。我们可以想象我们在各种语言中的那些固有数据类型及其操作。
redis目前提供四种数据类型:string,list,set及zset(sorted set)和Hash。
在官网上给出了所有支持的接口列表,并副副附有详细的介绍,地址:
http://code.google.com/p/redis/wiki/CommandReference
另外,作者还提供了一个非常贴心的web命令行模拟页面,供初学者试用redis,地址:
http://try.redis-db.com/
redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。
save seconds updates,save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。
appendonly yes/no ,appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
appendfsync no/always/everysec ,appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。
redis支持master-slave的主从配置,配置方法是在从机的配置文件中指定slaveof参数为主机的ip和port即可
项目首页,下方是各种语言支持列表:
http://code.google.com/p/redis/
作者在wiki中给出了一个非常好的例子,以使我们可以快速上手,地址:
http://code.google.com/p/redis/wiki/TwitterAlikeExample
同时作者推荐的另一个教程,地址:
http://labs.alcacoop.it/doku.php?id=articles:redis_land
一个redis爱好者创建的相关问题讨论网站:
http://www.rediscookbook.org/
为什么使用 Redis及其产品定位
http://www.infoq.com/cn/articles/tq-why-choose-redis
Redis内存使用优化与存储
http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage
----------------------------
Redis集群部署文档(centos6系统)
(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
127.0.0.1:7004
127.0.0.1:7005
1:下载redis。官网下载3.0.0版本,之前2.几的版本不支持集群模式
下载地址:https://github.com/antirez/redis/archive/3.0.0-rc2.tar.gz
2:上传服务器,解压,编译
tar -zxvf redis-3.0.0-rc2.tar.gz mv redis-3.0.0-rc2.tar.gz redis3.0 cd /usr/local/redis3.0 make make install |
3:创建集群需要的目录
mkdir -p /usr.local/cluster cd /usr.local/cluster mkdir 7000 mkdir 7001 mkdir 7002 mkdir 7003 mkdir 7004 mkdir 7005
|
4:修改配置文件redis.conf
cp /usr/local/redis3.0/redis.conf /usr.local/cluster vi redis.conf ##修改配置文件中的下面选项 port 7000 daemonize yes cluster-enabled yes cluster-config-file nodes.conf 建议直接复制 你妹的手动改太坑了 是file不是files 啊啊啊啊! cluster-node-timeout 5000 appendonly yes ##修改完redis.conf配置文件中的这些配置项之后把这个配置文件分别拷贝到7000/7001/7002/7003/7004/7005目录下面 cp /usr/local/cluster/redis.conf /usr/local/cluster/7000 cp /usr/local/cluster/redis.conf /usr/local/cluster/7001 cp /usr/local/cluster/redis.conf /usr/local/cluster/7002 cp /usr/local/cluster/redis.conf /usr/local/cluster/7003 cp /usr/local/cluster/redis.conf /usr/local/cluster/7004 cp /usr/local/cluster/redis.conf /usr/local/cluster/7005
##注意:拷贝完成之后要修改7001/7002/7003/7004/7005目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称
|
5:分别启动这6个redis实例
cd /usr/local/cluster/7000 redis-server redis.conf cd /usr/local/cluster/7001 redis-server redis.conf cd /usr/local/cluster/7002 redis-server redis.conf cd /usr/local/cluster/7003 redis-server redis.conf cd /usr/local/cluster/7004 redis-server redis.conf cd /usr/local/cluster/7005 redis-server redis.conf
##启动之后使用命令查看redis的启动情况ps -ef|grep redis 如下图显示则说明启动成功
|
6:执行redis的创建集群命令创建集群
cd /usr/local/redis3.0/src ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 |
6.1执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境
错误内容:/usr/bin/env: ruby: No such file or directory
所以需要安装ruby的环境,这里推荐使用yum install ruby安装
yum install ruby |
6.2然后再执行第6步的创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装
错误内容:
./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
yum install rubygems |
6.3再次执行第6步的命令,还会报错,提示不能加载redis,是因为缺少redis和ruby的接口,使用gem 安装
错误内容:
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from ./redis-trib.rb:25
gem install redis |
6.4 再次执行第6步的命令,正常执行
输入yes,然后配置完成。
至此redis集群即搭建成功!
7:使用redis-cli命令进入集群环境
redis-cli -c -p 7000 |
如果有需要大数据hadoop方面的资料请联系QQ:1967484968
2:sentinel和cluster都是做集群的,这两个有什么区别啊?
新手谢谢楼主
2:sentinel是一个监控系统,监控主从节点的状态,不是集群。不支持分片存储
主从关系不需要我们知道,集群会按照你指定节点的先后顺序自动分配,
具体集群中的主从关系,可以连接到集群之后执行cluster nodes查看
主从切换这些都被集群封装了。
我执行yum install ruby 也没有用 提示:
Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
Updating certificate-based repositories.
Setting up Install Process
No package ruby available.
Error: Nothing to do
求救啊
/usr/local/ruby-1.8/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- openssl (LoadError)
既然是集群,为何还要 主从,直接主不就可以了?
这样做 有什么作用吗?谢谢
既然是集群,为何还要 主从,直接主不就可以了?
这样做 有什么作用吗?谢谢
既然是集群,为何还要 主从,直接主不就可以了?
这样做 有什么作用吗?谢谢
一、
生产环境下,我有三台服务器。
要如何部署这6个节点,或者说N个节点合适?
二、
假如我代码中连接的是A节点(192.168.1.100:7000)挂了。
虽然A2节点会顶上,但是我代码是固定是连接A的节点,那也就是永远连不到A2上。那是不是还需要sentinel来配合?
/usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- redis (LoadError)
from /usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from ./redis-trib.rb:25:in `<main>' 请帮我看下这个是什么问题
#由于源的原因,可能下载失败,就手动下载下来安装 (或者从csdn上下载)
#download地址:http://rubygems.org/gems/redis/versions/3.0.0
gem install -l /data/soft/redis-3.0.0.gem
这样就好了
比如 redis-cli -p 7000 这样连接,再 set foo bar 报错
应该是这样redis-cli -c -p 7000 ; -c 呀!!!! 经常也懒得写就让人蛋疼了, 博主写了
官网上:http://redis.io/topics/cluster-tutorial
Connecting to node 127.0.0.1:7001: OK 然后后面跟着好多/usr/local/ruby/lib/ruby/gems/2.1.0/gems/redis-3.0.0/lib/redis.rb:182: warning: this causes ArgumentError in the next release
最后[ERR] Node 127.0.0.1:7000 is not configured as a cluster node.
怎么解决啊
from /usr/local/lib/site_ruby/1.8/rubygems/core_ext/kernel_require.rb:54:in `require'
from ./redis-trib.rb:25
gem install redis
The program 'gem' can be found in the following packages:
* ruby1.9.1
* rubygems
Try: apt-get install <selected package>
然后我用apt-get 之后 还是不行
from ./redis-trib.rb:24
Connecting to node 127.0.0.1:7001: OK
[ERR] Node 127.0.0.1:7001 is not configured as a cluster node.
大神这是怎么弄呢?没有设置为集群的?
[ERR] Node 127.0.0.1:7001 is not configured as a cluster node.
但是用redis-server -p 7000这个命令也错误,信息如下:
[root@idh63 bin]# redis-server -p 7000
20685:C 24 Jul 14:29:51.082 # Fatal error, can't open config file '-p'
怎么办呀