# 安装 [官网](https://redis.io/) [官方文档](https://redis.io/docs/) ## 源码安装 ``` cd /usr/local/src # 旧版本下载redis-5.0.9(低版本系统可能不支持最新版redis) sudo wget http://download.redis.io/releases/redis-5.0.9.tar.gz # 最新稳定版下载redis sudo wget https://download.redis.io/redis-stable.tar.gz # 以下是下载最新版后的操作,如果下载旧版,注意修改文件名称 sudo tar zxvf redis-stable.tar.gz redis-stable/ ; cd redis-stable/ sudo make sudo make PREFIX=/usr/local/redis install sudo mkdir /usr/local/redis/{conf,log} ; sudo mkdir -p /data/redis sudo useradd -s /sbin/nologin redis sudo chown redis /data/redis /usr/local/redis/log ``` ## 配置文件修改 ``` # 备份一下 sudo cp redis.conf /usr/local/redis/conf/ # 编辑配置文件 sudo vim /usr/local/redis/conf/redis.conf bind 0.0.0.0 # 允许所有ip远程访问。新增。 protected-mode no # 关闭保护模式。修改。 port 6379 # 端口。可修改。 daemonize yes # 后台运行。修改。 logfile "/usr/local/redis/log/redis.log" # 日志文件,需指定路径。修改。 dir /data/redis # 数据文件,需指定路径。修改。 pidfile /usr/local/redis/log/redis_6379.pid # 进程文件,需指定路径。修改。 maxmemory 100mb # 最大内存。新增。 # requirepass foobared 下面增加密码配置 requirepass 123456 # 密码123456。新增。 ``` ## 定义systemd服务管理脚本 ``` sudo vim /lib/systemd/system/redis.service [Unit] Description=redis After=network.target [Service] User=redis Type=forking TimeoutSec=0 PIDFile=/usr/local/redis/log/redis_6379.pid ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target ``` ## 启动Redis服务 ``` sudo vim /etc/sysctl.conf # 增加内容 net.core.somaxconn = 2048 vm.overcommit_memory = 1 ``` ``` sudo sysctl -p sudo systemctl daemon-reload sudo systemctl enable redis sudo systemctl start redis ``` ``` # 配置环境变量方便使用 sudo vim /etc/profile.d/redis.sh PATH=$PATH:/usr/local/redis/bin source /etc/profile.d/redis.sh ``` ## 连接redis ``` # 连接 redis-cli -a '123456' # 指定地址连接 redis-cli -h 127.0.0.1 -p 6379 -a '123456' # exit退出 ``` ## 编译错误解决办法 1) cc: Command not found 答:Redis它是由C语言编写的,所以编译需要GCC的支持,解决方案安装GCC: ```bash yum -y install gcc ``` 2) fatal error: jemalloc/jemalloc.h: No such file or directory 答:可能是上一次的编译文件没有清楚,解决方案清楚编译残留: ```bash make clean、make distclean ```