001.Redis 简介及安装

发布于:2025-08-18 ⋅ 阅读:(15) ⋅ 点赞:(0)

Redis简介

Redis 简介

Redis是一种支持key-value等多种数据结构完全开源免费的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。主要提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。

Redis 与其他 key-value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

性能极高:Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型: Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子特性:Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
丰富的特性: Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储差异化

Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。
Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

引用官方:http://www.redis.net.cn/tutorial/3502.html

丰富的额外功能

  • 提供了键过期功能,可以用来实现缓存;
  • 提供了发布订阅功能,可以用来实现消息系统;
  • 支持Lua脚本功能,可以利用Lua创造出新的Redis命令;
  • 提供了简单事务功能,能在一定程度上保证事务特性;
  • 提供了流水线(Pipeline)功能,可以将一批命令一次性传到Redis,减少网络开销。

Redis使用场景

基于Redis丰富的特性,Redis可适用于多种场景,主要有如下:

  • 缓存:合理使用缓存不仅能加快数据访问,还能有效降低后端数据源的压力。
  • 排行榜系统:Redis可适用于各种复杂维度的场景,能提供列表和有序集合的数据结构,可快速方便构建各种排行榜系统。
  • 计数器应用:Redis天然支持计数功能。
  • 社交网络:Redis提供的数据结构能容易的实现各种社交网络的必备及常见功能。
  • 消息队列系统:Redis提供了发布订阅功能和阻塞队列功能,可满足一般的消息队列需求。

Redis安装

前置准备

[root@redis01 ~]# echo "vm.overcommit_memory=1" > /etc/sysctl.d/redis-sysctl.conf
[root@redis01 ~]# sysctl -p /etc/sysctl.d/redis-sysctl.conf
[root@redis01 ~]# echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local

[root@redis01 ~]# yum -y install gcc gcc-c++ 

提示:如上为redis建议的优化项,具体释义及更多优化项可参考:Redis的Linux系统优化

[root@redis01 ~]# vi /etc/hosts
……
172.24.8.xx redis01
172.24.8.xx redis02
172.24.8.xx redis03
172.24.8.xx redisclient
……

提示:为便于后续试验,根据实际情况直接添加相应IP主机解析至所有节点,本实验使用4台主机,最后一台规划为Redis客户端。

Linux编译安装

[root@redis01 ~]# mkdir -p /tmp/redis-tmp
[root@redis01 ~]# REIDS_VER=8.0.3
[root@redis01 ~]# DOWNLOAD_URL=https://mirrors.huaweicloud.com/redis/
[root@redis01 ~]# curl -L ${DOWNLOAD_URL}/redis-${REIDS_VER}.tar.gz -o /tmp/redis-${REIDS_VER}.tar.gz
[root@redis01 ~]# tar xzvf /tmp/redis-${REIDS_VER}.tar.gz -C /tmp/redis-tmp --strip-components=1 --no-same-owner

[root@redis01 ~]# cd /tmp/redis-tmp
[root@redis01 redis-tmp]# time make -j4
[root@redis01 redis-tmp]# make install PREFIX=/usr/local/redis

[root@redis01 ~]# echo "PATH=/usr/local/redis/bin:\$PATH" >> /etc/profile.d/redis.sh
[root@redis01 ~]# source /etc/profile.d/redis.sh
[root@redis01 ~]# redis-cli -v                      #查看版本
redis-cli 8.0.3

提示:若编译错误,可通过make distclean && make清理上次编译残留再次编译。

Redis命令

[root@redis01 ~]# ll /usr/local/redis/bin/          #查看Redis安装后命令

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可执行文件 作用
redis-benchmark Redis基准测试工具
redis-check-aof Redis AOF持久化文件检测和修复工具
redis-check-rdb Redis RDB持久化文件检测和修复工具
redis-cli Redis命令行客户端
redis-sentinel 启动Redis Sentinel
redis-server 启动Redis

Redis启动

Redis启停

  • 方式一:Redis后台启动配置方式(推荐)
[root@redis01 ~]# mkdir -p /etc/redis/ /var/lib/redis/redis01/                  #创建配置文件和持久化数据保存路径
[root@redis01 ~]# cp /tmp/redis-tmp/redis.conf /etc/redis/redis01_6379.conf     #复制配置文件
[root@redis01 ~]# vim /etc/redis/redis01_6379.conf                              #将启动方式改为后台
#……
#bind 127.0.0.1 -::1                                                            #注释原有配置
bind 0.0.0.0 -::1                                                               #追加此行,开启远程访问
#……
protected-mode no                                                               #修改为no
#……
daemonize yes                                                                   #将启动方式改为后台
#……
dir /var/lib/redis/redis01/
#……

提示:推荐以此方式启动Redis,从而可以使用配置文件,在后台启动,并且多个Redis启动建议多个以模板复制的配置文件。
redis优雅关闭会断开与客户端的连接、生产持久化文件,强烈不建议直接使用kill关闭。

  • 方式二:Redis前台默认配置文件启停
[root@redis01 ~]# redis-server                      #前台启动方式
ctrl+c                                              #强制停止redis
[root@redis01 ~]# redis-cli shutdown                #正常停止redis

提示:正常停止redis需要在运行窗口之外另开一个终端窗口,同时此方式无法自定义配置,通常生产环境不建议。

  • 方式三:Redis前台自定配置选项启停
    语法:# redis-server --configKey1 configValue1 --configKey2 configValue2
