linux安装redis-3.0.7

一、Redis介绍

1、简介

Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统。和Memcache类似,但很大程度补偿了Memcache的不足,
它支持存储的value类型相对更多,包括string、list、set、zset和hash。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。
在此基础上,Redis支持各种不同方式的排序。
和Memcache一样,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将数据缓存到内存中,无法自动定期写入硬盘,
这就表示,一断电或重启,内存清空,数据丢失。所以Memcache的应用场景适用于缓存无需持久化的数据。
而Redis不同的是它会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,实现数据的持久化。

2、数据结构

  redis提供五种数据类型:string(字符串)list(链表set(集合)zset(排序的集合)hashs(哈希类型)。

  • string是最简单的类型,你可以理解成与Memcached一模一个的类型,一个key对应一个value,其上支持的操作与Memcached的操 作类似。但它的功能更丰富。
  • list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。
  • set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。
  • zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的 值调整顺序。
  • 可以理解了有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。

3、 Redis性能

  根据Redis官方的测试结果:在50个并发的情况下请求10w次,写的速度是110000次/s,读的速度是81000次/s

  测试环境: 

  1. 50个并发,请求100000次 
  2. 读和写大小为256bytes的字符串 
  3. Linux2.6 Xeon X3320 2.5GHz的服务器上
  4. 通过本机的loopback interface接口上执行

4、 Redis的功能

  • Redis的Sharding:Redis支持客户端的Sharding功能,通过一致性hash算法实现,当前Redis不支持故障冗余,在集群中不能在线增加或删除Redis 
  • Redis的master/slave复制: 

    1. 一个master支持多个slave 

    2. Slave可以接受其他slave的连接来替代他连接master 

    3. 复制在master是非阻塞的,而在slave是阻塞的 

    4. 复制被利用来提供可扩展性,在slave端只提供查询功能及数据的冗余 

  • Redis的Virtual Memory功能:vm是Redis2.0新增的一个非常稳定和可靠的功能, vm的引入是为了提高Redis的性能,也就是把很少使用的value保存到disk,而key保存在内存中。实际上就是如果你有10w的keys在内存中,而只有仅仅10%左右的key经常使用,那么Redis可以通过开启VM尝试将不经常使用的Value转换到disk上保存 
  • Redis的附加档案(AOF)功能:Redis通过配置的策略将数据集保存到aof中,当Redis挂掉后能够通过aof恢复到挂掉前的状态 

二、下载安装

  1、首先上官网下载Redis 压缩包,地址:http://redis.io/download 下载稳定版3.0.7

  2、压缩包放倒指定目录,解压可以看到redis-3.0.7 中会有对应的src、conf等文件夹,这和windows下安装解压的文件一样,大部分安装包都会有对应的类文件、配置文件和一些命令文件。

  3、进入src执行make 

  安装成功:

  

  遇到常见错误解决如下:


错误一:zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory   关于分配器allocator, 如果有MALLOC 这个 环境变量, 会有用这个环境变量的 去建立Redis。   而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc。   但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数。   解决办法   make MALLOC=libc 错误二:“/bin/sh: cc: command not found”   这是由于新安装的Linux系统没有安装gcc环境,需要安装gcc   解决办法   # yum install gcc   验证gcc是否安装成功   # rpm -qa |grep gcc 错误三:sh: ./mkreleasehdr.sh: Permission denied     make: *** No rule to make target `release.h', needed by `release.o'. Stop.   权限不够   解决办法    在src目录下执行:chmod 777 mkreleasehdr.sh

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

/proc/sys/vm/overcommit_memory
可选值:0120, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

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

四、配置说明

1. redis.conf 配置参数:
#是否作为守护进程运行
daemonize yes
#如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid
pidfile redis.pid
#绑定主机IP,默认值为127.0.0.1
#bind 127.0.0.1
#Redis默认监听端口
port 6379
#客户端闲置多少秒后,断开连接,默认为300(秒)
timeout 300
#日志记录等级,有4个可选值,debug,verbose(默认值),notice,warning
loglevel verbose
#指定日志输出的文件名,默认值为stdout,也可设为/dev/null屏蔽日志
logfile stdout
#可用数据库数,默认值为16,默认数据库为0
databases 16
#保存数据到disk的策略
#当有一条Keys数据被改变是,900秒刷新到disk一次
save 900 1
#当有10条Keys数据被改变时,300秒刷新到disk一次
save 300 10
#当有1w条keys数据被改变时,60秒刷新到disk一次
save 60 10000
#当dump .rdb数据库的时候是否压缩数据对象
rdbcompression yes
#本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
#本地数据库存放路径,默认值为 ./
dir /var/lib/redis/

########### Replication #####################
#Redis的复制配置
# slaveof <masterip> <masterport> 当本机为从服务时,设置主服务的IP及端口
# masterauth <master-password> 当本机为从服务时,设置主服务的连接密码
#连接密码
# requirepass foobared
#最大客户端连接数,默认不限制
# maxclients 128
#最大内存使用设置,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。
# maxmemory <bytes>
#是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no
appendonly no
#更新日志文件名,默认值为appendonly.aof
#appendfilename
#更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。
# appendfsync always
appendfsync everysec
# appendfsync no

################ VIRTUAL MEMORY ###########
#是否开启VM功能,默认值为no
vm-enabled no
# vm-enabled yes
#虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm-swap-file /tmp/redis.swap
# 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的 (Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0。
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4

############# ADVANCED CONFIG ###############
glueoutputbuf yes
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
#是否重置Hash表
activerehashing yes
注意:Redis官方文档对VM的使用提出了一些建议:
当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大.
当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value.
最好使用linux ext3 等对稀疏文件支持比较好的文件系统保存你的swap文件.
vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数.如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.

五、部署

为了方便管理,将Redis文件中的conf配置文件和常用命令移动到统一文件中
1、创建bin和redis.conf文件
  mkdir -p /usr/local/redis/bin
  mkdir -p /usr/local/redis/ect
2、执行Linux文件移动命令:
  mv /lamp/redis-3.0.7/redis.conf /usr/local/redis/etc
  cd /lamp/redis-3.0.7/src
  mv mkreleasdhdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin

# redis-server /etc/redis/redis.conf 开启

  

# ps -ef | grep redis   查看进程
# redis-cli 启动redis 客户端
# pkill redis-server 关闭redis服务
# redis-cli shutdown 关闭redis客户端
# netstat -tunpl|grep 6379 查看redis 默认端口号6379占用情况

 六、测试

# redis-cli  
    redis> set name songbin  
    OK  
    redis> get name   
    "songbin"  

好,到此Redis已经成功安装了。

七、Redis主从配置

Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构。下面楼主简单的进行一下配置。

  1、上面安装好的一个Redis作为master,然后使用VirtualBox的虚拟机克隆功能将刚刚那个linux系统克隆一份作为slave,并修改其IP为192.168.0.110。

  2、修改slave的redis配置文件:

    slaveof 192.168.0.100 6379  (映射到主服务器上)

    如果master设置了验证密码,还需配置masterauth。楼主的master设置了验证密码为admin,所以配置masterauth admin。

  配置完之后启动slave的Redis服务,OK,主从配置完成。下面测试一下:

  在master和slave分别执行info命令,查看结果如下:

  master:
  

   slave:

  

   然后在master执行set age 24

   在slave执行get age,看是否能得到24,如果能够得到值则说明配置成功。

 八、 保存/备份

数据备份可以通过定期备份该文件实现。
因为redis是异步写入磁盘的,如果要让内存中的数据马上写入硬盘可以执行如下命令:
redis-cli save 或者 redis-cli -p 6380 save(指定端口)
注意,以上部署操作需要具备一定的权限,比如复制和设定内核参数等。
执行redis-benchmark命令时也会将内存数据写入硬盘。 

九、 开启端口号

1)打开/etc/sysconfig/iptables,
2)在-【A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT】后面,
  加上 【-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT】 //这里的6379是Redis默认端口号 3)保存,重启防火墙:/etc/init.d/iptables restart
原文地址:https://www.cnblogs.com/start-fxw/p/6141672.html