Redis(入门)

Redis(入门)

     官方文档:http://redis.io/documentation

 

     redis是一个开源的key-value数据库。它又经常被认为是一个数据结构服务器。因为它的value不仅包括基本的string类型还有 list,set ,sorted set和hash类型。当然这些类型的元素也都是string类型。也就是说list,set这些集合类型也只能包含
string 类型。你可以在这些类型上做很多原子性的操作。比如对一个字符value追加字符串(APPEND命令)。加加或者减减一个数字字符串(INCR命令,当 然是按整数处理的).可以对list类型进行push,或者pop元素操作(可以模拟栈和队列)。对于set类型可以进行一些集合相关操作 (intersection union difference)。memcache也有类似与++,--的命令。
不过memcache的 value只包括string类型。远没有redis的value类型丰富。和memcahe一样为了性能。redis的数据通常都是放到内存中的。当然 redis可以每间隔一定时间将内存中数据写入到磁盘以防止数据丢失。redis也支持主从复制机制(master-slave replication)。redis的其他特性包括简单的事务支持和 发布订阅(pub/sub)通道功能,而且redis配置管理非常简单。还有各种语言版本的开源客户端类库。

这是一篇关于Redis的入门文章


1.安装Redis


Part I. 直接启动

安装

Shell代码  收藏代码
  1. tar zxvf redis-2.8.9.tar.gz  
  2. cd redis-2.8.9  
  3. #直接make 编译  
  4. make  
  5. #可使用root用户执行`make install`,将可执行文件拷贝到/usr/local/bin目录下。这样就可以直接敲名字运行程序了。  
  6. make install  

启动

Shell代码  收藏代码
  1. #加上`&`号使redis以后台程序方式运行  
  2. ./redis-server &  

检测

Shell代码  收藏代码
  1. #检测后台进程是否存在  
  2. ps -ef |grep redis  
  3.   
  4. #检测6379端口是否在监听  
  5. netstat -lntp | grep 6379  
  6.   
  7. #使用`redis-cli`客户端检测连接是否正常  
  8. ./redis-cli  
  9. 127.0.0.1:6379> keys *  
  10. (empty list or set)  
  11. 127.0.0.1:6379> set key "hello world"  
  12. OK  
  13. 127.0.0.1:6379> get key  
  14. "hello world"  

停止

Shell代码  收藏代码
  1. #使用客户端  
  2. redis-cli shutdown  
  3. #因为Redis可以妥善处理SIGTERM信号,所以直接kill -9也是可以的  
  4. kill -9 PID  

 

 

Part II. 通过指定配置文件启动

配置文件

可为redis服务启动指定配置文件,配置文件redis.conf在Redis根目录下。

 

Shell代码  收藏代码
  1. #修改daemonize为yes,即默认以后台程序方式运行(还记得前面手动使用&号强制后台运行吗)。  
  2. daemonize no  
  3. #可修改默认监听端口  
  4. port 6379  
  5. #修改生成默认日志文件位置  
  6. logfile "/home/futeng/logs/redis.log"  
  7. #配置持久化文件存放位置  
  8. dir /home/futeng/data/redisData  

 

 

启动时指定配置文件

 

Shell代码  收藏代码
  1. redis-server ./redis.conf  
  2. #如果更改了端口,使用`redis-cli`客户端连接时,也需要指定端口,例如:  
  3. redis-cli -p 6380  

 

 

其他启停同直接启动方式。配置文件是非常重要的配置工具,随着使用的逐渐深入将显得尤为重要,推荐在一开始就使用配置文件。

 

Part III. 使用Redis启动脚本设置开机自启动

启动脚本

推荐在生产环境中使用启动脚本方式启动redis服务。启动脚本redis_init_script位于位于Redis的/utils/目录下。

 

Shell代码  收藏代码
  1. #大致浏览下该启动脚本,发现redis习惯性用监听的端口名作为配置文件等命名,我们后面也遵循这个约定。  
  2. #redis服务器监听的端口  
  3. REDISPORT=6379  
  4. #服务端所处位置,在make install后默认存放与`/usr/local/bin/redis-server`,如果未make install则需要修改该路径,下同。  
  5. EXEC=/usr/local/bin/redis-server  
  6. #客户端位置  
  7. CLIEXEC=/usr/local/bin/redis-cli  
  8. #Redis的PID文件位置  
  9. PIDFILE=/var/run/redis_${REDISPORT}.pid  
  10. #配置文件位置,需要修改  
  11. CONF="/etc/redis/${REDISPORT}.conf"  

 

 

配置环境

1. 根据启动脚本要求,将修改好的配置文件以端口为名复制一份到指定目录。需使用root用户。

 

Shell代码  收藏代码
  1. mkdir /etc/redis  
  2. cp redis.conf /etc/redis/6379.conf  

 2. 将启动脚本复制到/etc/init.d目录下,本例将启动脚本命名为redisd(通常都以d结尾表示是后台自启动服务)。

 

Shell代码  收藏代码
  1. cp redis_init_script /etc/init.d/redisd  

 3. 设置为开机自启动

 

此处直接配置开启自启动chkconfig redisd on将报错误:service redisd does not support chkconfig
参照此篇文章,在启动脚本开头添加如下两行注释以修改其运行级别:

 

Shell代码  收藏代码
  1. #!/bin/sh  
  2. # chkconfig:   2345 90 10  
  3. # description:  Redis is a persistent key-value database  
  4. #  

 再设置即可成功。

 

 

Shell代码  收藏代码
  1. #设置为开机自启动服务器  
  2. chkconfig redisd on  
  3. #打开服务  
  4. service redisd start  
  5. #关闭服务  
  6. service redisd stop  

 




2.redis数据结构

redis 的作者antirez曾笑称其为一个数据结构服务器(data structures server),我认为这是一个非常准确的表述,redis的所有功能就是将数据以其固有的几种结构保存,并提供给用户操作这几种结构的接口。我们可以想象我们在各种语言中的那些固有数据类型及其操作。

redis目前提供四种数据类型:string,list,setzset(sorted set)。

  • string是最简单的类型,你可以理解成与Memcached一模一个的类型,一个key对应一个value,其上支持的操作与Memcached的操作类似。但它的功能更丰富。
  • list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。
  • set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。
  • zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解了有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。

另外,作者还提供了一个非常贴心的web命令行模拟页面,供初学者试用redis,地址:

http://try.redis-db.com/

3.redis数据存储

redis的快速是业内闻名的,但是我想说,这个速度还是有一定水分的,且看下文。

redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。

save seconds updatessave配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。

appendonly yes/no appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。

appendfsync no/always/everysec appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。

4.redis主从配置

redis支持master-slave的主从配置,配置方法是在从机的配置文件中指定slaveof参数为主机的ip和port即可,原理上来说,是从机请求主机的方式,按照tokyotyrant的做法,是可以实现主-主,主-从等灵活形式的,而redis只能支持主从,不能支持主-主,可能是其同步原理的差异所致。(本人还没有试过将两台机器的slaveof参数互指的情况是否可实现主-主。)