redis 安装

大概在两年前就开始关注Redis。后来换了项目就没有再怎么关注过,算是有点遗憾失去了当初进入社区的机会。

先说说安装吧。

1,通过网络下载 Linux命令 wget http://download.redis.io/releases/redis-3.0.1.tar.gz

2,解压

使用tar -zxvf redis-3.0.0.tar.gz命令将root目录下的redis-3.0.0.tar.gz文件还是解压到该目录下。 

3,如果没有安装gcc需要 由于redis是由c语言编写的,所以安装redis需要c语言的编译环境,因此我们需要先安装gcc。如果没有gcc,则需要在线安装,安装命令是yum install gcc-c++。 

4,进入cd redis-3.0.0 目录,     make命令编译,

编译完成后,我们使用make install PREFIX=/usr/local/redis命令来进行安装

接着我们进入redis目录,在该目录下可以看到bin目录,进入到bin目录可以看到redis的客户端和服务端,如下所示


5,启动  

第一种启动方式是前端启动,即在redis的安装目录下直接使用./redis-server命令启动redis-server,如下所示(可以看到默认端口是6379)

,只不过这种启动会占用终端,如果我们按Ctrl+C就会停止redis-server。 


可能会报错



5.WARNING FIX

  从上面redis启动之后的控制台打出的信息来看,有3条WARNING信息。他们分别如下:

5.1. WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

解决方式:

1
2
3
4
5
6
7
8
9
第一种:无需重启系统即可生效;但重启以后信息丢失
[root@localhost ~] # echo 511 >/proc/sys/net/core/somaxconn
 
第二种:即可生效,重启不会丢失
1. 编辑 /etc/sysctl .conf文件,在其后追加
net.core.somaxconn = 511
 
2. sysctl.conf生效
[root@localhost ~] # sysctl -p

原理:

对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接.当三次握手成功后,  我们可以看到端口的状态由LISTEN转变为ESTABLISHED,接着这条链路上就可以开始传送数据了.每一个处于监听(Listen)状态的端口,都有自己的监听队列.监听队列的长度,与如下两方面有关:一个是 somaxconn参数;另一个是使用该端口的程序中listen()函数.故而somaxconn会限制了接收新 TCP 连接侦听队列的大小。对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了。大多数环境这个值建议增加到 1024 或者更多。 服务进程会自己限制侦听队列的大小,常常在它们的配置文件中有设置队列大小的选项。大的侦听队列对防止拒绝服务 DoS 攻击也会有所帮助。

redis配置文件中有个参数,tcp-backlog默认值是511,而系统默认的somaxconn是128,所以redis启动以后报出这个warnning

 

5.2. 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 then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

解决办法:

复制代码
第一种:无需重启系统即可生效;但重启以后信息丢失
[root@localhost ~]# echo 1 > /proc/sys/vm/overcommit_memory

第二种:即可生效,重启不会丢失
1. 编辑/etc/sysctl.conf文件,在其后追加
vm.overcommit_memory=1

2. sysctl.conf生效
[root@localhost ~]# sysctl -p
复制代码

原理

内核参数overcommit_memory 确定了内存分配策略,可选值为[0、1、2]
0: 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1: 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2: 表示内核允许分配超过所有物理内存和交换空间总和的内存

 进程通常调用malloc()函数来请求分配内存,Linux支持超量分配内存,以允许分配比可用RAM加上交换内存的请求。Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit。当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且oom_score_adj可以被设置(-1000最低,1000最高)。

 

5.3. WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

 解决办法 

复制代码
第一种方法:重启生效,不会丢失
1. 编辑/etc/rc.local,在最后新增如下内容:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
2. 重新启动系统
[root@localhost redis]# reboot

第二种方法:及时生效,重启丢失
[root@localhost redis]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
复制代码

 原理

正常来说,有两种方式来增加内存,可以管理的内存大小:
1.增大硬件内存管理单元的大小。
2.增大page的大小。
第一个方法不是很现实,现代的硬件内存管理单元最多只支持数百到上千的page表记录,并且,对于数百万page表记录的维护算法必将与目前的数百条记录的维护算法大不相同才能保证性能,目前的解决办法是,如果一个程序所需内存page数量超过了内存管理单元的处理大小,操作系统会采用软件管理的内存管理单元,但这会使程序运行的速度变慢。

从redhat 6(centos,sl,ol)开始,操作系统开始支持 Huge Pages,也就是大页。简单来说, Huge Pages就是大小为2M到1GB的内存page,主要用于管理数千兆的内存,比如1GB的page对于1TB的内存来说是相对比较合适的。

THP(Transparent Huge Pages)是一个使管理Huge Pages自动化的抽象层。目前需要注意的是,由于实现方式问题,THP会造成内存锁影响性能,尤其是在程序不是专门为大内内存页开发的时候,简单介绍如下:操作系统后台有一个叫做khugepaged的进程,它会一直扫描所有进程占用的内存,在可能的情况下会把4kpage交换为Huge Pages,在这个过程中,对于操作的内存的各种分配活动都需要各种内存锁,直接影响程序的内存访问性能,并且,这个过程对于应用是透明的,在应用层面不可控制,对于专门为4k page优化的程序来说,可能会造成随机的性能下降现象。

6,为了方便我们直接换个启动方式

第二种启动方式是使用配置文件启动(也叫后台启动),我们需要先到redis的解压缩目录(/root/redis-3.0.0)下把redis.conf文件

复制一份到/usr/local/redis/bin目录下。

下面我们需要使用vim redis.conf命令简单修改下redis.conf文件,把daemonize的值由默认的no修改为yes,这个配置是指定是否在后台运行


7,修改完之后,可按esc键+:wq保存修改,并退出编辑。 

下面使用./redis-server redis.conf命令进行后台启动



安装测试OK后,下节会介绍实战中的应用场景。待续

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值