[root@redis01 ~]# redis-server --port 6380          #指定端口启动

服务管理

  • 命令行服务管理
    配置允许后台启动后,可通过命令行指定配置文件来启动Redis。
[root@redis01 ~]# redis-server /etc/redis/redis01_6379.conf                     #指定配置并后台启动
[root@redis01 ~]# ps -ef | grep redis
[root@redis01 ~]# kill -9 112713                                                #强制停止Redis
[root@redis01 ~]# redis-cli shutdown                                            #正常停止redis
  • 服务单元管理
    通过服务单元的方式管理Redis是更推荐的方式,更符合最佳实践。
[root@redis01 ~]# vi /usr/lib/systemd/system/redis-server.service
[Unit]
Description=Redis Server Manager
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://redis.io/documentation

[Service]
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/redis01_6379.conf
ExecStop=/usr/local/redis/bin/redis-cli shutdown
#Restart=on-failure
RestartSec=5
Type=forking

[Install]
WantedBy=multi-user.target

[root@redis01 ~]# mkdir -p /run/redis
[root@redis01 ~]# systemctl daemon-reload
[root@redis01 ~]# systemctl enable redis-server.service --now
[root@redis01 ~]# systemctl status redis-server.service
  • CentOS6传统方式
    通过传统脚本或service方式管理。
[root@redis01 ~]# cp /root/redis-8.0.1/utils/redis_init_script /etc/init.d/redisd
[root@redis01 ~]# vi /etc/init.d/redisd
#!/bin/sh
# chkconfig:   2345 90 10
# description:  Redis is a persistent key-value database    #添加此两行
……
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server                      #修改为正确的路径
CLIEXEC=/usr/local/redis/bin/redis-cli                      #修改为正确的路径
……
CONF="/etc/redis/redis01_${REDISPORT}.conf"                 #修改为正确配置文件
[root@redis01 ~]# chkconfig redisd on                       #开机启动
[root@redis01 ~]# service redisd start                      #启动Redis
[root@redis01 ~]# service redisd stop                       #停止Redis

确认验证

验证端口

[root@redis01 ~]# netstat -tlunp | grep redis               #查看端口
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      7158/redis-server 1
tcp6       0      0 ::1:6379                :::*                    LISTEN      7158/redis-server 1

[root@redis01  ~]# redis-cli                                #客户端连接
127.0.0.1:6379> exit

客户端连接

客户端安装

参考服务端安装即可。

远程连接开启

客户端从其他节点管理/连接,需要服务端开启相关配置,可确认如下配置是否开启。

[root@redis01 ~]# cat /etc/redis/redis01_6379.conf             #确认如下开启远程访问
#……
#bind 127.0.0.1 -::1                                        #注释此行
bind 0.0.0.0 -::1                                           #追加此行
#……
protected-mode no                                           #修改为no
#……
daemonize yes                                               #修改为yes
#……
[root@redis01 ~]# systemctl restart redis-server.service

提示:若要远程连接需要服务端配置文件中如下操作:
将 bind 127.0.0.1使用#注释掉,改为bind 0.0.0.0 -::1(bind配置的是允许连接的ip,默认只允许本机连接;若远程连接需注释掉,或改为0.0.0.0)
将 protected-mode yes 改为 protected-mode no(3.2之后加入的新特性,目的是禁止公网访问redis cache,增强redis的安全性)。

远程连接测试

语法:# redis-cli -h {host} -p {port} {command}

[root@redis02 ~]# redis-cli -h redis01 -p 6379              #使用host及port参数
redis01:6379> set name zhangsan
OK
redis01:6379> get name
"zhangsan"
redis01:6379> exit
[root@redis02 ~]# redis-cli -h redis01 -p 6379 get name
"zhangsan"

Redis配置文件解析

配置项

daemonize:如需要在后台运行,把该项的值改为yes;
pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址;
bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项;
port:监听端口,默认为6379;
timeout:设置客户端连接时的超时时间,单位为秒;
loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice;
logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上;
database:设置数据库的个数,默认使用的数据库是0;
save:设置redis进行数据库镜像的频率;
rdbcompression:在进行镜像备份时,是否进行压缩;
dbfilename:镜像备份文件的文件名;
dir:数据库镜像备份的文件放置的路径,通常存放持久化文件和日志文件;
slaveof:设置该数据库为其他数据库的从数据库;
masterauth:当主数据库连接需要密码验证时,在这里设定;
requirepass:设置客户端连接后进行任何其他指定前需要使用的密码;
maxclients:限制同时连接的客户端数量;
maxmemory:设置redis能够使用的最大内存;
appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态;
appendfsync:设置appendonly.aof文件进行同步的频率;
vm_enabled:是否开启虚拟内存支持;
vm_swap_file:设置虚拟内存的交换文件的路径;
vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0;
vm_page_size:设置虚拟内存页的大小;
vm_pages:设置交换文件的总的page数量;
vm_max_thrrads:设置vm IO同时使用的线程数量。

参考文档:https://www.cnblogs.com/wangchunniu1314/p/6339416.html
https://www.cnblogs.com/zuidongfeng/p/8032505.htm


网站公告

今日签到

点亮在社区的每一天
去签到