Redis 是一款比较常用的 NoSQL 数据库,我们通常使用 Redis 来做缓存,这是一篇关于 Redis 安装的文章,所以不会涉及到 Redis 的高级特性和使用场景,Redis 能够兼容绝大部分的 POSIX 系统,例如 Linux、OS X 等,但是很遗憾不支持在 Windows 上安装,当然如果你需要在 windows 下安装 redis 的话,也是可以的,微软公司的开源技术组在 GitHub 上 维护一个 Redis 的分支,GitHub 地址为:https://github.com/microsoftarchive/redis,我看了一下这上面的版本比较旧,所以我个人不推荐使用这个来安装 Redis ,Windows 用户可以使用 Docker 容器来安装,也是非常方便、简单的,接下来我们就一起来看看 Redis 的安装方式吧。

1、Linux 系统下安装 redis

安装

在 redis 官网中有安装教程,链接:https://redis.io/download,安装步骤我拷贝过来了,步骤如下:

$ wget http://download.redis.io/releases/redis-5.0.6.tar.gz
$ tar xzf redis-5.0.6.tar.gz
$ cd redis-5.0.6
$ make

我在 /usr/local 目录下面操作的这些命令,也就是说 Redis 的安装目录为 /usr/local ,这些命令执行完之后你的机器上安装好 Redis ,在安装的过程中,如果你的机器上没有安装 gcc ,你安装好 gcc 之后再 make 可能会报以下错误

jemalloc/jemalloc.h: No such file or directory

当时没有截取详细的错误信息,只把主要的一段截取出来了,这个错误的原因是我们上一次 make 报错之后,有编译后的文件,所以我们需要清除上一次的残留文件再重新编译,将 make 换成 make distclean && make 就可以了。

redis.conf 文件

redis.conf 是 Redis 的配置文件,redis 的所有配置有在这个文件里面,这个文件挺大的有接近 1400 行,有关 redis 的操作、使用说明都在里面,可以详细的阅读阅读这个配置文件,大部分情况下我们使用默认配置就行,只需要设置少量配置就行。redis.conf 的存放位置在 Redis 的安装目录下,我这里是 /usr/local/redis-5.0.5 目录下,一起来看看我们可能会修改的几个配置:

  • bind 127.0.0.1:允许访问机器的IP,默认只有本机才能访问,你可以修改 ip 来运行其他机器也能访问,但是如果你想让所有机器都可以访问的话,直接设置为 bind 0.0.0.0 就行了。
  • port 6379:redis 实例启动的端口,默认为 6379
  • daemonize no:是否以守护进程的方式运行,默认是 no,也就是说你把启动窗口关闭了,redis 实例也就关闭了,一般这个选项我们设置为 yes,以守护进程的方式运行,说俗一点就是后台运行。
  • pidfile /var/run/redis_6379.pid:如果我们使用守护进程方式运行的话 ,就会产生一个后缀名为 .pid 的文件,这个使用默认的也行
  • dir ./:持久化文件存放位置,这个配置我们还是设置一下为好,我这里设置为 dir /usr/local/redis_data
  • appendonly no:是否开启 AOF 持久化方式,redis 默认只开启了 RDB 模式,这里我们设置为 yes,两种方式都开启,双重保险,关于这两种方式的区别,我们后面在学习

好像大概设置这几个就好了,更多关于 redis.conf 的配置,你可以详细阅读 redis.conf 配置文件或者查阅相关手册。

redis 的启动

Redis 的启动非常简单,Redis 安装完成之后,会在 /usr/local/redis-5.0.5/src 存放 Redis 的 shell 交互命令,其中有一个 redis-server ,这个就是 Redis 的启动命令,执行:

./redis-server /usr/local/redis-5.0.5/redis.conf

后面跟的是 redis.conf 的文件路径,不出意外的话我们将启动成功,你会看到如下界面:

这里我们使用的是守护进程的方式启动,所以不会出现带有 redis logo 的启动界面,我们可以使用 shell 命令登录到 Redis 中,还是在 src 目录下面,执行下面这条命令:

./redis-cli

这命令你就进入了 shell 交互界面,./redis-cli 命令可以带一些参数,例如 -h IP 这个就可以进入指定机器的 Redis 实例,进入之后你就可以进行一些操作了,如下图所示:

redis 关闭

Redis 的关闭方式有两种,一种是在 shell 交互界面关闭,另一种是 kill + 进程号关闭 Redis 实例的方式

shell 交互界面关闭

shutdown [nosave|save]

在 shell 交互界面输入 shutdown 命令就可以关闭 Redis 实例,后面有一个可选参数,nosave 就是不将内存中的数据持久化,save 就是将内存中的数据持久化。shutdown 关闭方式是比较优雅的关闭方式,建议使用这种关闭方式

Kill + 进程号关闭 Redis 实例

使用 ps -ef|grep redis 查看 Redis 进程号,如下图所示:

