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 ...
随机推荐
- more 和less 命令简单介绍以及使用
一.more命令 more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 ...
- JS流程控制语句 多重判断满足你各种需求 要在多组语句中选择一组来执行,使用if..else嵌套语句。
多重判断(if..else嵌套语句) 要在多组语句中选择一组来执行,使用if..else嵌套语句. 语法: if(条件1) { 条件1成立时执行的代码} else if(条件2) { 条件2成立时执行 ...
- GNU GRUB引导的默认启动项是ubuntu
安装了ubuntu16.04后,GNU GRUB引导的默认启动项是ubuntu,如果希望默认启动项是windows,修改方法如下: step1. 进入Ubuntu系统,打开终端,输入 sudo ged ...
- 一.ES6的开发环境搭建
前言: 现在的Chrome浏览器已经支持ES6了,但是有些低版本的浏览器还是不支持ES6的语法,这就需要我们把ES6的语法自动的转变成ES5的语法.Webpack是有自动编译转换能力的,除了Webpa ...
- TSP+期望——lightoj1287记忆化搜索,好题!
感觉是很经典的题 记忆化时因为不好直接通过E判断某个状态是否已经求过,所以再加一个vis打标记即可 /*E[S][u]表示从u出发当前状态是S的期望*/ #include<bits/stdc++ ...
- 使用pageHelper分页查询,报sql语句错误
1.异常详情: 2.异常分析: (1)pageHelper分页大致流程: 配置默认的拦截器:pagehelper.PageInterceptor,对发送的查询语句进行拦截,拦截之后对原有的查询语句进 ...
- Android基础控件ImageView的使用
1.相关属性 <!--src 设置内容--> <!--background 设置背景--> <!--alpha 设置透明度 --> <!--adjustVie ...
- HTML 项目符号
无序符号 <ul> <li> </li> <li> </li> <li> </li> </ul> 属性 ...
- idea配置tomcat中war和war exploded的区别
是选择war还是war exploded 这里首先看一下他们两个的区别: war模式:将WEB工程以包的形式上传到服务器 :war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器 ...
- <每日一题>题目13:列表的简单问题
''' 分析: python赋值是通过指针来进行的. 很显然第一.三.四次调用都指向同一个列表,并未完成清空, 第二次调用只是指向了另一个列表,也未完成清空,很显然结果是累计的 结果: [0, 1] ...