Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 [1]
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
redis的官网地址,非常好记,是redis.io。(域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地),Vmware在资助着redis项目的开发和维护。
- 实验环境 CentOS 7
- Redis 版本 6.0.9
- GCC 版本 9.3.1
安装前的准备工作,由于CentOS7 自带的GCC 版本较低,需要升级才可以编译安装 Redis
- yum -y install centos-release-scl
- yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
- scl enable devtoolset-9 bash 临时有效
- echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile 长期生效
- . /etc/profile
- 如果编译 make 时报错: make: *** [server.o] Error 1 ,就是由于GCC版本过低造成的
升级完 GCC 后从官网下载 Redis
- Redis 官网https://redis.io/
- wget https://download.redis.io/releases/redis-6.0.9.tar.gz
- tar -zxvf redis-6.0.9.tar.gz
- mkdir -p /usr/local/redis/log #创建日志文件存放目录
- mv ./redis-6.0.9 /usr/local/redis
- cd /usr/local/redis
- make && make test && mekeinstall
- 编译安装顺利完成,在 /usr/local/bin 下会有 Redis 脚本
-
Redis的主要组件
redis-benchmark:Redis 性能检测工具,测试Redis在你的系统及你的配置下的读写性能。
redis-check-aof:Redis aof 日志文件修复工具。
redis-check-rdb:Redis 的dump 数据文件的修复工具,是rdb备份的文件。
redis-cli:Redis 命令行执行工具。
redis-server:Redis 服务器的守护进程启动程序。
redis-trib.rb: 是官方提供的Redis Cluster的管理工具。
- 编辑 Redis 的配置文件 redis.conf
- vim /usr/local/redis/redis.conf
- bind 127.0.0.1 #默认使用本地网络
requirepass 123456 #修改密码
daemonize yes #设置是否支持开机启动
dir /usr/local/redis/ # db保存路径
logfile "/usr/local/redis/log/redis.log" #设置日志以及日志存放位置
- 确认无误保存退出,然后在 /etc 下创建 redis 目录,把 redis.conf 配置文件复制过去
- 在 /etc/systemd/system 下新建 service文件
- vim /usr/lib/systemd/system/redis.service
-
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
#Restart=always
Type=forking
#User=redis
#Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755[Install]
WantedBy=multi-user.target
-
Restart取值及含义
no(默认值):退出后不会重启 on-success:只有正常退出时(退出状态码为0),才会重启 on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启 on-abnormal:只有被信号终止和超时,才会重启 on-abort:只有在收到没有捕捉到的信号终止时,才会重启 on-watchdog:超时退出,才会重启 always:不管是什么退出原因,总是重启
-
Type字段取值及含义
simple(默认值):ExecStart字段启动的进程为主进程 forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程 oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务 dbus:类似于simple,但会等待 D-Bus 信号后启动 notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务 idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合
- 确认无误保存退出
-
systemctl enable redis systemctl daemon-reload systemctl start redis
- 安装启动完成,Port 6379 PID 13247
- 使用 redis-cli 登陆数据库
- 此时输入命令时出现:(error) NOAUTH Authentication required 报错,需要使用 auth [password] 密码进行登录(password 为你的redis服务器的密码)。
- redis-cli -h localhost -p 6379 -a 123456
- -h 服务器IP
- -p 端口
- -a 密码
- 增加 IP ,修改完配置文件要重新启动服务
- /etc/redis/redis.conf
grep -v "^#" /etc/redis/redis.conf|grep -v "^$"
bind 127.0.0.1 192.168.2.3 192.168.179.252
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/usr/local/redis/log/redis.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir /usr/local/redis/
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
requirepass 123456
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
oom-score-adj no
oom-score-adj-values 0 200 800
appendonly no
appendfilename "appendonly.aof"
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
jemalloc-bg-thread yes