
本文小新为大家带来 超详细Redis入门教程——Redis 的安装与配置 相关知识,具体内容包括Redis 的安装,连接前的配置,Redis 客户端分类(包括:命令行客户端,图形界面客户端,Java 代码客户端),Redis 配置文件详解等进行详尽介绍~
不积跬步,无以至千里;不积小流,无以成江海。每天进步一点点,在成为强者的路上,小新与大家共同成长!
📌博主主页:小新要变强 的主页
👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~
👉Java微服务开源项目可参考:企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)
↩️本文上接:超详细Redis入门教程——Redis概述
超详细Redis入门教程——Redis 的安装与配置

本文介绍的是将Redis 安装到 Linux 系统中。
/etc/hostname/etc/sysconfig/network-scripts/ifcfg-ens33🍀(1)安装 gcc
由于 Redis 是由 C/C++语言编写的,而从官网下载的 Redis 安装包是需要编译后才可安装的,所以对其进行编译就必须要使用相关编译器。对于 C/C++语言的编译器,使用最多的是gcc 与 gcc-c++,而这两款编译器在 CentOS7 中是没有安装的,所以首先要安装这两款编译器。
GCC,GNU Compiler Collection,GNU 编译器集合。

🍀(2) 下载 Redis
Redis 的官网为:http://redis.io 。点击链接可以直接进行下载。



🍀(3) 上传到 Linux
将下载好的压缩包上传到 Linux 的/opt/tools 目录中。
🍀(1) 解压 Redis
将 Redis 解压到/opt/apps 目录中。

进入到/opt/apps 目录中再将 Redis 解压包目录更名为 redis(不更名也无所谓)。

🍀(2) 编译
编译过程是根据 Makefile 文件进行的,而 Redis 解压包中已经存在该文件了。所以可以直接进行编译了。

进入到解压目录中,然后执行编译命令 make。

当看到如下提示时,表示编译成功。

🍀(3) 安装
在 Linux 中对于编译过的安装包执行 make install 进行安装。

可以看到,共安装了三个组件:redis 服务器、客户端与一个性能测试工具 benchmark。
🍀(4) 查看 bin 目录
安装完成后,打开/usr/local/bin 目录,可以看到出现了很多的文件。

通过 echo $PATH 可以看到,/usr/local/bin 目录是存在于该系统变量中的,这样这些命令就可以在任意目录中执行了。

🍀(1) 前台启动
在任意目录执行 redis-server 命令即可启动 Redis。这种启动方式会占用当前命令行窗口。

再开启一个会话窗口,可以查看到当前的 Redis 进程,默认端口号为 6379。

通过 Ctrl + C 命令可以停止 Redis。
🍀(2) 命令式后台启动
使用 nohub 命令,最后再添加一个&符,可以使要启动的程序在后台以守护进程方式运行。这样的好处是,进程启动后不会占用一个会话窗口,且其还会在当前目录,即运行启动命令的当前目录中创建一个 nohup.out 文件用于记录 Redis 的操作日志。

🍀(3) Redis 的停止
通过 redis-cli shutdown 命令可以停止 Redis。

🍀(4) 配置式后台启动
使用 nohup 命令可以使 Redis 后台启动,但每次都要键入 nohup 与&符,比较麻烦。可以通过修改 Linux 中 Redis 的核心配置文件 redis.conf 达到后台启动的目的。redis.conf 文件在Redis 的安装目录根下。

将 daemonize 属性值由 no 改为 yes,使 Redis 进程以守护进程方式运行。

修改后再启动 Redis,就无需再键入 nohup 与&符了,但必须要指定启动所使用的 Redis 配置文件。这是为什么呢?
使用 nohup redis-server &命令启动 Redis 时,启动项中已经设置好了 Redis 各个参数的默认值,Redis 会按照这些设置的参数进行启动。但这些参数是可以在配置文件中进行修改的,修改后,需要在启动命令中指定要加载的配置文件,这样,配置文件中的参数值将覆盖原默认值。
Redis 已经给我们提供好了配置文件模板,是 Redis 安装目录的根目录下的 redis.conf 文件。由于刚刚对 redis.conf 配置文件做了修改,所以在开启 Redis 时需要显示指出要加载的配置文件。配置文件应紧跟在 redis-server 的后面。