在这里找到我们需要关闭 redis 实例的进程号,比如这里我们的进程号为 27133,那么我们就直接使用 kill 27133 关闭 Redis 实例服务,这种方式我们需要注意一个地方,那就是需要我们去把 pid 文件删掉,pid 文件存放的位置我们在 redis.conf 里配置的 pidfile /var/run/redis_6379.pid,我们需要到 /var/run 目录下把 redis_6379.pid 删掉,这样下一次才能正常重启 Redis 服务。

上面两种方式都可以关闭 Redis 服务,随便选一种都行,但是切记不要使用 Kill 9 方式关闭 Redis 进程,这样 Redis 不会进行持久化操作,除此之外,还会造成缓冲区等资源不能优雅关闭,极端情况下会造成 AOF 和复制丢失数据的情况

redis 开机自启动

在服务器上我们可能需要将 Redis 设置为开机自启动,其实这个也非常简单,我们只需要做以下四步操作即可。

1、 编写配置脚本 vim /etc/init.d/redis
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
#chkconfig: 2345 80 90
#description:auto_run
# 端口号
REDISPORT=6379
# 启动命令
EXEC=/usr/local/redis-5.0.5/src/redis-server
# shell 交付命令
CLIEXEC=/usr/local/redis-5.0.5/src/redis-cli
# pid 存放位置
PIDFILE=/var/run/redis_${REDISPORT}.pid
# redis 配置文件
CONF="/usr/local/redis-5.0.5/redis.conf" case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
2、修改 redis.conf,设置 redis 为守护进程方式运行
################################# GENERAL #####################################

# 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.
daemonize yes
3、修改文件执行权限
chmod +x /etc/init.d/redis
4、设置开机启动
# 启动 redis
service redis start
# 停止 redis
service redis stop
# 开启服务自启动
chkconfig redis on

2、Docker 安装 Redis

Docker 安装 Redis 整体来说比较方便,我说的是非生产环境,就是自己搭着测试或者学习的环境,下面的步骤全部建立在你已经在你的电脑上安装了 Docker 的基础上,下面就来开启安装之旅。

1、拉取 redis 镜像

docker pull redis

2、快速启动

docker run -p 6379:6379 --name myredis -d redis redis-server --appendonly yes

这种方式启动使用的默认的 redis.conf 配置,我们先来看看这几个参数的意思

  • -p 6379:6379:映射端口,前面的 6379 是外部 redis 端口,后面的 6379 是容器内部的 redis 端口
  • --name myredis :容器对应的名称
  • redis redis-server:redis 代表着 redis 镜像 redis-server 表示的是执行的命令,也是就 redis 的启动命令,跟我们 linux 下面的 ./redis-server 一样
  • --appendonly yes:开启 AOF 持久化
3、使用 redis

通过上面的步骤,我们已经在 Docker 中启动了 Redis 服务,下面我们就来通过 redis-cli 访问一下,使用下面这条命令就可以启动 redis-cli

docker exec -it dockerRedis redis-cli

其中 dockerRedis 是你启动 Redis 容器名称,不出意外的话,你可以启动一个 redis-cli 客户端,如下图所示:

上面就是使用 Docker 简单的启动 Redis ,整体来说比 linux 上面安装启动要方便不少,主要是你可以在 windows 系统上运行,虽然最终它还是运行在 linux 上面的,但是这个过程我们是无感知的。你可以能会问:我想在启动的时候知道 redis.conf 可行不?答案是可行的,但是如果你对 Docker 不了解的话,可能会遇到一些坑,我就遇到了,因为我对 Docker 不是太了解,平时使用 docker 都是只需要传入参数就好了,没有传过文件。关于启动时指定配置文件,在 redis 镜像那里有说明,但是是 linux 下面的,并不是 windows 系统下的 Docker 配置方式,所以我就百度到了下面这段命令

docker run -v /d:/dockerdata/redis/config/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf

这段命令就是一个坑,压根就没有,启动这条命令,你将得到如下反馈:

显然这条命令是没有用的,当然这只是我个人认为,也许是我操作失误,也许是我知识面不够,如果朋友们发现错误还请多多指教,这里我就先当它是错误的,正确的做法是在 Docker 的宿主机上存放 redis.conf 文件,显然 Docker 的宿主机并不是 windows 系统,而是启动在 windows 系统上的虚拟机,所以我们需要进入到虚拟机里面,Docker Quickstart Terminal 启动默认界面并没有正真的登录到虚拟机,所以我们需要更改登录方式,使用 docker-machine ssh 命令,如下图所示:

这样我们就进入到了真正的虚拟机里面,我们就在一台虚拟机上操作了,跟我们在 linux 上的安装一样,我们先建立两个目录用来存放 Redis 配置:

/usr/local/redis:存放redis.conf

/usr/local/redis/data :存放持久化文件

建立好两个目录后, 我们把 redis.conf 放在 /usr/local/redis 目录下,使用下面这条 Docker 命令启动 Redis 镜像:

docker run -p 6379:6379 -v /usr/local/redis/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/redis/data:/data --name dockerRedis -d redis redis-server /usr/local/etc/redis/redis.conf

