感谢支持
我们一直在努力

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文件的详细设置可参考: http://www.linuxidc.com/Linux/2014-03/97901.htm
另外也可参考笔者分享的另一篇文章《谈谈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类似,甚至更简单,笔者在这就不赘述了,也可以参考以下链接:
http://www.linuxidc.com/Linux/2011-06/37007.htm

三、与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》 http://www.linuxidc.com/Linux/2014-03/97903.htm 。

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

推荐阅读:

Redis集群明细文档 http://www.linuxidc.com/Linux/2013-09/90118.htm

Ubuntu 12.10下安装Redis(图文详解)+ Jedis连接Redis http://www.linuxidc.com/Linux/2013-06/85816.htm

Redis系列-安装部署维护篇 http://www.linuxidc.com/Linux/2012-12/75627.htm

CentOS 6.3安装Redis http://www.linuxidc.com/Linux/2012-12/75314.htm

Redis配置文件redis.conf 详解 http://www.linuxidc.com/Linux/2013-11/92524.htm

一、介绍 

Redis的master/slave数据复制方式可以是一主一从或者是一主多从的方式,Redis在master是非阻塞模式,也就是说在slave执行数据同步的时候,master是可以接受客户端的请求的,并不影响同步数据的一致性,然而在slave端是阻塞模式的,slave在同步master数据时,并不能够响应客户端的查询。

Redis的master/slave模式下,master提供数据读写服务,而slave只提供读服务。

特点:

1.master可以有多个slave;

2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构;

3.主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求;

相反slave在初次同步数据时则会阻塞不能处理client的请求;

4.主从复制可以用来提高系统的可伸缩性,我们可以用多个slave 专门用于client的读请求,

如sort操作可以使用slave来处理。也可以用来做简单的数据冗余;

5.可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

二、配置流程:
Redis的master/slave的配置方式是在slave主机的Redis目录下的redis.conf配置文件中添加“slaveof master_ip master_port”,如:

slaveof 127.0.0.1 6379

例如:我们配置我们的slave为:redis-slave.conf
daemonize yes
pidfile redis-slave.pid
port 6380
timeout 300
loglevel verbose
logfile stdout
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump-slave.rdb
dir /usr/local/redis/var/
slaveof 127.0.0.1 6379
appendonly no
appendfsync everysec

启动slave:
./redis-server redis-slave.conf

三、配置实例:

笔者有两台机器,一台linux机器A(ip:172.16.205.186),一台windows机器B(ip:192.168.30.86)。A机器上配置一个6379端口的master,6380端口的slave1;B机器上配置分别为6380和6381的slave2和slave3。

A的Linux机器的配置如下:
[root@DEV etc]# ls
redis.conf  redis-slave1.conf
[root@DEV etc]# cat redis.conf
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
[root@DEV etc]# cat redis-slave1.conf
daemonize yes
pidfile redis-slave.pid
port 6380
timeout 300
loglevel verbose
logfile stdout
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump-slave.rdb
dir /usr/local/redis/var/
slaveof 127.0.0.1 6379
appendonly no
appendfsync everysec

B的Windows机器的配置如下:

slave2:
daemonize yes
pidfile redis-slave2.pid
port 6380
timeout 300
loglevel verbose
logfile stdout2
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump-slave2.rdb
dir ./
slaveof 172.16.205.186 6379
appendonly no

slave3:
daemonize yes
pidfile redis-slave3.pid
port 6381
timeout 300
loglevel verbose
logfile stdout3
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump-slave3.rdb
dir ./
slaveof 172.16.205.186 6379
appendonly no

这样就实现了linux一个master一个slave,windows两个slave,且三个slave都连同一个master。当然也可以某个slave作为另一个slave的master,只需要在conf文件里把“slaveof <ip> <port>”修改为相应slave的信息就行了。

赞(0) 打赏
转载请注明出处:服务器评测 » Redis学习及实践
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