Redis 基础知识与安装配置

Redis 介绍

  1. Redis和Memcached类似,也属于k-v数据存储。
  2. Redis官网 redis.io,当前最新稳定版 5.0.7。
  3. 支持更多value类型,除了和字符串(String)外,还支持hash、lists(列表)、map(哈希)、sets(集合)和 sorted sets(有序集合)等类型。
  4. redis使用了两种文件格式:全量数据(RDB)和增量请求(aof)。全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载。增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,这种类似于mysql binlog。
  5. redis的存储分为内存存储、磁盘存储和log文件三部分。
  6. Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。

一 、Redis 安装

1、下载 Redis

wget http://download.redis.io/releases/redis-5.0.7.tar.gz

2、创建 redis 程序、配置、日志目录

mkdir -p /usr/local/redis/{bin,etc,var}

3、修改 redis 工作目录

[ ! -d /data/redis ] && mkdir -p /data/redis

4、编译安装 redis

make PREFIX=/usr/local/redis install

5、复制配置文件到安装目录下

/bin/cp redis.conf /usr/local/redis/etc/redis.conf

6、备份配置文件

/bin/cp /usr/local/redis/etc/redis.conf{,_bak}

二、修改Redis.conf文件

1、修改 pidfile 存放位置

sed -i "s@pidfile.*@pidfile /usr/local/redis/var/redis.pid@" /usr/local/redis/etc/redis.conf

2、指定unix socket文件的路径

sed -i "s@unixsocket.*@unixsocket /usr/local/redis/var/redis-server.sock@" /usr/local/redis/etc/redis.conf

3、修改日志 存放位置

sed -i "s@logfile.*@logfile /usr/local/redis/var/redis.log@" /usr/local/redis/etc/redis.conf

4、修改 工作目录 存放位置

sed -i "s@^dir.*@dir /usr/local/redis/var@" /usr/local/redis/etc/redis.conf

5、以守护进程方式启动

sed -i 's@daemonize no@daemonize yes@' /usr/local/redis/etc/redis.conf

6、修改绑定IP,允许外网访问redis 修改 bind 127.0.0.1 为 bind 0.0.0.0

sed -i "s@^# bind 127.0.0.1@bind 127.0.0.1@" /usr/local/redis/etc/redis.conf

7、设置Redis密码 507 行

sed -i "s@requirepass.*@requirepass YXjdnP4fooher3@" /usr/local/redis/etc/redis.conf

8、禁用或者重命名危险命令,在 redis.conf 里 requirepass 密码下面添加

rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command KEYS ""
rename-command SHUTDOWN ""
rename-command DEL ""
rename-command EVAL ""

9、redis 允许同时最多链接数量

sed -i "s@maxclients.*@maxclients 65535@" /usr/local/redis/etc/redis.conf

10、数据库的总数量

sed -i "s@databases.*@databases 16@" /usr/local/redis/etc/redis.conf

11、是否总是显示logo

sed -i "s@always-show-logo.*@always-show-logo yes@" /usr/local/redis/etc/redis.conf

12、开启 AOF 持久化,开启后会在dir定义的目录生成appendonly.aof文件

sed -i 's#appendonly no$#appendonly yes#g' /usr/local/redis/etc/redis.conf

13、修改默认端口

sed -i "s@port.*@port 36379@" /usr/local/redis/etc/redis.conf

14、操作系统决定,指定记录日志的规则:always(只要有变动就记录)、everysec(每秒记录一次)、no(不记录)

sed -i 's#appendfsync .*$#appendfsync everysec$#g' /usr/local/redis/etc/redis.conf

15、进行持久化 当时间间隔超过60秒,或存储超过1000条记录时

sed -i 's#^save 60 .*$#save 60 1000#g' /usr/local/redis/etc/redis.conf

16、配置内核参数

sysctl vm.overcommit_memory=1
echo never > /sys/kernel/mm/transparent_hugepage/enabled

三、配置 redis.conf 快照

- 表示每15分钟且至少有1个key改变,就触发一次持久化 save 900 1

- 表示每5分钟且至少有10个key改变,就触发一次持久化 save 300 10

- 当时间间隔超过60秒,或存储超过1000条记录时,进行持久化 save 60 1000

- redis会自动恢复接受写请求 stop-writes-on-bgsave-error yes

- 快照压缩 持久化的时候是否运行对字符串对象进行压缩,算法为LZF rdbcompression yes

- 文件末尾是否包含一个CRC64的校验和 rdbchecksum yes

四、配置内存大小

1、根据自己的内在大小, 在 maxmemory 下面添加 对应值

1G
maxmemory 128000000
2G
maxmemory 256000000
4G
maxmemory 512000000

2、允许外连接redis服务,需配置bind ip或者设置访问密码

sed -i "s@protected-mode.*@protected-mode yes@" /usr/local/redis/etc/redis.conf

3、修改默认端口

sed -i 's#port .*$#port 16379$#g' /usr/local/redis/etc/redis.conf

五、生成环境变量

[ -z "`grep ^'export PATH=' /etc/profile`" ] ; echo "export PATH=/usr/local/redis/bin:\$PATH" >> /etc/profile

[ -n "`grep ^'export PATH=' /etc/profile`" -a -z "`grep /usr/local/redis /etc/profile`" ] && sed -i "s@^export PATH=\(.*\)@export PATH=/usr/local/redis/bin:\1@" /etc/profile
source /etc/profile

六、添加运行用户

groupadd redis
useradd -M redis -s /sbin/nologin -d /dev/null -g redis

1、设置 redis 目录和日志及数据权限为 redis

chown -R redis:redis /usr/local/redis
chown -R redis:redis /data/redis

七、添加开机启动

1、把下面脚本保存为 redis-server.service 文件

[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/redis/var/redis_6379.pid
User=redis
Group=redis
Environment=statedir=/usr/local/redis
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p ${statedir}
ExecStartPre=/bin/chown -R redis:redis ${statedir}
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
ExecStop=/bin/kill -s TERM $MAINPID
Restart=always
LimitNOFILE=1000000
LimitNPROC=1000000
LimitCORE=1000000
[Install]
WantedBy=multi-user.target

2、复制到 /lib/systemd/system/ 下面

/bin/cp redis-server.service /lib/systemd/system

3、修改 redis 服务启动路径

sed -i "s@/usr/local/redis@/usr/local/redis@g" /lib/systemd/system/redis-server.service
sed -i "s@^PIDFile=.*@PIDFile=/usr/local/redis/var/redis_6379.pid@" /lib/systemd/system/redis-server.service
sed -i "s@/var/run@/usr/local@g" /lib/systemd/system/redis-server.service

4、安全设置

chmod 600 /usr/local/redis/etc/redis.conf

5、添加开机启动

systemctl enable redis-server
systemctl daemon-reload
systemctl start redis-server.service

6、检查是否正常运行

ps -aux|grep redis
systemctl status redis-server.service