这条 docker 启动命令跟上面的有一点区别,有两个参数我在这里说明一下:

  • -v /usr/local/redis/redis.conf:/usr/local/etc/redis/redis.conf:这参数是将 /usr/local/redis/redis.conf 复制到 /usr/local/etc/redis/redis.conf 下
  • -v /usr/local/redis/data:/data:容器内持久化文件的存放位置也会映射到宿主机,换句话说在 /usr/local/redis/data 也会存放持久化文件

到此,Docker 安装 Redis 的复杂操作也做完了,如果没什么特别要求的话,使用简单的 docker 启动就好了,简单方便,完全够用了。

最后

目前互联网上很多大佬都有 Redis 系列教程,如有雷同,请多多包涵了。原创不易,码字不易,还希望大家多多支持。若文中有所错误之处,还望提出,谢谢。

欢迎扫码关注微信公众号:「平头哥的技术博文」,和平头哥一起学习,一起进步。

详细讲解 Redis 的两种安装部署方式的更多相关文章

  1. Idea集成SpringBoot实现两种热部署方式(亲测有效)

    即将介绍的两种热部署方式: 1.SpringLoaded 2.DevTools 区别: SpringLoader:SpringLoader 在部署项目时使用的是热部署的方式. DevTools:Dev ...

  2. redis的两种安装方法

    原:https://www.cnblogs.com/caokai520/p/4409712.html C# Redis   概念 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦 ...

  3. SpringBoot入门-2(两种热部署方式)

    在编写代码的时候,你会发现我们只是简单把打印信息改变了,就需要重新部署,如果是这样的编码方式,那么我们估计一天下来就真的是打几个Hello World就下班了.那么如何解决热部署的问题呢?那就是spr ...

  4. Redis的两种数据持久化方式比较

    RDB(Redis Database) 本质:基于时间点的快照 优点: 1.RDB格式文件体积小. 2.可以通过脚本执行bgsave(非阻塞)或者save(阻塞)命令自定义时间点进行备份. 3.可以保 ...

  5. Tomcat下载安装并部署到IDEA(附带idea两种热部署设置方法)

    目录 Tomcat下载教程 Tomcat安装教程 Tomcat热部署到IDEA idea两种热部署设置方法 使用Idea的时候,修改了代码,需要反复的重启Tomcat,查看效果,是不是贼烦?还记得刚上 ...

  6. 详细介绍Redis的几种数据结构以及使用注意事项(转)

    原文:详细介绍Redis的几种数据结构以及使用注意事项 1. Overview 1.1 资料 <The Little Redis Book>,最好的入门小册子,可以先于一切文档之前看,免费 ...

  7. Jenkins持续集成企业实战系列之两种网站部署的流程-----01

    注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.    最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...

  8. ZendFramework 两种安装方式

    1. 在线安装(基于composer) Zend 应用程序骨架 GitHub 地址: https://github.com/zendframework/ZendSkeletonApplication ...

  9. Redis的两种持久化方式-快照持久化和AOF持久化

    Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边,数据保存到硬盘的过程就称为"持久化"效 ...

随机推荐

  1. procdump64+mimikatz获取win用户hash密码

    1.导出lsass.exe procdump64.exe -accepteula -ma lsass.exe lsass.dmp 2.执行mimikatz mimikatz.exe "sek ...

  2. [BZOJ1076] 奖励关

    Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...

  3. linux使用jq工具解析json

    jq类似一个awk或grep一样的神器,可以方便地在命令行操作json 这里我使用海南万宁的天气接口做演示,地址:http://t.weather.sojson.com/api/weather/cit ...

  4. url中常见符号说明

    如:http://10.1.1.71:9999/auditcenter/api/v1/auditPlanList?pageSize=20&page=1 ?:分隔实际的url和参数 & ...

  5. Java中String类的特殊性

    java中特殊的String类型 Java中String是一个特殊的包装类数据有两种创建形式: String s = "abc"; String s = new String(&q ...

  6. HTTP使用get,post方式连接

    在项目中使用了http的get和post方式连接,发送传输数据: public static String doGet(String httpUrl) { HttpURLConnection conn ...

  7. SQL查询选修了所有课程的学生姓名

    select sname from student where not exists (select * from course where not exists   (select * from s ...

  8. 如何把当前时间戳转化为时间格式HH:MM:SS

    获取当前时间戳 var timestamp = new Date().getTime() 获取当前时间(从1970.1.1开始的毫秒数) // 创建一个函数function timestampToTi ...

  9. .NET进阶篇05-Linq、Lambda表达式

    知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂 内容目录 一.Lambda表达式1.匿名方法2.Lambda表达式二.Linq概述三.查询操作符1.linq初见2.常用查询操作符筛选排序分组连 ...

  10. 用c语言实现前序创建二叉树(递归),分别用前序,中序,后序遍历,以及分别输出节点个数和叶子节点个数

    本人c语言小白一枚,近期在学习数据结构(c语言版),特写此随笔,做一些总结和分享,如有不当之处,请各位技术大牛斧正 首先我们用一个结构体来抽象树的结点,代码如下(这里我们存放的数据为char型,大家可 ...