Redis系列之Redis的安装与配置(一)

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis性能惊人,这个只有1万多行源代码的程序,国内前十大网站的子产品估计用1台Redis就可以满足存储及Cache的需求。很多开发者都认为Redis不可能比Memcached快,Memcached完全基于内存,而Redis具有持久化保存特性,即使是异步的,Redis也不可能比Memcached快。但是测试结果基本是Redis占绝对优势。
性能测试结果SET操作每秒钟 110000 次,GET操作每秒钟 81000 次。目前全球最大的Redis用户是新浪微博,在新浪有200多台物理机,400多个端口正在运行着Redis, 有+4G的数据跑在Redis上来为微博用户提供服务。

这里主要是先介绍下Redis的安装与配置。

linux安装方法,我的linux是CentOS。
$ wget http://redis.googlecode.com/files/redis-2.6.5.tar.gz
$ tar xzf redis-2.6.5.tar.gz
$ cd redis-2.6.5
$ make install
我在安装时发现cc command not found的错误
解决办法:yum -y install gcc

安装成功后,启动服务
$ nohup src/redis-server &

进入客户端
$ ./src/redis-cli

Redis配置文件为redis.conf。一般不需要做太多更改。

redis主从配置

在从Redis的配置文件中配置master的ip地址和redis-server的端口。
slaveof <masterip> <port> 如 slaveof 192.168.2.6 6379
记得要先启动MASTER 再启动SLAVE,若在同一台电脑上,需保证主从的端口号不一样,若更改了端口号,启动客户端命令行为redis-cli -p 端口号
主:

从:

这里主要介绍两种数据持久化的方式。
Snapshotting
Redis有两种存储方式,默认是snapshot方式,实现方法是定时将内存的快照(snapshot)持久化到硬盘,这种方法缺点是持久化之后如果出现crash则会丢失一段数据。下面是默认的快照保存配置
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
save 60 10000 #60秒内容如超过10000个key被修改,则发起快照保存

Append-only file
aof 比快照方式有更好的持久化性,是由于在使用aof持久化方式时,redis会将每一个收到的写命令都通过write函数追加到文件中(默认是 appendonly.aof)。当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。当然由于os会在内核中缓存 write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要 通过fsync函数强制os写入到磁盘的时机。有三种方式如下(默认是:每秒fsync一次)
appendonly yes //启用aof持久化方式

  1. appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
    appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
  2. appendfsync no //完全依赖os,性能最好,持久化没保证
    aof 的方式也同时带来了另一个问题。持久化文件会变的越来越大。例如我们调用incr test命令100次,文件中必须保存全部的100条命令,其实有99条都是多余的。因为要恢复数据库的状态其实文件中保存一条set test 100就够了。为了压缩aof的持久化文件。redis提供了bgrewriteaof命令。收到此命令redis将使用与快照类似的方式将内存中的数据 以命令的方式保存到临时文件中,最后替换原来的文件。

总结:
  1.根据业务需要选择合适的数据类型,并为不同的应用场景设置相应的紧凑存储参数。
  2.当业务场景不需要数据持久化时,关闭所有的持久化方式可以获得最佳的性能以及最大的内存使用量。
  3.如果需要使用持久化,根据是否可以容忍重启丢失部分数据在快照方式与语句追加方式之间选择其一,不要使用虚拟内存以及diskstore方式。
  4.不要让你的Redis所在机器物理内存使用超过实际内存总量的3/5。

猜你喜欢

转载自isoftyh.iteye.com/blog/1748607