Redis 是一个内存数据库服务器,就像 MySQL 一样,对其操作也需要通过客户端进行。若要使远程主机上的客户端能够连接并访问到服务端的 Redis,则服务端首先要做如下配置。
Redis 可以通过修改配置文件来限定可以访问自己的客户端 IP。

以上设置后,只允许当前主机访问当前的 Redis,其它主机均不可访问。所以,如果不想限定访问的客户端,只需要将该行注释掉即可。

默认保护模式是开启的。其只允许本机的客户端访问,即只允许自己访问自己。但生产中应该关闭,以确保其它客户端可以连接 Redis。

为 Redis 设置访问密码,可以对要读/写 Redis 的用户进行身份验证。没有密码的用户可以登录Redis,但无法访问。
🍀(1) 密码设置
访问密码的设置位置在 redis.conf 配置文件中。默认是被注释掉的,没有密码。

没有通过密码登录的用户,无法读/写 Redis。

🍀(2) 使用密码
对于密码的使用,有两种方式:登录时未使用密码,则访问时先输入密码;登录时直接使用密码登录,访问时无需再输入密码。
A、 登录时未使用密码

B、 登录时使用密码

C、 退出时使用密码

🍀(3) 注意
为了方便后面的介绍,我们这里就不设置访问密码了,直接将其注释掉即可。

后面要学习两个非常危险的命令:flushal 与 flushdb。它们都是用于直接删除整个 Redis 数据库的。若让用户可以随便使用它们,可能会危及数据安全。Redis 可以通过修改配置文件来禁止使用这些命令,或重命名这些命令。以下配置,禁用了 flushall 与 flushdb 命令。
当然,在学习过程中暂时不禁用它们。

当然,若要使客户端能够连接 Redis,则必须开启服务端的 Redis。

Redis 客户端也像 MySQL 客户端一样有多种类型:命令行客户端、图形界面客户端、Java 代码客户端。
Redis 提供了基本的命令行客户端。打开命令行客户端的命令为 redis-cli。

若连接的是本机 Redis,且端口号没有改变,保持默认的 6379,则-h 与-p 选项可以省略不写。
🍀(1) Redis Desktop Manager
Redis 的图形界面客户端很多,其中较出名的是 Redis Desktop Manager 的客户端。不过,该软件原来是免费软件,从 0.8.8 版本后变为了商业化收费软件。官网为:https://resp.app/
🍀(2) RedisPlus
RedisPlus 是为 Redis 可视化管理开发的一款开源免费的桌面客户端软件,支持 Windows 、Linux、Mac 三大系统平台,RedisPlus 提供更加高效、方便、快捷的使用体验,有着更加现代化的用户界面风格。
RedisPlus 的官网地址为 https://gitee.com/MaxBill/RedisPlus。
所谓 Java 代码客户端就是一套操作 Redis 的 API,其作用就像 JDBC 一样,所以 Java 代码客户端其实就是一个或多个 Jar 包,提供了对 Redis 的操作接口。
对 Redis 操作的 API 很多,例如 jdbc-redis、jredis 等,但最常用也是最有名的是 Jedis。
Redis 的核心配置文件 redis.conf 在安装根目录下,默认包含 2000 多行。这些内容根据功能被划分为了很多部分。下面将一些重要部分进行介绍。

这部分主要是给出一些说明,包含三部分意思:

指定要在当前配置文件中包含的配置文件。这样做的目的主要是便于配置信息管理:可以将不同场景的配置都进行单独定义,然后在当前核心配置文件中根据不同场景选择包含进不同的配置文件。

Redis 配置文件中可以通过加载不同的第三方模块,来增强、扩展 Redis 的功能。

Network 配置模块是比较重要的部分,主要进行网络相关的配置。其中较重要的有:
🍀(1) bind

指定可以访问当前 Redis 服务的客户端 IP,默认只允许本地访问,即当前 Redis 自己访问自己。为了使所有其它客户端都可访问,一般要将其注释掉。
🍀(2) protected-mode

默认保护模式是开启的。其只允许本机的客户端访问,即只允许自己访问自己。但生产中应该关闭,以确保其它客户端可以连接 Redis。
🍀(3) port

Redis 监听的连接端口号,默认 6379。
🍀(4) tcp-backlog

