Redis基础
2013-12-24 15:30
316 查看
第0章:简介
(1)redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。(来源:百度百科)(2)Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了Memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。(来源:百度百科)
(3)性能测试结果是写的速度是110000次/s,读的速度是81000次/s。
测试环境:完成了50个并发执行100000个请求。设置和获取的值是一个256字节字符串。Linux box是运行Linux 2.6,这是X3320 Xeon 2.5 ghz。文本执行使用loopback接口(127.0.0.1)。
第1章:参考网站
官网:http://redis.io/官网中文版:http://www.redis.cn/clients.html
中文文档:http://www.redis.cn/documentation.html
命令参考:http://redis.readthedocs.org/en/latest/
开源中国:http://www.oschina.net/p/redis
Jedis官网:https://github.com/xetorthio/jedis
Jedis开源中国:http://www.oschina.net/p/jedis
第2章:redis安装
(1)下载redis安装包。下载地址:http://redis.io/download ,本文以redis-2.4.16.tar.gz版本在linux系统(centOS)作为安装实践。(2)解压redis-2.4.16.tar.gz安装包,命令tar -zxvf redis-2.4.16.tar.gz,进入redis根目录,了解根目录下的README文件。
(3)现在开始安装redis和部署master节点,具体过程说明亦可参考README文件,具体操作如下(%号表示linux命令开始):
1)Building Redis (构建redis,部分结果如下图)
% make
这是简单构建模式,如果是32位服务器也可以采用如下(建议使用简单模式):
% make 32bit
2)Running Redis (运行Redis)
% cd src
% ./redis-server
3)redis已经运行,但存在一个问题:这时redis是非后台运行,如果服务器重启时,redis无法自动重启,需手动启动。为了实现redis可以随服务器重启,需将redis服务安装到后台,操作如下:
% make install
4)配置和初始化master节点,系统会询问相关配置参数,端口一般采用默认的6379,其他参数也采用默认,执行结果如下图:
% cd utils
%./install_server.sh
5)启动redis后台程序
% service redis_6379 start (关闭命令:% service redis_6379 stop)
6)master节点部署完成
(4)部署slave节点,可配置多个slave节点
1)部署slave节点前,需配置utils目录下的redis.conf.tpl文件,修改如下:
% vi redis.conf.tpl
修改下面内容:
修改下面内容: a) 在“ # bind 127.0.0.1”下面加“slaveof 192.168.8.72 6379”,如下: # bind 127.0.0.1 slaveof 192.168.8.72 6379 b) 注释掉“save 900 1”,“save 300 10”,“save 60 10000”,如下: #save 900 1 #save 300 10 #save 60 10000 c)注释掉“appendfsync everysec”,应用“appendfsync no”,如下: # appendfsync always # appendfsync everysec appendfsync no |
% make install
3) 配置slave节点,此操作系统同样发起询问,这次采用的端口不能与6379重复,这里采用端口6380作为slave服务端口,其它参数默认。
% cd utils
% ./install_server
注意:不要输错端口哦!
4)同样启动slave节点服务
% service redis_6380start (关闭命令:% service redis_6380 stop)
5) slave节点部署完毕。重复执行(2)、(3)、(4)操作,采用不同的端口号可以部署多个slave节点。
第3章:redis相关文件说明
第1节:关于README文件
(1) make命令执行完成后,会在当前目录下生成本个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-stat,如果是32为的服务器,可以采用命令:make 32bit ;(2) maketest 生成可执行文件后的测试命令,一般要下载文件才能正常执行,所需文件看提示;
(3) makeFORCE_LIBC_MALLOC=yes 一般采用redis的默认内存策略,设置此参数为yes是指在存在内存碎片问题时,执行强制内存分配。如果采用的是Mac OS X系统,采用命令:make USE_JEMALLOC=yes;
(4) makeV=1 如果需要详细输出信息,采用该命令;
(5) ./redis-server采用默认配置redis.conf运行redis,如果要指定redis.conf配置,可以采用如下命令指定redis.conf的路径:./redis-server /path/to/redis.conf;
(6) ./redis-cli 此命令是对redis的操作命令,启动redis服务的一个实例。具体操作关注redis官方文档。
(7) makeinstall 该命令是将redis服务安装到默认的/usr/local/bin目录,如果要指定安装目录,可以采用如下类似命令:make PREFIX=/some/other/directory install,该命令仅仅是安装到系统后台,但没有初始化脚本和配置文件。
(8) ./install_server该命令执行脚本和配置文件的初始化,执行该命令时,脚本会询问随服务器启动时的redis相关配置参数。执行完后,可以执行启动和关闭脚本:/etc/init.d/redis_<portnumber>。
第2节:关于redis.conf文件
1)daemonize no 默认情况下,redis不是在后台运行的。如果需要在后台运行,把该项的值更改为yes;2)pidfile /var/run/redis.pid当Redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis服务时,需要指定不同的pid文件和端口;
3)port 6379指定redis运行的端口,默认是6379;
4)bind 127.0.0.1 指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求。在生产环境中最好设置该项;
5)timeout指定redis关闭客户端连接当闲置时,默认0不关闭。
5)loglevel debug 指定日志记录级别,其中Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose。debug表示记录很多信息,用于开发和测试。verbose表示记录有用的信息,但不像debug会记录那么多。notice表示普通的verbose,常用于生产环境。warning 表示只有非常重要或者严重的信息会记录到日志;
6)logfile/var/log/redis/redis.log 配置log文件地址,默认值为stdout。若后台模式会输出到/dev/null;
7)databases 16 可用数据库数,默认值为16,默认数据库为0,数据库范围在0-(database-1)之间;
8)save 900 1保存数据到磁盘,格式为save <seconds> <changes>,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件rdb。相当于条件触发抓取快照,这个可以多个条件配合。save 900 1就表示900秒内至少有1个key被改变就保存数据到磁盘;
9)rdbcompression yes 存储至本地数据库时(持久化到rdb文件)是否压缩数据,默认为yes;
10)dbfilename dump.rdb本地持久化数据库文件名,默认值为dump.rdb;
11)dir ./ 工作目录,数据库镜像备份的文件放置的路径。这里的路径跟文件名要分开配置是因为redis在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成时,再把该临时文件替换为上面所指定的文件。而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中,AOF文件也会存放在这个目录下面。注意这里必须指定一个目录而不是文件;
12)slaveof <masterip><masterport> 主从复制,设置该数据库为其他数据库的从数据库。设置当本机为slave服务时,设置master服务的IP地址及端口。在Redis启动时,它会自动从master进行数据同步;
13)masterauth<master-password> 当master服务设置了密码保护时(用requirepass制定的密码)slave服务连接master的密码;
14)slave-serve-stale-data yes当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:如果slave-serve-stale-data设置为yes(默认设置),从库会继续相应客户端的请求。如果slave-serve-stale-data是指为no,除去INFO和SLAVOF命令之外的任何请求都会返回一个错误"SYNC with master in progress";
15)repl-ping-slave-period 10从库会按照一个时间间隔向主库发送PING,可以通过repl-ping-slave-period设置这个时间间隔,默认是10秒;
16)repl-timeout 60 设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒,一定要确保repl-timeout大于repl-ping-slave-period;
17)requirepass foobared 设置客户端连接后进行任何其他指定前需要使用的密码。
18)rename-command CONFIG"" 命令重命名,在一个共享环境下可以重命名相对危险的命令,比如把CONFIG重名为一个不容易猜测的字符:# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52。如果想删除一个命令,直接把它重命名为一个空字符""即可:rename-command CONFIG"";
19)maxclients 128设置同一时间最大客户端连接数,默认无限制。Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数。如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息;
20)maxmemory <bytes> 指定Redis最大内存限制。Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,Redis同时也会移除空的list对象。当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。注意:Redis新的vm机制,会把Key存放内存,Value会存放在swap区;
21)maxmemory-policyvolatile-lru 当内存达到最大值的时候Redis会选择删除哪些数据呢?有五种方式可供选择:volatile-lru代表利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used ),allkeys-lru代表利用LRU算法移除任何key,volatile-random代表移除设置过过期时间的随机key,allkeys_random代表移除一个随机的key,volatile-ttl代表移除即将过期的key(minor
TTL),noeviction代表不移除任何key,只是返回一个写错误。
注意:对于上面的策略,如果没有合适的key可以移除,写的时候Redis会返回一个错误;
22)appendonly no 默认情况下,redis会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁。如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失,所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式。开启append only模式之后,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中。当redis重新启动时,会从该文件恢复出之前的状态,但是这样会造成appendonly.aof文件过大,所以redis还支持了BGREWRITEAOF指令对appendonly.aof
进行重新整理,你可以同时开启asynchronousdumps 和 AOF;
23)appendfilenameappendonly.aof AOF文件名称,默认为"appendonly.aof";
24)appendfsync everysec Redis支持三种同步AOF文件的策略: no代表不进行同步,系统去操作,always代表每次有写操作都进行同步,everysec代表对写操作进行累积,每秒同步一次,默认是"everysec",按照速度和安全折中这是最好的。
25)slowlog-log-slower-than10000 记录超过特定执行时间的命令。执行时间不包括I/O计算,比如连接客户端,返回结果等,只是命令执行时间。可以通过两个参数设置slow log:一个是告诉Redis执行超过多少时间被记录的参数slowlog-log-slower-than(微妙),另一个是slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除,下面的时间以微妙微单位,因此1000000代表一分钟。注意制定一个负数将关闭慢日志,而设置为0将强制每个命令都会记录;
26)hash-max-zipmap-entries512 && hash-max-zipmap-value64 当hash中包含超过指定元素个数并且最大的元素没有超过临界时,hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值。RedisHash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现。这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value
redisObject的encoding为zipmap。当成员数量增大时会自动转成真正的HashMap,此时encoding为ht;
27)list-max-ziplist-entries512 list数据类型多少节点以下会采用去指针的紧凑存储格式;
28)list-max-ziplist-value 64数据类型节点值大小小于多少字节会采用紧凑存储格式;
29)set-max-intset-entries 512set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储;
30)zset-max-ziplist-entries128 zsort数据类型多少节点以下会采用去指针的紧凑存储格式;
31)zset-max-ziplist-value 64zsort数据类型节点值大小小于多少字节会采用紧凑存储格式。
32)activerehashing yes Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存。
第4章:redis命令
(1)连接redis命令。如果本机,可直接执行redis-cli命令进入控制台;如果是不同服务器间操作,可执行redis-cli -h 192.168.1.1 -p 6379命令。注:其它命令详细待续,可参考http://redis.readthedocs.org/en/latest/
相关文章推荐
- redis学习笔记四之基础命令—set集合
- Redis 入门(配置安装+基础命令)
- redis学习--基础3 数据类型string
- 【Redis基础】Redis3.0集群问题集锦
- Redis源码研究—基础知识
- Redis基础教程第7节 - Set
- Redis源码分析-基础功能(链表)
- redis源码剖析(基础数据结构篇)——ziplist
- redis基础知识
- redis的概念和基础类型
- Redisson操作Redis之基础篇
- 【Spark】SparkStreaming-Kafka-Redis-集成-基础参考资料
- Redis学习——环境搭建以及基础命令使用
- Redis源码研究—基础知识
- redis 基础
- redis 基础了解
- redis入门基础命令
- NoSQL学习笔记之——Redis基础
- Redis基础学习(三)—Key操作
- Redis基础