跳到主要内容

安装单机版Redis

本文档将指导您在单机环境下安装和配置Redis,适用于开发和测试环境。

环境要求​

  • Linux系统(CentOS/Oracle Linux/Ubuntu/Debian)
  • Redis版本:6.2.14
  • 系统具有基本的网络和文件操作权限

Redis安装包下载​

cd /usr/local/
wget https://download.redis.io/releases/redis-6.2.14.tar.gz
tar -zxvf redis-6.2.14.tar.gz
mv redis-6.2.14 redis

mkdir /usr/local/redis/{logs,data} -p

安装gcc环境​

Redis是C语言编写,需要安装C环境。

#centos/oracle
yum install gcc gcc-c++ make -y

# ubuntu/debian
sudo apt-get install gcc -y
sudo apt-get install g++ -y
sudo apt-get install make -y
#进入目录: 
cd /usr/local/redis
#编译:
make
#安装Redis:
make PREFIX=/usr/local/redis install

groupadd redis
useradd -r -g redis redis

配置Redis​

创建Redis配置文件:

mkdir /usr/local/redis/conf/ & vim /usr/local/redis/conf/redis.conf

单机版Redis配置​

# 绑定的主机地址
bind 127.0.0.1
# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,
# redis只会本地进行访问,拒绝外部访问。要是开启了密码和指定bind,可以开启。
# 否则最好关闭设置为no。
protected-mode yes
# redis进程的端口号
port 6379
# 客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能
timeout 0
tcp-keepalive 300
# redis进程是否以守护进程的方式运行,yes为是,no为否。默认为no(不以守护进程的方式运行会占用
# 一个终端)。
daemonize yes
supervised no
# 指定redis进程的PID文件存放位置
pidfile /usr/local/redis/redis_6379.pid
# redis日志级别,可用的级别有debug.verbose.notice.warning
loglevel notice
# log文件输出位置,如果进程以守护进程的方式运行,此处又将输出文件设置为stdout的话,
# 就会将日志信息输出到/dev/null里面去了
logfile "/usr/local/redis/logs/redis.log"
# 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
databases 16
always-show-logo yes
# 指定在多少时间内刷新次数达到多少的时候会将数据同步到数据文件
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
# 指定存储至本地数据库时是否压缩文件,默认为yes即启用存储
rdbcompression yes
rdbchecksum yes
# 指定本地数据库文件名
dbfilename dump.rdb
# 指定本地数据问就按存放位置
dir /usr/local/redis/data/
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass yourpassword
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
# 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no。
appendonly no
# 指定跟新日志文件名默认为appendonly.aof
appendfilename "appendonly.aof"
# 指定更新日志的条件,有三个可选参数 - no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值);
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

开启防火墙(如需要外网访问)​

#centos/oracle
# redis实例端口
firewall-cmd --add-port=6379/tcp --permanent --zone=public
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

# ubuntu/debian
ufw allow 6379/tcp
ufw reload

启动Redis​

chown redis:redis /usr/local/redis -R
# 切换redis用户
su redis
# 启动redis服务
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf

设置自动启动​

cat <<EOF | sudo tee /etc/systemd/system/redis.service
[Unit]
Description=redis-server
After=network.target

[Service]
User=redis
#Group=redis
Type=forking
# 这行配置内容要根据redis的安装目录自定义路径
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
# 重载系统服务
systemctl daemon-reload
# 实现开机自启
systemctl enable redis

重启服务器验证

reboot
#查看端口 
netstat -tnap | grep 6379
#查看redis 服务的状态:
systemctl status redis
#查看Redis启动情况
ps aux|grep redis

测试连接Redis​

# 使用redis-cli连接
/usr/local/redis/bin/redis-cli

# 执行简单测试命令
ping
# 应该返回 PONG

set testkey "Hello Redis"
get testkey
# 应该返回 "Hello Redis"

注意问题​

查看日志文件可能出现以下警告:

WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. 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.

解决方式​

临时启用内存过度分配​

如果你只想立即启用内存过度分配,可以运行以下命令:

sudo sysctl vm.overcommit_memory=1

这会使内核立即启用内存过度分配,但这个更改在系统重启后会失效。

永久启用内存过度分配​

要永久启用内存过度分配,你需要修改系统的 sysctl 配置文件 /etc/sysctl.conf。

步骤 1:编辑 /etc/sysctl.conf

vim /etc/sysctl.conf

步骤 2:添加配置项 在文件的末尾添加以下一行:

vm.overcommit_memory = 1

这将指示内核在每次系统启动时都启用内存过度分配。

步骤 3:使更改立即生效 为了立即应用更改,可以运行以下命令:

sudo sysctl -p

这个命令会重新加载 /etc/sysctl.conf 文件中的所有配置项,使你的更改立即生效。

验证设置 你可以通过以下命令验证是否成功启用了内存过度分配:

sysctl vm.overcommit_memory

如果输出为 vm.overcommit_memory = 1,说明设置已成功应用。

基本操作命令​

连接Redis​

# 默认连接本地Redis
/usr/local/redis/bin/redis-cli

# 指定主机和端口连接
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379

# 带密码连接(如果设置了密码)
/usr/local/redis/bin/redis-cli -a yourpassword

常用Redis命令​

# 查看所有键
keys *

# 设置键值对
set keyName "value"

# 获取键值
get keyName

# 删除键
del keyName

# 检查键是否存在
exists keyName

# 设置过期时间(秒)
expire keyName 60

# 查看键的剩余过期时间
ttl keyName

# 清空当前数据库
flushdb

# 清空所有数据库
flushall

关闭Redis​

# 安全关闭Redis
/usr/local/redis/bin/redis-cli shutdown

# 如果设置了密码
/usr/local/redis/bin/redis-cli -a yourpassword shutdown

以上就是在单机环境下安装和配置Redis的完整教程。相比集群版,单机版更加简单,适合用于开发和测试环境。