Redis简介
Redis是一个开源的key-value数据库,由C语言编写,对多种编程语言提供了支持。
Redis的特点
- 是内存数据库,数据存储在内存中,性能极高
-
支持数据的持久化,可以将内存中的数据持久化到硬盘
-
支持数据备份,redis存储的数据有2份,一份在内存中,一份持久化到硬盘,会自动同步到硬盘
- 支持hash,list,set,zset(sorted set)等多种数据结构
-
支持事务,可使用MULTI、EXEC指令将多个操作包起来作为一个事务
-
特性丰富,提供发布/订阅、通知、 key 过期等特性
redis常见的使用场景
- 缓存数据库查询结果
- 分布式系统的数据共享,比如session共享
- 任务队列,比如存储秒杀、抢购、抢票等用户|订单队列
- 数据过期处理,设置一个过期时间,到期自动删除该数据
Linux下安装Redis
1、安装gcc
redis需要自己编译,redis是c语言写的,所以需要安装c语言的编译器gcc。
先看下是否安装了gcc,没有安装就装上。
yum list --installed | grep gcc
yum install gcc
2、/usr/local下新建目录redis,将redis下载至该目录,解压,删除压缩包
mkdir /usr/local/redis
cd /usr/local/redis
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar -xzvf redis-5.0.7.tar.gz
rm redis-5.0.7.tar.gz
3、切换到解压目录下,编译
cd redis-5.0.7
make
4、安装redis
make install PREFIX=/usr/local/redis
指定安装目录为/usr/local/redis 。安装完成后,redis/bin下有2个文件:redis-server、redis-cli。
redis-server是redis的服务器,即redis数据库;redis-cli是redis客户端,用来操作redis数据库。
解压的目录里的很多程序、配置文件后续还要使用,不能删除。
把redis作为服务,开机自启
redis下新建目录conf,把解压目录下的redis.conf复制到conf下;
redis下新建目录logs,logs下新建文件redis.log;
redis下新建目录data。
运行解压目录下的utils/install_server.sh
utils/install_server.sh
根据提示,选择路径:
其实只需指定配置文件、redis-server的路径即可,但默认的日志保存位置、redis-server数据保存位置东一个、西一个,不好记、用时不好找,
我们自己新建文件|目录,统一放在redis下。
检查一下设置,按Enter安装服务,如果路径写错了按Ctrl+C取消安装,从头开始即可。
安装好以后,看到/etc/init.d下生成了一个redis_6379脚本文件,Linux启动时会自动执行init.d下的脚本。
安装服务以后,默认自动开启redis-server,并且redis-server会开机自启。
和tomcat、redis不一样,tomcat、redis直接在/etc/rc.d/rc.local中写上路径即可开机自启,redis要指定的路径很多,需要单独用脚本来启动(指定路径)。
分析
install_server.sh的执行过程其实就是:
把utils/redis_init_script拷到/etc/init.d下,重命名为redis_$port,根据我们设置的端口号、路径来修改redis_init_script中对应的部分,
然后把redis添加为服务、将redis服务设置为开机启动。
redis_init_script是一个服务脚本,包含了启动、关闭redis-server的命令。
我们看一下redis_init_script的部分代码:
第一处是把redis添加为服务,第二处是把设置redis服务的开机启动(在/etc/rc.d下添加redis_$port脚本)。
设置的服务名是redis_${REDIS_PORT},端口号一般是6379,所以服务名一般是redis_6379,
看不顺眼的可以在安装服务前把里面的redis_${REDIS_PORT}全部替换为redis,这样服务名就是redis了。
所以也可以自己把utils/redis_init_script拷到/etc/init.d下,重命名这个文件,修改里面的配置,
然后chkconfig添加为服务、设置开启等级,
至于开机启动服务,可以把/etc/init.d下的服务脚本拷到/etc/rc.d/init.d下,开机会自动执行/etc/rc.d/init.d下的脚本;
或者在/etc/rc.d/rc.local中添加/etc/init.d下服务脚本的路径,开机会自动执行/etc/rc.d/rc.local中指定的脚本文件;
或者直接使用 chkconfig | systemctl 将服务设置为开机自启,都可以。
防火墙设置
Linux防火墙要开放6379端口,外部机器才能连接redis服务器。
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
需要重启防火墙才会生效,不然你看到显示success开启成功,但外部机器依然连不上。
指定Redis服务器的ip地址
编辑redis.conf:
vim conf/redis.conf
/bind 搜索关键字bind,将ip修改为Linux的ip地址:
注意是虚线下面的那个。
默认Redis服务器的ip是127.0.0.1,只能在Linux本地才能连接上,打开了防火墙的6379端口,外部也连不上。
需要修改为Linux的ip地址。
重启redis才会生效:
service redis_6379 restart
redis服务器启动|关闭的3种方式
1、前台启动
直接运行redis/bin下的redis-server,启动后终端的这个标签页不能再使用,需要新建一个标签页来操作。
Ctrl+C或直接关闭redis所在标签页,即可关闭redis服务器。
不方便,不推荐使用。
Ctrl+C可取消|停止Linux终端正在执行的命令,C即cancel。
2、后台启动
(1)修改redis.conf,将daemonize设置为yes
vim conf/redis.conf
一进去就是命令模式,/daemonize查找:
默认是no,将它改为yes,设置为守护进程,这样启动redis服务器时会后台启动,前台没有启动界面。
(2)启动redis服务器
./redis-server conf/redis.conf
就是执行bin下面的redis-server,传入配置文件的路径。
(3)关闭redis服务器
./redis-cli shutdown
通过redis客户端,向redis服务器发送关闭命令。
3、服务方式
方式一:
service redis_6379 start
service redis_6379 stop
方式二:
systemctl start redis_6379
systemctl stop redis_6379
每个人设置的服务名可能不一致,我的是redis_6379。
服务方式的好处:
- 不必cd到指定目录
- 我们安装服务时指定了配置文件的位置,所以也不必传入配置文件的路径
操作Redis服务器的2个工具
1、redis自带的客户端redis-cli
./redis-cli -h 192.168.1.7 -p 6379
-h指定redis服务器地址,-p指定redis服务器使用的端口号。缺省-h时默认为127.0.0.1,缺省-p时默认为未6379。
如果未修改redis.conf中绑定的ip,Linux上直接./redis-cli就可以连上,ip、port使用默认值即可;如果修改了redis.conf中绑定的ip,则用-h 127.0.0.1连不上,必须用绑定的ip才可以。
输入exit或quit即可退出redis客户端。
2、Redis Desktop Manager
下载安装Redis Desktop Manager,这个软件是收费的,Windows、MacOS、Linux的版本都有。
输入ip、端口号,redis服务器默认没有密码,不填验证。
先点击“测试连接”看能不能连上,能连上才点确定。
连接失败常见的原因:
- 防火墙没打开6378端口,需重启防火墙才会生效
- redis.conf没有绑定Linux的ip,需重启redis服务器才会生效
相比redis自带的客户端,Redis Desktop Manager可以统计数据、查看使用情况:
一般用redis-cli来操作数据库,用Redis Desktop Manager来查看、分析数据|使用情况。
Redis官方只提供了Linux版,微软自己搞了个山寨的Windows版,可以在github上下载,但基本没公司在实际中用。