Redis入门指南之二(安装及配置)
本节主要内容
1. 前言
2. redis安装
3. 启动和停止Redis
1. 前言
安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么redis版本就不能低于3.2版本,由于这个特性是3.2版本才有的。另外需要注意的是,Redis约定次版本号(即第一个小数点后的数字)为偶数的版本是稳定版(如2.8版、3.0版),奇数版本是非稳定版(如2.7版、2.9版),生产环境下一般需要使用稳定版本。
2. redis安装
[root@centos home]# cd /home
[root@centos home]# mkdir redis
[root@centos home]# cd redis
[root@centos redis]# wget http://download.redis.io/releases/redis-4.0.2.tar.gz
[root@centos redis]# cd redis-4.0.
[root@centos redis-4.0.]# make
[root@centos redis-4.0.]# make insatll
也可以指定安装目录:make install PREFIX=安装目录,默认安装到 /usr/local/bin 下(若是通过make install PREFIX=安装目录, 完成安装的,会在安装目录下生成一个bin目录,bin目录下也包含如下可执行文件)
其中:
redis-benchmark :用于测试redis的性能。
redis-check-aof : 当aof备份文件被损坏,可通过该工具对aof文件进行修复,使用方式:redis-check-aof –fix 要修复的aof文件。
redis-check-rdb : 修复损坏的rdb备份文件。
redis-cli : redis客户端,用于连接服务端。
redis-server : redis服务器端,用于启动redis服务器。
redis-sentinel : 哨兵模式(实际使用较多) 在master-slave模式下(slave默认不支持写),当master出现异常时,自动在slave中选择一台作为master。
连接上redis服务器后,可通过指令“info”查看redis服务器信息,也可查看服务器知道内容信息,例如:info replication 查看主从相关信息
3. 启动和停止Redis
(1)启动redis
启动Redis有直接启动和通过初始化脚本启动两种方式,分别适用于开发环境和生产环境
A:直接启动
直接启动redis-server即可启动Redis,十分简单。
[root@centos redis-4.0.]# redis-server
Redis服务器默认会使用6379端口,可以通过--port参数可以自定义端口号(本文使用默认的端口号):
[root@centos redis-4.0.]# redis-server --port
B:通过初始化脚本启动Redis
在Linux系统中可以通过初始化脚本启动Redis,使得Redis能随系统自动运行,在生产环境中推荐使用此方法运行Reids,这里以Centos6.0为例。
在Redis源代码目录的utils文件夹中有一个名为redis_init_script
的初始化脚本文件。我们需要配置Redis的运行方式和持久化文件、日志文件的存储位置。步骤如下:
1)配置初始化脚本
首先将初始化脚本复制到/etc/init.d 目录中,文件名为 redis_端口号,其中端口号表示要让Redis监听的端口号,客户端通过该端口连接Redis。然后修改脚本第6行的REDISPORT变量的值为同样的端口号。
2)建立需要的文件夹
需要建立的目录及说明
3)修改配置文件
首先将配置文件模板(redis-4.0.2/redis.conf)复制到/etc/redis 目录中,以端口号命名(如“6379.conf”),然后按照下表对其中的部分参数进行编辑。
需要修改的配置文件及说明
现在也可以使用下面的命令来启动和关闭Redis了:
[root@centos redis-4.0.]# /etc/init.d/redis_6379 start
[root@centos redis-4.0.]# /etc/init.d/redis_6379 stop
让Redis随系统自动启动,这还需要对Redis初始化脚本(/etc/init.d/redis_6379)进行简单修改,执行命令:
# chkconfig:
# description: Redis is a persistent key-value database
设置开机执行redis脚本:
chkconfig redis_6379 on
重启机器之后检查redis进程发现以启动:
经过上面的部署操作后,系统重启,Redis也会随着系统自动启动,并且上面的步骤里也配置了Redis持久化,下次启动系统或Redis时,有缓存数据不丢失的好处。
后面可以方便使用下面命令启停Redis:
[root@centos redis-4.0.]# /etc/init.d/redis_6379 start
[root@centos redis-4.0.]# /etc/init.d/redis_6379 stop
分析启动脚本/etc/init.d/redis_6379:
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
#chkconfig:
#description: Redis is a persistent key-value database REDISPORT=
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.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
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
redis启动脚本
启动顺序:
首先判断是启动还是停止,以启动为例,1. 检查是否存在redis的进程文件/var/run/redis_6379.pid,如果存在则打印一条日志信息。2.如果redis没有启动首先打印一条启动信息,然后执行/usr/local/bin/redis-server /etc/redis/${REDISPORT}.conf 命令启动redis。
让redis以后台进程的形式运行,编辑conf配置文件,修改如下内容;
daemonize yes
(2)停止redis
考虑到 Redis 有可能正在将内存中的数据同步到硬盘中,强行终止 Redis 进程可能会导致数据丢失。正确停止Redis的方式应该是向Redis发送SHUTDOWN命令,方法为:
[root@centos ~]# redis-cli SHUTDOWN
当Redis收到SHUTDOWN命令后,会先断开所有客户端连接,然后根据配置执行持久化,最后完成退出。
Redis可以妥善处理 SIGTERM信号,所以使用 kill Redis
进程的 PID也可以正常结束Redis,效果与发送SHUTDOWN命令一样。
3. Redis命令行客户端
上面使用的redis-cli(Redis Command Line Interface)是Redis自带的基于命令行的Redis客户端,后面操作Redis会使用该命令行工具。
下面会介绍如何通过redis-cli向Redis发送命令,并且对Redis命令的返回值的不同类型进行简单介绍。
(1)发送命令
通过redis-cli向Redis发送命令有两种方式,第一种方式是将命令作为redis-cli的参数执行,比如上面使用过的redis-cli SHUTDOWN。redis-cli 执行时会自动按照默认配置(服务器地址为127.0.0.1,端口号为6379)连接Redis,通过-h和-p参数可以自定义地址和端口号:
[root@centos ~]# redis-cli -h 127.0.0.1 -p
Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会收到PONG,如:
[root@centos ~]# redis-cli PING
PONG
第二种方式是不附带参数运行redis-cli,这样会进入交互模式,可以自由输入命令,如:
[root@centos ~]# redis-cli
127.0.0.1:> PING
PONG
127.0.0.1:> ECHO hi
"hi"
(2)命令返回值
在大多数情况下,执行一条命令后我们会关心命令的返回值。命令的返回值有5种类型,对于每种类型redis-cli的展现结果都不同,下面说明:
1)状态回复
状态回复(status reply)是最简单的一种回复,比如向Redis发送SET命令设置某个键的值时,Redis会回复状态OK表示成功。前面执行PING命令回复PONG也是状态回复。状态回复直接显示状态信息,如:
127.0.0.1:> set name zhangsan
OK
127.0.0.1:> PING
PONG
127.0.0.1:>
2)错误回复
当出现命令不存在或命令格式有错误等情况时Redis会返回错误回复(error reply)。错误回复以(error)开头,并在后面跟上错误信息。如:
127.0.0.1:> ERRORCOMMAND
(error) ERR unknown command 'ERRORCOMMAND'
在2.8版本以后,部分错误信息会以具体的错误类型开头,这样在调试的时候能更容易直到遇到的是哪种类型的错误。如:
127.0.0.1:> LPUSH key
(integer)
127.0.0.1:> GET key
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:>
上面错误信息开头“WRONGTYPE”就表示类型错误。
3)整数回复
Redis虽然没有整数类型,但是却提供了一些用于整数操作的命令,如递增键值的INCR命令会以整数的形式返回递增后的键值。整数回复(integer reply)以(integer)开头,并在后面跟上整数数据:
127.0.0.1:> INCR foo
(integer)
4)字符串回复
字符串回复(bulk reply)是最常见的一种回复类型,当请求一个字符串类型的键的键值或一个其他类型键中的某个元素时会得到一个字符串回复。字符串回复以双引号包裹:
127.0.0.1:> GET foo
""
特殊情况是当请求的键值不存在时会得到一个空结果,显示(nil)。如:
127.0.0.1:> GET noexists
(nil)
5)字符串回复
多行字符串回复(multi-bulk reply)同样很常见,如请求一个非字符串类型键的元素列表时就会收到多行字符串回复。多行字符串回复中的每行字符串都以一个序号开通=头,如:
127.0.0.1:> KEYS *
) "fo"
) "num"
) "key"
) "foo"
) "bar"
) "name"
KEYS命令的作用是获取数据库中符合指定规则的键名。
4. 配置
前面通过redis-server的启动参数port设置了Redis的端口号,除此之外Redis还支持其他配置选项,如是否开启持久化、日志级别等。由于可以配置的选项较多,通过启动参数设置不方便,所以Redis支持通过配置文件来设置这些选项。启动配置文件的方法是在启动时将配置文件的路径作为启动参数传递给redis-server,如:
[root@centos ~]# redis-server /path/to/redis.conf
通过启动参数传递同名的配置选项会覆盖文件 中相应的参数,如:
redis-server /path/to/redis.conf --loglevel warning
Redis提供了一个配置模板redis.conf,位于源代码目录的根目录下。
除此之外还可以在Redis运行时通过CONFIG SET命令在不重启Redis的情况下动态修改部分Redis配置。如:
[root@centos redis-4.0.]# redis-cli
127.0.0.1:> CONFIG GET loglevel
) "loglevel"
) "notice"
127.0.0.1:> CONFIG SET loglevel warning
OK
并不是所有的配置都可以使用CONFIG SET命令修改,可以查阅《Redis入门指南》附录B或者相关资料查询哪些参数能够使用该命令修改。同时可以使用CONFIG GET命令获得Redis当前的配置情况。如:
127.0.0.1:> CONFIG GET loglevel
) "loglevel"
) "warning"
127.0.0.1:>
第一行字符串回复表示的是选项名,第二行即是选项值。
5. 多数据库
Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中,这与关系型数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典理解成一个独立的数据库。
每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库,可以通过配置参数database来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,可以通过SELECT 命令更换数据库,如要选择1号数据库:
127.0.0.1:> SELECT
OK
127.0.0.1:[]>
配置文件redis.conf中databases设置:
# Set the number of databases. The default database is DB , you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between and 'databases'-
databases
然而这些以数字命名的数据库又与我们理解的数据库有所区别。首先Redis不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据。另外Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问,最重要的一点是每个数据库之间并不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据。
综上所述,这些数据库更像是一种命名空间,而不适宜存储不同应用程序的数据。比如可以用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据,但不宜使用0号数据库存储A应用的数据而使用1号数据库存储B应用的数据,不同的应用应该使用不同的Redis实例存储数据。由于Redis非常轻量级,一个空Redis实例占用的内存有1M左右,所以不用担心多个Redis实例会额外占用很多的内存。
参考文献:
- https://blog.csdn.net/lyw19930812/article/details/80607691
- https://www.cnblogs.com/renzhicai/p/7773080.html
- Redis入门指南(第二版)
Redis入门指南之二(安装及配置)的更多相关文章
- redis入门指南(二)—— 数据操作相关命令
写在前面 以下绝大部分内容取材于<redis入门指南>,部分结合个人知识,实践后得出. 只记录重要,明确,属于新知的相关内容,杜绝冗余和重复. 字符串 1.字符串类型是redis中最常见的 ...
- 分布式消息系统Jafka入门指南之二
分布式消息系统Jafka入门指南之二 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 三.Jafka的文件夹结构 1.安装tree命令 $ sudo yu ...
- Redis 小白指南(二)- 基础命令和五大类型:字符串、散列、列表、集合和有序集合
Redis 小白指南(二)- 基础命令和五大类型:字符串.散列.列表.集合和有序集合 引言 目录 基础命令 字符串类型 散列类型 列表类型 集合类型 有序集合类型 基础命令 1.获得符合规则的键名列表 ...
- Redis 小白指南(二)- 聊聊五大类型:字符串、散列、列表、集合和有序集合
Redis 小白指南(二)- 聊聊五大类型:字符串.散列.列表.集合和有序集合 引言 开篇<Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍>已经介绍了 Redis 的 ...
- Redis入门指南之三(入门)
本节主要介绍Redis的5种数据类型,同时使用Python API来操作Redis,其中python版本为3.5, redis版本为4.0.2. redis-py 的API的使用可以分类为: (1)连 ...
- redis入门指南(五)—— 复制与哨兵
写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 一.复制 1.在复制中,数据库分为两类,一类主数据库,一类从数据库,主库用来读写,从库用来读,主 ...
- Redis入门指南之一(简介)
1. 简介 Redis是一个开源的.高性能的.基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同的场景下的缓存与存储需求.同时Redis的诸多高级功能使其可以胜任消息队列.任务队列等不同的 ...
- Django中redis的使用方法(包括安装、配置、启动)
一.安装redis: 1.下载: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压 tar -zxvf redis-3.2. ...
- redis入门指南(四)—— redis如何节省空间
写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 节省空间 1.redis对于它所支持的五种数据类型,每种都提供了两种及以上的编码方式去存储(具体 ...
随机推荐
- topcoder srm 713 div1
problem1 link 如果$a^{b}=c^{d}$,那么一定存在$t,x,y$使得$a=t^{x},c=t^{y}$.一旦$t,x,y$确定,那么可以直接计算出二元组$b,d$有多少.对于$t ...
- Restful framework【第二篇】APIView
安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面安装 方式三:pycharm命令行下安装(装在当前 ...
- init: wait for '/dev/block/bootdevice/by-name/cache' timed out and took 5007ms【学习笔记】
平台信息:内核:4.9.112系统:android one平台:qcom sdm439 作者:庄泽彬(欢迎转载,请注明作者) 一.android设备在开机的时候打印了如下的log,由于系统使用了AB分 ...
- 在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码
在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码 参考: http://www.cnblogs.com/qiantuwuliang/archive/2011/0 ...
- wqCms6.0在IIS6的Getshell
2017-02-15发布 一.漏洞利用点 漏洞文件:admin_UploadDataHandler.ashx 自定义构造上传点 二.hack it 三.POC <html> <bod ...
- p3398 仓鼠找sugar (LCA+讨论)
分情况讨论,结果是两条路径有公共点时,深度大的LCA在另一条路径上且另一条路径的两个端点至少其中一个的与深度大的LCA的LCA为那个深度大的LCA #include <cstdio> #i ...
- Component 组件props 属性设置
props定义属性并获取属性值 html <div id="app"> <!-- 注册一个全局逐渐 --> <!-- 注意如果自定义的属性带-像下面这 ...
- Redis 应用:缓存
使用Redis做预定库存缓存功能 缓存是在业务层做的,准确讲应该是在MVC模型中Model的ORM里面 PHP项目的缓存从以前的APC缓存逐渐切换到Redis中,并且根据Redis所支持的数据结构做了 ...
- HDU 4315 Climbing the Hill(阶梯博弈)
http://acm.hdu.edu.cn/showproblem.php?pid=4315 题意:由上至下有多个格子,最顶端的是山顶,有多个球,其中有一个球是king,每次可以将球向上移动任意个格子 ...
- toggle 1.9 以后就被删除了
toggle 1.9 以后就被删除了, 1.8.x 以前可用. $(function(){ $(".p_title").toggle( function(){ $(this).n ...