Redis介绍
Redis是一个开源的、内存中的数据结构存储系统,用作数据库、缓存、消息中间件。它提供了丰富的数据结构,包括字符串、哈希、列表、集合、有序集合、位图、HyperLogLog、地理空间索引和流。以下是 Redis 的一些主要特点和用途:
- 内存存储:Redis主要将数据存储在内存中,因此读写速度非常快,适合作为缓存系统使用。
- 持久化支持:除了内存存储,Redis还支持数据持久化到磁盘,可以根据需求选择RDB快照或者AOF日志方式进行持久化。
- 数据结构丰富:Redis支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等,可以灵活地应对不同场景的数据存储需求。
- 原子性操作:Redis的操作是原子性的,能够保证多个操作的一致性,支持事务和乐观锁等机制。
- 发布订阅:Redis支持发布与订阅模式,可以实现消息的广播和接收,适用于消息队列、通知系统等场景。
- 分布式缓存:Redis可以部署为集群,支持分布式缓存,提高了系统的扩展性和容错性。
- 高可用性:Redis提供了主从复制和哨兵机制,确保了系统的高可用性和容灾能力。
- 性能优化:Redis经过优化,具有高效的读写速度和低延迟,适合处理大规模数据和高并发请求。
总的来说,Redis是一个功能强大、性能优异的内存数据存储系统,广泛应用于缓存、会话存储、实时数据分析、队列等领域,是许多Web应用程序中重要的组件之一。
Redis下载
在线下载
- Windows版下载地址:https://github.com/microsoftarchive/redis/releases
- Linux版下载地址: https://download.redis.io/releases/
离线下载
有可能因为网络原因无法从官方下载,为了大家方便,我已经把软件上传到网盘了,效果如下图:
Windows安装Redis
Windows安装Redis
注意:Windows版Redis是绿色版的,只要解压即完成安装。Redis不能放在有中文或空格的路径下。
- 把
Redis-x64-3.2.100.zip
复制到没有中文和空的目录下,效果如下图:
- 在
Redis-x64-3.2.100.zip
压缩包上右键,选择解压到"Redis-x64-3.2.100\"
,效果如下图:
- 解压后效果:
到此就完成了Redis的安装。进入Redis安装目录Redis-x64-3.2.100
,效果如下图:
Windows启动Redis
在Redis目录打开Dos命令行,使用redis-server.exe redis.windows.conf
启动Redis,效果如下图:
Redis服务默认端口号是6379
,在命令行使用Ctrl + C
停止Redis服务。
Windows命令行连接Redis
当Redis服务启动成功后,可通过Redis自带的客户端redis-cli.exe
连接Redis服务端。
通过redis-cli.exe命令默认连接的是本地的redis服务,并且使用默认6379端口。也可以通过指定如下参数连接:
- -h ip地址
- -p 端口号
- -a 密码(如果需要)
redis-cli.exe -h localhost -p 6379 -h localhost 可以省略 -p 6379 可以省略
效果如下图:
修改Redis配置文件
设置Redis服务密码,修改redis.windows.conf
requirepass 123456
注意:
- 修改密码后需要重启Redis服务才能生效
- Redis配置文件中 # 表示注释
重启Redis服务后,再次连接Redis时,需加上密码,否则连接失败。
redis-cli.exe -h localhost -p 6379 -a 123456 或 redis-cli.exe -a 123456
此时,-h 和 -p 参数可省略不写。
Windows卸载Redis
Linux安装Redis-yum方式
配置EPEL仓库
EPEL 的全称为 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。EPEL则为服务器版本提供大量的rpm包,而且大多数rpm包在官方 repository 中是找不到的。
命令说明:
# 安装EPEL yum install -y epel-release
操作示例:
[root@cxypa soft]# yum install -y epel-release 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: ftp.sjtu.edu.cn * extras: ftp.sjtu.edu.cn * updates: ftp.sjtu.edu.cn 正在解决依赖关系 --> 正在检查事务 ---> 软件包 epel-release.noarch.0.7-11 将被 安装 --> 解决依赖关系完成 # 省略其他 已安装: epel-release.noarch 0:7-11 完毕! [root@cxypa soft]#
使用yum安装Redis
命令说明:
# 安装Redis yum install -y redis
操作示例:
[root@cxypa soft]# yum install -y redis 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile epel/x86_64/metalink | 6.7 kB 00:00:00 * base: ftp.sjtu.edu.cn * epel: mirrors.bfsu.edu.cn * extras: ftp.sjtu.edu.cn * updates: ftp.sjtu.edu.cn epel | 4.7 kB 00:00:00 (1/3): epel/x86_64/group_gz | 98 kB 00:00:00 (2/3): epel/x86_64/updateinfo | 1.0 MB 00:00:00 (3/3): epel/x86_64/primary_db | 7.0 MB 00:00:03 # 省略其他 已安装: redis.x86_64 0:3.2.12-2.el7 作为依赖被安装: jemalloc.x86_64 0:3.6.0-1.el7 完毕! [root@cxypa soft]#
服务方式启动Redis
Redis安装后会自动创建一个名为redis
的服务。
命令说明:
systemctl start redis # 启动redis systemctl enable redis # 开机自动启动redis
操作示例:
[root@cxypa soft]# systemctl start redis [root@cxypa soft]# systemctl status redis ● redis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/redis.service.d └─limit.conf Active: active (running) since 六 2022-12-24 18:45:06 CST; 2min 3s ago Main PID: 77765 (redis-server) CGroup: /system.slice/redis.service └─77765 /usr/bin/redis-server 127.0.0.1:6379 12月 24 18:45:06 cxypa systemd[1]: Starting Redis persistent key-value database... 12月 24 18:45:06 cxypa systemd[1]: Started Redis persistent key-value database. [root@cxypa soft]# [root@cxypa soft]# systemctl enable redis Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service. [root@cxypa soft]#
本地连接Redis
命令说明:
# 是Redis提供的一个客户端,默认是连接本机的6349 redis-cli
操作示例:
[root@cxypa soft]# redis-cli 127.0.0.1:6379> set username cxyhao OK 127.0.0.1:6379> get username "cxyhao" 127.0.0.1:6379>
卸载Redis
- 停止Redis服务
systemctl stop redis
2. 查看MySQL安装了哪些东西
rpm -qa | grep -i redis
操作示例:
[root@cxypa etc]# rpm -qa | grep -i redis redis-3.2.12-2.el7.x86_64 [root@cxypa etc]#
3. 开始卸载
操作示例:
[root@cxypa etc]# yum remove redis-3.2.12-2.el7.x86_64
- 查看是否卸载完成
[root@cxypa ~]# rpm -qa | grep -i redis [root@cxypa ~]#
- 查找Redis相关目录
操作示例:
[root@cxypa etc]# find / -iname *redis* /etc/selinux/targeted/active/modules/100/redis /var/lib/redis /var/log/redis
- 删除相关目录
操作示例:
[root@cxypa etc]# find / -iname *redis* /etc/selinux/targeted/active/modules/100/redis /var/lib/redis /var/log/redis [root@cxypa etc]# rm -fr /etc/selinux/targeted/active/modules/100/redis [root@cxypa etc]# rm -fr /var/lib/redis [root@cxypa etc]# rm -fr /var/log/redis
到此就完成了Redis的卸载。
Linux安装Redis-源码编译方式
安装C语言的编译环境
Redis是C语言开发的,安装Redis需要先将官网下载的源码进行编译,编译依赖gcc环境。如果没有gcc环境,需要安装gcc,在线安装的命令如下。
命令说明:
yum -y install gcc-c++
操作示例:
[root@cxypa local]# yum -y install gcc-c++ 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: ftp.sjtu.edu.cn * epel: mirrors.bfsu.edu.cn * extras: ftp.sjtu.edu.cn * updates: ftp.sjtu.edu.cn 正在解决依赖关系 --> 正在检查事务 ---> 软件包 gcc-c++.x86_64.0.4.8.5-36.el7 将被 升级 ---> 软件包 gcc-c++.x86_64.0.4.8.5-44.el7 将被 更新 --> 正在处理依赖关系 libstdc++-devel = 4.8.5-44.el7,它被软件包 gcc-c++-4.8.5-44.el7.x86_64 需要 --> 正在处理依赖关系 libstdc++ = 4.8.5-44.el7,它被软件包 gcc-c++-4.8.5-44.el7.x86_64 需要 --> 正在处理依赖关系 gcc = 4.8.5-44.el7,它被软件包 gcc-c++-4.8.5-44.el7.x86_64 需要 # 省略其他 更新完毕: gcc-c++.x86_64 0:4.8.5-44.el7 作为依赖被升级: cpp.x86_64 0:4.8.5-44.el7 gcc.x86_64 0:4.8.5-44.el7 gcc-gfortran.x86_64 0:4.8.5-44.el7 libgcc.x86_64 0:4.8.5-44.el7 libgfortran.x86_64 0:4.8.5-44.el7 libgomp.x86_64 0:4.8.5-44.el7 libquadmath.x86_64 0:4.8.5-44.el7 libquadmath-devel.x86_64 0:4.8.5-44.el7 libstdc++.x86_64 0:4.8.5-44.el7 libstdc++-devel.x86_64 0:4.8.5-44.el7 完毕! [root@cxypa local]#
下载Redis安装包
命令说明:
# 下载Redis安装包 wget http://download.redis.io/releases/redis-6.2.5.tar.gz
操作示例:
[root@cxypa local]# cd /soft [root@cxypa soft]# pwd /soft [root@cxypa soft]# wget http://download.redis.io/releases/redis-6.2.5.tar.gz --2022-12-24 19:58:28-- http://download.redis.io/releases/redis-6.2.5.tar.gz 正在解析主机 download.redis.io (download.redis.io)... 45.60.125.1 正在连接 download.redis.io (download.redis.io)|45.60.125.1|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:2465302 (2.4M) [application/octet-stream] 正在保存至: “redis-6.2.5.tar.gz” 100%[=============================================================>] 2,465,302 6.13MB/s 用时 0.4s 2022-12-24 19:58:29 (6.13 MB/s) - 已保存 “redis-6.2.5.tar.gz” [2465302/2465302]) [root@cxypa soft]# ll 总用量 160304 -rw-r--r--. 1 root root 11984522 10月 3 23:53 apache-tomcat-10.0.27.tar.gz -rw-r--r--. 1 root root 149697219 12月 24 17:03 jdk-8u351-linux-x64.tar.gz -rw-r--r--. 1 root root 2465302 7月 22 2021 redis-6.2.5.tar.gz [root@cxypa soft]#
可以看到redis-6.2.5.tar.gz
说明下载成功。
解压Redis安装包
命令说明:
# 解压Redis安装包 tar -zxvf redis-6.2.5.tar.gz
操作示例:
[root@cxypa soft]# tar -zxvf redis-6.2.5.tar.gz -C /opt/ # 开始解压,直到完成。。。 [root@cxypa soft]# cd /opt/redis-6.2.5/ [root@cxypa redis-6.2.5]#
编译Redis
切换到Redis解压目录下/opt/redis-6.2.5/
,执行make
编译Redis源码。
命令说明:
# 编译源码 make
操作示例:
[root@cxypa soft]# cd /opt/redis-6.2.5/ [root@cxypa redis-6.2.5]# make cd src && make all make[1]: 进入目录“/opt/redis-6.2.5/src” CC Makefile.dep make[1]: 离开目录“/opt/redis-6.2.5/src” make[1]: 进入目录“/opt/redis-6.2.5/src” # 省略其他 Hint: It's a good idea to run 'make test' ;) make[1]: 离开目录“/opt/redis-6.2.5/src” [root@cxypa redis-6.2.5]#
安装编译后的Redis
命令说明:
make install
操作示例:
[root@cxypa redis-6.2.5]# make install cd src && make install make[1]: 进入目录“/opt/redis-6.2.5/src” CC Makefile.dep make[1]: 离开目录“/opt/redis-6.2.5/src” make[1]: 进入目录“/opt/redis-6.2.5/src” Hint: It's a good idea to run 'make test' ;) INSTALL redis-server INSTALL redis-benchmark INSTALL redis-cli make[1]: 离开目录“/opt/redis-6.2.5/src” [root@cxypa redis-6.2.5]#
前端模式启动Redis
直接运行bin/redis-server
以前端模式启动Redis,前端模式启动的缺点是启动完成后不能再进行其他操作,如果要操作必须使用ctrl+c结束redis-server程序,开发中不推荐使用此方法。
命令说明:
redis-server
操作示例:
[root@cxypa redis]# cd bin/ [root@cxypa bin]# pwd /usr/local/redis/bin [root@cxypa bin]# redis-server 67595:C 24 Dec 2022 20:22:41.816 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 67595:C 24 Dec 2022 20:22:41.816 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=67595, just started 67595:C 24 Dec 2022 20:22:41.816 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf 67595:M 24 Dec 2022 20:22:41.818 * Increased maximum number of open files to 10032 (it was originally set to 1024). 67595:M 24 Dec 2022 20:22:41.818 * monotonic clock: POSIX clock_gettime _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 6.2.5 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 67595 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | https://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 67595:M 24 Dec 2022 20:22:41.825 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 67595:M 24 Dec 2022 20:22:41.825 # Server initialized 67595:M 24 Dec 2022 20:22:41.825 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. 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. 67595:M 24 Dec 2022 20:22:41.826 * Ready to accept connections
使用CTRL+ C 停止前端模式
^C67595:signal-handler (1671884645) Received SIGINT scheduling shutdown... 67595:M 24 Dec 2022 20:24:05.801 # User requested shutdown... 67595:M 24 Dec 2022 20:24:05.801 * Saving the final RDB snapshot before exiting. 67595:M 24 Dec 2022 20:24:05.803 * DB saved on disk 67595:M 24 Dec 2022 20:24:05.803 # Redis is now ready to exit, bye bye... [root@cxypa bin]#
后端模式启动Redis
将之前解压出来的/opt/redis-6.2.5/redis.conf
配置文件复制备份为redis.conf_bak
。
操作示例:
[root@cxypa redis-6.2.5]# cp /opt/redis-6.2.5/redis.conf redis.conf_bak [root@cxypa redis-6.2.5]#
redis.conf
配置文件的daemonize
默认值为no
,表示前端模式启动,修改redis.conf
配置文件的daemonize
配置项改为yes
,daemonize yes
表示后端模式启动。
vim redis.conf
[root@cxypa redis-6.2.5]# vim redis.conf 搜索daemonize,把no修改为yes # By default Redis does not run as a daemon. Use 'yes' if you need it. # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. # When Redis is supervised by upstart or systemd, this parameter has no impact. daemonize yes
使用./redis-server redis.conf
,启动时指定配置文件。
[root@cxypa redis-6.2.5]# redis-server redis.conf [root@cxypa redis-6.2.5]# ps -ef | grep redis root 89406 1 0 20:31 ? 00:00:00 ./redis-server 127.0.0.1:6379 root 89737 7423 0 20:31 pts/0 00:00:00 grep --color=auto redis [root@cxypa redis-6.2.5]#
本地连接Redis
命令说明:
# 是Redis提供的一个客户端,默认是连接本机的6349 redis-cli
操作示例:
[root@cxypa redis-6.2.5]# redis-cli 127.0.0.1:6379> set username cxyhao OK 127.0.0.1:6379> get username "cxyhao" 127.0.0.1:6379>
远程连接Redis
Redis
默认绑定6379端口,由于CentOS7默认开启了防火墙,远程连接被拦截了,需要打开6379的端口号,才能远程访问Redis
。
命令说明:
# 显示现有的规则 firewall-cmd --list-all # 开放的端口永久保存到防火墙 firewall-cmd --zone=public --add-port=6379/tcp --permanent # 重启防火墙 systemctl restart firewalld
操作示例:
[root@cxypa redis-6.2.5]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: ssh dhcpv6-client ports: 3306/tcp 8080/tcp 80/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@cxypa redis-6.2.5]# firewall-cmd --zone=public --add-port=6379/tcp --permanent success [root@cxypa redis-6.2.5]# systemctl restart firewalld [root@cxypa redis-6.2.5]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: ssh dhcpv6-client ports: 3306/tcp 8080/tcp 80/tcp 6379/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@cxypa redis-6.2.5]#
使用windows下的客户端软件连接Linux的Redis,发现客户端依然无法连接Redis,Redis默认只允许本机访问。将redis.conf
配置文件中的bind 127.0.0.1
配置项修改为bind 0.0.0.0
,允许其它远程主机访问。
[root@cxypa redis-6.2.5]# vim redis.conf # 搜索bind,在bind 127.0.0.1前面添加#注释 # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES # JUST COMMENT OUT THE FOLLOWING LINE. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # bind 0.0.0.0
在windows下使用Redis的recis-cli连接远程的Redis,效果如下:
D:\develop\Redis-x64-3.2.100> D:\develop\Redis-x64-3.2.100>redis-cli.exe -h 192.168.100.133 -p 6379 192.168.100.133:6379> 192.168.100.133:6379> 192.168.100.133:6379> set aaa 111 OK 192.168.100.133:6379> get aaa "111" 192.168.100.133:6379>