01Redis入门指南笔记(简介、安装、配置)
一:简介
Redis是一个开源的高性能key-value数据库。Redis是Remote DIctionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。Redis字典中的value支持的数据类型有:字符串,散列,列表,集合,有序集合。
Redis数据库中的所有数据都存储在内存中,内存的读写速度远快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势。但是将数据存储在内存中也有问题,程序退出后内存中的数据会丢失。不过Redis提供了持久化的功能,可以将内存中的数据异步写入到硬盘中,同时不影响继续提供服务。
Redis虽然是作为数据库开发的,但由于其提供了丰富的功能,越来越多的人将其用作缓存、队列。
Redis可以为每个键设置生存时间,生存时间到期后键会自动被删除,这一功能配合出色的性能让Redis可以作为缓存系统来使用,而且由于Redis支持持久化和丰富的数据类型,使其成为了另一个非常流行的缓存系统Memcached的有力竞争者。Redis是单线程模型,而Memcached支持多线程,所以在多核服务器上后者的性能更高一些。然而, Redis在绝大部分场合下其性能都不会成为瓶颈。
作为缓存系统,Redis还可以限定数据占用的最大内存空问,在数据达到空间限制后可以按照一定的规则自动淘汰不需要的键。
除此之外,Redis的列表类型键可以用来实现队列,并支持阻塞式读取,可以很容易地实现一个高性能的优先级队列。同时在更高层面上,Redis还支持“发布/订阅”的消息模式。
Redis提供了一百多个命令,但是常用的却只有十几个,并且每个命令都很容易记忆,Redis的命令比SQL语句要简单很多。
Redis提供了几十种不同编程语言的客户端库,这些库都很好地封装了Redis的命令,使得在程序中与Redis进行交互变得更容易。
Redis使用C语言开发,代码量只有3万多行。这降低了用户通过修改Redis源代码来使之更适合自己项目需要的门槛。
二:准备
1:安装
Redis约定次版本号(即第一个小数点后的数字)为偶数的版木是稳定版(如2.4版、2.6版),奇数版本是非稳定版(如2.5版、2.7版),推荐使用稳定版本进行开发和在生产环境使用。
Redis兼容大部分POSIX系统,包括Linux,BSD等,在这些系统中,推荐直接下载源代码编译安装以获得最新的稳定版本。下载源码包后解压即可使用make命令完成编译,完整的命令如下:
wget http://download.redis.io/releases/redis-3.0.5.tar.gz
tar xzf redis-3.0..tar.gz
cd redis-3.0.
make
make install
Redis没有其他外部依赖,安装过程很简单。make后在源代码目录的src子目录中可以找到若干可执行程序,执行make install命令后会将这可执行程序复制到/usr/local/bin/目录下,以便以后执行程序时可以不用输入完整的路径。
在实际运行Redis前推荐使用make test命令测试Redis是否编译正确。
下表列出了Redis的可执行文件的名称以及对应的说明,如果在编译后执行了make install命令,这些程序会被复制到/usr/local/bin/目录内,所以在命令行中直接输入程序名称即可执行:
最常使用的两个程序是redis-server和redis-cli,其中redis-server是Redis的服务器,启动Redls即运行redis-server;redis-cli是Redis自带的Redis命令行客户端。
2:启动
启动Redis有直接启动和通过初始化脚本启动两种方式,分别适用于开发环境和生产环境。直接运行redis-server即可启动Redis:
# redis-server
:C Nov ::20.735 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
...
:M Nov ::20.754 * DB loaded from disk: 0.004 seconds
:M Nov ::20.755 * The server is now ready to accept connections on port
Redis服务器默认会使用6379端口(6379在手机按键上是MERZ对应的号码,而MERZ取自意大利女明星AlessiaMerz的名字。MERZ长期以来被Redis作者antirez及其朋友当作愚蠢的代名词。后来Redis作者在开发Redis时就选用了这个端口。具体见http://oldblog.antirez.com/post/redis-as-LRU-cache.html)。通过--port参数可以自定义端口号:
# redis-server --port
在Linux系统中可以通过初始化脚本启动Redis,使Redis能随系统自动运行,在生产环境中推荐使用此方法运行Redis。在Redis源代码目录的utils文件夹中有一个名为redis_init_script的初始化脚本文件,内容如下:
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem. 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):配置初始化脚本。首先将初始化脚本复制到/etc/init.d目录中,文件名为redis_port,其中port表示Redis监听的端口号,客户端通过该端口连接Redis。然后修改脚本第6行的REDISPORT变量的值为同样的端口号。
2):建立需要的文件夹。建立下表列出的目录:
3):修改配置文件。首先将配置文件模板复制到/etc/redis目录中,以端口号命名(如6379.conf),然后按照下表对其中的部分参数进行编辑:
然后就可以使用/etc/init.d/redis_port start命令来启动Redis了。
3:终止
考虑到Redis有可能正在将内存中的数据同步到硬盘中,强行终止Redis进程可能会导致数据丢失。正确停止Redis的方式是向Redis发送shutdown命令:
# redis-cli shutdown
当Redis收到shutdown命令后,会先断开所有客户端连接,然后根据配置执行持久化,完成后退出。
Redis可以妥善处理SIGTERM信号,所以使用“kill redis pid”也可以正常结束Redis,效果与发送shutdown命令一样。
4:发送命令
redis-cli是Redis自带的命令行客户端,通过redis-cli向Redis发送命令有两种方式:
一是将命令作为redis-cli的参数执行,比如上面用过的redis-cli shutdown。redis-cli执行时会自动按照默认配置(服务器地址为127.0.0.1,端口号为6379)连接Redis。可以通过-h和-p参数自定义地址和端口号:
# redis-cli -h 127.0.0.1 -p
Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会收到回复PONG。如:
# redis-cli PING
PONG
第二种方式是不附带参数运行redis-cli,这样会进入交互模式。可以自由输入命令,例如:
# redis-cli
127.0.0.1:> ping
PONG
5:配置
除了可以配置端口号之外,Redis还支持其他配置选项,如是否开启持久化、日志级别等。Redis支持通过配置文件来设置这些选项。启用配置文件的方法是在启动时将配置文件的路径作为启动参数传递给redis-server,如:
# redis-server /path/to/redis.conf
通过启动参数传递同名的配置选项会覆盖配置文件中相应的参数,就像这样:
# redis-server /path/to/redis.conf --loglevel warning
Redis提供了一个配置文件的模板redis.conf。它位于源代码目录的根目录中。
除此之外,还可以在Redis运行时通过”CONFIG SET”命令,在不重启Redis的情况下动态修改部分Redis配置。就像这样:
127.0.0.1:> config set loglevel warning
OK
并不是所有的配置都可以使用”CONFIG SET”命令修改。在运行的时候也可以使用”CONFIG GET”命令获得Redis当前的配置情况:
127.0.0.1:> config get loglevel
) "loglevel"
) "warning"
6:多数据库
Redis是一个字典结构的存储服务器,一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。
每个数据库对外都是以一个从0开始的递增数字命名,Redis默认支持16个数据库,可以通过配置参数databases来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据库,如要选择1号数据库:
127.0.0.1:> select
OK
然而这些以数字命名的数据库又与我们理解的数据库有所区别。首先Redis不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据。另外Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问。最重要的是多个数据库之间并不是完全隔离的,比如”FLUSHALL”命令可以清空一个Redis实例中所有数据库中的数据。
因此,这些数据库更像是一种命名空间,而不适宜存储不同应用的数据。不同的应用应该使用不同的Redis实例存储数据。由于Redis非常轻量级,一个空Redis实例占用的内存只有1 MB左右,所以不用担心多个Redis实例会额外占用很多内存。
01Redis入门指南笔记(简介、安装、配置)的更多相关文章
- 01 Node.js简介, 安装&配置
Node.js 简介 Node.js 是什么 Node.js 有着强大而灵活的包管理器(node package manager,npm) 目前, 已经有强大第三方工具模块, 例如数据库连接, 网站开 ...
- MongoDB入门(1)--安装配置
第一步:下载安装 首先当然是找到官方网站http://www.mongodb.org/ 进入下载页面 可以看到,当前最新版本是2.4.5,我的电脑是64位的win7,所以要下载第一个(说明一下,第二个 ...
- Hbase简介安装配置
HBase —— Hadoop Database的简称 ,hbase 是分布式,稀疏的,持久化的,多维有序映射,它基于行键rowkey,列键column key,时间戳timestamp建立索引.它是 ...
- Node.js 学习笔记 (一) 安装配置
Node.js 安装配置 本安装教程以Node.js v4.4.3 LTS(长期支持版本)版本为例 Window 上安装Node.js 你可以采用以下两种方式来安装. 1.Windows 安装包(.m ...
- Java Gradle入门指南之简介、安装与任务管理
这是一篇Java Gradle入门级的随笔,主要介绍Gradle的安装与基本语法,这些内容是理解和创建build.gradle的基础,关于Gradle各种插件的使用将会在其他随笔中介绍. ...
- 04Redis入门指南笔记(内部编码规则简介)
Redis是一个基于内存的数据库,所有的数据都存储在内存中.所以如何优化存储,减少内存空间占用是一个非常重要的话题.精简键名和键值是最直观的减少内存占用的方式,如将键名very.important.p ...
- ansible简介安装配置
ansible简介 ansible是一款,自动化运维管理工具.顾名思义是用于批量去管理及安装服务及批量管理主机. ansible与saltstack对比 ansible优点:配置简单,部署容易除主管理 ...
- Redis学习笔记——简介及配置
1.Redis简介 Redis概述 Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的应用程序的完美解决方案.Redis从它的许多竞争继承来的三个主要特点:Redis数据库 ...
- Jenkins 入门系列--Jenkins 的安装配置
写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之--03PDF文档下载 第二章 Jenkins安装与配置 2 Jenkins安装 在最简单的情况下,J ...
随机推荐
- 最难的工作 /// SPFA模板 oj1396
题目大意: Input 第一行是一个整数T ( T ≤ 100 ),表示测试用例的个数. 每个测试用例的第一行是两个整数 n 和 m ( 1 ≤ n ≤ 200 , 0 ≤ m ≤ 10000 ),分 ...
- 主页面与iframe页面之间的javascript函数的调用
1:在主页面里调用iframe页里面的javascript函数 <script type="text/javascript"> var childWindow = $( ...
- python基础语法(运算符及优先级)
python基础语法(运算符及优先级) python语言支持的运算符类型 算数运算符 假设变量a为10,变量b为21 算数符 描述 实例 + 加-两个对象相加 a+b结果31 - 减-得到一个负数或者 ...
- 使用vue-cli搭建vue项目简单教程
一直没有时间来写些东西,今天就写写vue脚手架吧,初建一个vue项目. vue是近段时间来特别火的一个mvvm框架,小巧.简单.易学,如果你的前端基础还好的话,学起来挺简单的.官网地址: https: ...
- MyBatis与Hibernate
Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句.mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和s ...
- centos7 搭建 php7 + nginx (1)
前言 曾今,写过几篇类似的文章,但是发现几个月后,自己回头再看的时候,有种支离破碎的感觉.自己写的并不全,所以今天打算写一篇比较详细的文档.争取下次环境的减的时候,只需要拷贝复制粘贴即可完成环境搭建. ...
- C#可扩展编程之MEF(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往 ...
- js中的继承和重载
js中有三种继承方式:一.通过原型(prototype)实现继承 二.借用构造函数式继承,可分为通过call()方法实现继承和通过apply()方法实现继承 仅仅通过原型继承我们可以发现在实例化子 ...
- js for in 和 for of 的区别
引自:http://es6.ruanyifeng.com/#docs/iterator for...of循环可以代替数组实例的forEach方法. const arr = ['red', 'green ...
- cdh_hadoop下载地址
http://archive.cloudera.com/cdh5/cdh/5/