学习目标:
1、了解Redis的window的安装
2、了解Redis的linux的安装
学习过程:
一、window的安装
前面说过Redis 没有官方的Windows版本,但是微软开源技术团队(Microsoft Open Tech group)开发和维护着Window的版本。
https://github.com/MicrosoftArchive/redis
进入releases看一下释放的版本,可以自己根据需要下载:
https://github.com/MicrosoftArchive/redis/releases
1、启动服务端
解压到指定的目录下面后,使用cmd进入这个目录,然后执行命令
redis-server.exe redis.windows.conf
如下图:
2、启动客户端访问
再启动一个cmd,输入一下命令:
redis-cli.exe -h 127.0.0.1
再执行一下简单的命令
127.0.0.1:6379> set name liubao
OK
127.0.0.1:6379> get name
"liubao"
这样就安装成功了。
二、Linux的安装
这里我们安装更新的4.0的版本
1、下载:
wget http://download.redis.io/releases/redis-4.0.13.tar.gz
2、解压: tar -zxf redis-4.0.13.tar.gz
cd redis-4.0.13/src/
如果报找不到CC命令可以先安装,需要把原来的解压后的文件删除,重写执行make install
[root@localhost redis-4.0.13]# yum -y install gcc automake autoconf libtool make
[root@localhost redis-4.0.13]# make install PREFIX=/usr/local/redis
3、修改配置文件
[root@localhost src]# cd ..
[root@localhost redis-4.0.13]# cp redis.conf /etc/
[root@localhost redis-4.0.13]# vim /etc/redis.conf
修改daemonize yes---目的使进程在后台运行
参数介绍:
requirepass 123456 密码,这里我也设置了
bind 127.0.0.1 绑定可以登陆的ip地址,如果要远程登陆,那么需要把这个注释了。不然远程无法登陆
protected-mode no保护模式
在redis3.2之后,redis增加了protected-mode ,在这个模式下,即使注释掉了bind 127.0.0.1 ,所以如果想要远程访问,要么把protected-mode设置为no,要么bind写上ip地址。
daemonize:是否以后台daemon方式运行
pidfile:pid文件位置
port:监听的端口号
timeout:请求超时时间
loglevel:log信息级别
logfile:log文件位置
databases:开启数据库的数量
save * *:保存快照的频率,第一个*表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
rdbcompression:是否使用压缩
dbfilename:数据快照文件名(只是文件名,不包括目录)
dir:数据快照的保存目录(这个是目录)
appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
4、启动
[root@localhost redis]# cd /usr/local/redis/bin/
[root@localhost bin]# ./redis-server /etc/redis.conf
查看是否安装启动了
[root@localhost bin]# ps -aux | grep redis
打开客户端
./redis-cli
登陆 因为刚才设置了密码,所以登陆后需要使用auth才能登陆。
[root@localhost bin]# ./redis-cli
127.0.0.1:6379> auth 123456
OK
设置值和取值
127.0.0.1:6379> set name liubao
OK
127.0.0.1:6379> get name
"liubao"
OK!
sudo
5、可能的问题
如果直接启动的时候,可能再前端报出这样的错误
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.
redis有时background save db不成功,通过log也发现下面的告警,
[13223] 17 Mar 13:18:02.207 # 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
内核参数overcommit_memory
它是 内存分配策略
可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
什么是Overcommit和OOM
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最高)。
解决方法:
很简单,按提示的操作(将vm.overcommit_memory 设为1)即可:
有三种方式修改内核参数,但要有root权限:
(1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
(2)sysctl vm.overcommit_memory=1
(3)echo 1 > /proc/sys/vm/overcommit_memory
不管是linux还是window,为了方便操作,都可以配置环境变量,相信这对大家来说已经是很简单的了。
[root@localhost ~]# vim /etc/profile
在最后添加,并保存退出
export PATH=/usr/local/redis/bin:$PATH
[root@localhost ~]# source /etc/profile
6、关于redis的密码问题:
redis没有实现访问控制这个功能,但是它提供了一个轻量级的认证方式,可以编辑redis.conf配置来启用认证。
a、初始化Redis密码:
在配置文件中有个参数: requirepass 这个就是配置redis访问密码的参数;
比如 requirepass test123;
(Ps:需重启Redis才能生效)
redis的查询速度是非常快的,外部用户一秒内可以尝试多大150K个密码;所以密码要尽量长(对于DBA 没有必要必须记住密码);
b、不重启Redis设置密码:
在配置文件中配置requirepass的密码(当redis重启时密码依然有效)。
redis 127.0.0.1:6379> config set requirepass test123
查询密码:
redis 127.0.0.1:6379> config get requirepass
(error) ERR operation not permitted
密码验证:
redis 127.0.0.1:6379> auth test123
OK
再次查询:
redis 127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "test123"
PS:如果配置文件中没添加密码 那么redis重启后,密码失效;
c、登陆有密码的Redis:
在登录的时候的时候输入密码:
redis-cli -p 6379 -a test123
先登陆后验证:
redis-cli -p 6379
redis 127.0.0.1:6379> auth test123
OK
AUTH命令跟其他redis命令一样,是没有加密的;阻止不了攻击者在网络上窃取你的密码;
认证层的目标是提供多一层的保护。如果防火墙或者用来保护redis的系统防御外部攻击失败的话,外部用户如果没有通过密码认证还是无法访问redis的。
三、window的客户端
使用rdm (redis desktop manager )软件连接Redis 。
https://redisdesktop.com/download
安装一个可视化的客户端,对开发还是很有帮助的。这个比较简单,直接安装即可。
四、开机启动
编写启动脚本
vim /etc/init.d/redis
#!/bin/sh
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 64 36
# description: Start and Stop redis .
# Comments to support LSB init script conventions
### BEGIN INIT INFO
# Provides: liubao
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
REDISPORT=6379
REDIS_SERVER=/usr/local/redis/bin/redis-server
REDIS_CLI=/usr/local/redis/bin/redis-cli
CONF=/etc/redis.conf
PASS=123456
case "$1" in
start)
echo "Starting Redis server..."
$REDIS_SERVER $CONF
if [ "$?"="0" ]
then
echo "Redis is run..."
fi
;;
stop)
echo "Stopping..."
$REDIS_CLI -p $REDISPORT -a $PASS SHUTDOWN
echo "Waiting for Redis to shutdown..."
sleep 1
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
exit 1
esac
[root@localhost redis-4.0.13]# chmod 755 /etc/init.d/redis
测试命令
[root@localhost redis-4.0.13]# /etc/init.d/redis start
[root@localhost redis-4.0.13]# ps -ef | grep 'redis'
[root@localhost redis-4.0.13]# /etc/init.d/redis stop
配置开机启动
[root@localhost init.d]# cd /etc/init.d/
[root@localhost init.d]# chkconfig redis on
[root@localhost init.d]# chkconfig --list
redis 0:关 1:关 2:开 3:开 4:开 5:开 6:关
可以使用reboot试一下