tcp-backlog 是一个 TCP 连接的队列,其主要用于解决高并发场景下客户端慢连接问题。这里设置的值就是这个队列的长度。该队列与 TCP 连接的三次握手有关。不同的 Linux 内核, backlog 队列中存放的元素(客户端连接)类型是不同的。
查看 Linux 内核版本:

TCP 中的 backlog 队列的长度在 Linux 中由内核参数 somaxconn 来决定。所以,在 Redis 中该队列的长度由 Redis 配置文件设置与 somaxconn 来共同决定:取它们中的最小值。
查看当前 Linux 内核中 somaxconn 的值。

生产环境下(特别是高并发场景下),backlog 的值最好要大一些,否则可能会影响系统性能。
修改/etc/sysctl.conf 文件,在文件最后添加如下内容:

修改过后可以重启虚拟机,也可以通过执行如下命令来使新的修改生效。

🍀(5) timeout

空闲超时。当客户端与 Redis 间的空闲时间超过该时长后,连接自动断开。单位秒。默认值为 0,表示永远不超时。
🍀(6) tcp-keepalive

该配置主要用于设置 Redis 检测与其连接的所有客户端的存活性时间间隔,单位秒。一般是在空闲超时 timeout 设置为 0 时进行配置。
🍀(1) daemonize

该配置可以控制 Redis 启动是否采用守护进程方式,即是否是后台启动。yes 是采用后台启动。
🍀(2) pidfile

该配置用于指定 Redis 运行时 pid 写入的文件,无论 Redis 是否采用守护进程方式启动, pid 都会写入到该配置的文件。
注意,如果没有配置 pid 文件,不同的启动方式,pid 文件的产生效果是不同的:
🍀(3) loglevel

配置日志的级别。Redis 中共有四个级别,由低到高依次是:
🍀(4) logfile

指定日志文件。如果设置为空串,则强制将日志记录到标准输出设备(显示器)。如果使用的是守护进程启动方式,设置为空串,则意味着会将日志发送到设备/dev/null(空设备)。
🍀(5) databases

设置数据库的数量。默认数据库是 0 号数据库。可以使用 select <dbid> 在每个连接的基础上选择一个不同的数据库,其中 dbid 是介于 0 和’databases’-1’之间的数字。

用户设置 ACL 权限、Redis 访问密码相关配置。该模块中最常用的就是 requirepass 属性。

设置客户端访问密码。注释掉后则没有密码。

该模块用于设置与客户端相关的属性,其中仅包含一个属性 maxclients。 maxclients 用于设置 Redis 可并发处理的客户端连接数量,默认值为 10000。如果达到了该最大连接数,则会拒绝再来的新连接,并返回一个异常信息:已达到最大连接数。
注意,该值不能超过 Linux 系统支持的可打开的文件描述符最大数量阈值。查看该阈值的方式如下。修改该值,可以通过修改/etc/secutiry/limits.conf 文件(自己查)。


该配置可以控制最大可用内存及相关内容移除问题。
🍀(1) maxmemory

将内存使用限制设置为指定的字节数。当达到内存限制时,Redis 将根据选择的逐出策略maxmemory-policy 尝试删除符合条件的 key。
如果不能按照逐出策略移除 key,则会给写操作命令返回 error,但对于只读的命令是没有影响的。
🍀(2) maxmamory-policy

该属性用于设置,当达到 maxmemory 时,Redis 将如何选择要移除的内容。当然,如果没有符合相应策略的内容要删除,则在执行写入命令时会给出 errors 的响应。Redis 中共支持 8 种移除策略:
🍀(3) maxmemory-samples

该属性用于指定挑选要删除的 key 的样本数量。样本的选择采用的是 LRU 算法,其不能修改。但从样本中再选择要移除的 key,则采用的是 maxmamory-policy 指定的策略。
🍀(4) maxmemory-eviction-tenacity

设置移除容忍度。数值越小表示容忍度越低,需要移除的数据移除延迟越小;数值越大表示容忍度越高,需要移除的数据移除延迟越大。

该配置模块用于配置 Redis 对多线程 IO 模型的支持。
🍀(1) io-threads

该属性用于指定要启用多线程 IO 模型时,要使用的线程数量。
查看当前系统中包含的 CPU 数量:

🍀(2) io-threads-do-reads

该属性用于启用多线程 IO 模型中的多线程处理读请求的能力。

👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm