聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> redis简介

redis简介

时间:2018-01-18 17:43:35    下载该word文档

简介:

Redis 是一款完全开源免费的,遵守BSD协议,高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

2.Redis不仅仅支持简单的key-value类型的数据,同时还提供listsetzsethash等数据结构的存储。

3.Redis支持数据的备份,即master-slave模式的数据备份。

Redis的优势:

1.性能极高: Redis能读的速度是110000/s,写的速度是81000/s

2.丰富的数据类型: Redis支持二进制案例的 Strings, Lists, Hashes, Sets Ordered Sets 数据类型操作。

3.原子: Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTIEXEC指令包起来,保障了操作的正确性。

4.丰富的特性 : Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储的不同:

1.Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

2.Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis 架构

Redis使用的是内存数据集合,根据自身的使用情况,可以定时将这些内存中的数据保存至磁盘,或者将每个每个命令都添加至日志中,以此实现数据的持久化。Redis是使用ANSI C标准编写的,可以在不依赖其他程序的情况下运行在大部分POSIX系统中,如:LinuxWindowsBSD以及Solaris

Redis是一个Client/Server模式的系统,典型的调度图如下:

word/media/image1.gif

word/media/image2.gifword/media/image3.gifword/media/image4.gifword/media/image5.gifword/media/image6.gifword/media/image7.gifword/media/image8.gifword/media/image9.gifword/media/image10.gif

Redis工作原理: 从根本来看,redis是一个单线程的服务器。这意味着通过一个单独的线程使用事件模式如epollkqueueselect来读取传入的连接。当一个特定的时间生成一个文件描述符后,这个线程处理这些文件描述符并会写响应结果。这个UML序列图显示了一个命令被客户端接收后是如何被redis在内部处理的:

Redis使用自定义的时间库,该库抽象了低层面的socket管理。核心对象是eventLoop,它包含了已经被scoket I/O释放的事件。同时,aeApiPoll(eventLoop) 检查所有的socket描述符来确定是否还有网络处于激活状态。而在aeProcessEvents方法中,所有被释放的事件都会被检查并调用适当的处理程序。对于协议中的所有命令,redis会拦截所有命令并通过一个命令表单来查找合适的操作来执行。

Redis的安装及使用

Rediswindows下安装过程

一、下载windows版本的Redis

官网以没有Windows下载地址,只能在github上下载,官网只提供linux版本的下载

官网下载地址:http://redis.io/download

github下载地址:https://github.com/MSOpenTech/redis/tags

二、安装Redis

1.这里下载的是Redis-x64-3.2.100版本,我的电脑是win7 64位,所以下载64位版本的,在运行中输入cmd,然后把目录指向解压的Redis目录。

2、启动命令

redis-server redis.windows.conf,出现下图显示表示启动成功了。

 

三、设置Redis服务

1、由于上面虽然启动了redis,但是只要一关闭cmd窗口,redis就会消失。所以要把redis设置成windows下的服务。

也就是设置到这里,首先发现是没用这个Redis服务的。

2、设置服务命令

redis-server --service-install redis.windows-service.conf --loglevel verbose

输入命令之后没有报错,表示成功了,刷新服务,会看到多了一个redis服务。

3、常用的redis服务命令。

卸载服务:redis-server --service-uninstall

开启服务:redis-server --service-start

停止服务:redis-server --service-stop

4、启动服务

5、测试Redis

安装测试成功。

Redis配置文件详解

# Redis configuration file example.

 

########################################## GENERAL ########################################

 

daemonize yes    #是否开启在后台运行redis,默认为no,不开启

 

pidfile /var/run/redis/redis.pid   #redis在后台运行时,默认pid文件的存放路径和文件名

 

port 6379    #redis运行监听端口号,默认6379

 

tcp-backlog 511    #listen队列的长度,这个跟系统本身的

 

bind 127.0.0.1    #绑定IP地址

 

unixsocket /tmp/redis.sock    #unix指定监听socket

 

unixsocketperm 755    #当指定监听为socket时,可以指定其权限为755

 

timeout 0    #设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接,0是关闭此设置

 

tcp-keepalive 0    #TCP keepalive.如果是非零值,当失去链接时,会使用SO_KEEPALIVE发送TCP ACKs到客户端。这个参数有两个作用:1.检测断点;2.从网络中间设备来看,就是保持链接。在Linux上,设定的时间就是发送ACKs的周期。注意:达到双倍的设定时间才会关闭链接。在其他内核上,周期依赖于内核设置。一个比较合理的值为60s

 

loglevel notice    #指定日志级别,debug用于开发/测试;verbosedebug那么详细;notice适用于生产线上,warning只记录非常重要的信息

 

logfile /var/log/redis/redis.log    #日志文件名,以及路径

 

database 16    #默认值为16,默认数据库为0,数据库范围在0-database-1)之间

 

###################################### SNAPSHOTTING#####################################

 

#save 900 1     #15分钟内有至少1个键被更改则进行快照

#save 300 10      #5分钟内有至少10个键被更改则进行快照

#save 60 10000    #一分钟内有至少10000个键被更改则进行快照

save ""       #表示禁用RDB持久化

 

stop-writes-on-bgsave-error yes    #表示写入磁盘时出现错误时,是否停止写入,yes,表示停止,no表示继续。

 

rdbcompression yes    #表示是否要压缩RDB

 

rdbchecksum yes    #表示是否进行数据校验

 

dbfilename dump.rdb    #默认RDB持久化备份文件名

 

dir /var/lib/redis/    #定义RDB存放路径

 

slaveof      #主从复制,当本机是slave时配置

 

masterauth     #当主机需要密码验证的时候配置

 

slave-serve-stale-data yes    #slavemaster丢失链接,或正处于同步过程中,是否响应客户端请求,设置为yes表示响应,设置为no,直接返回"SYNC with master in progress"(正在和主服务器同步中)

 

slave-read-only yes    #设置slave是否为只读

repl-diskless-sync no    #disk较慢,并且网络较快的时候,可以用diskless

repl-diskless-sync-delay 5    #设置成0的话,传输开始asap

 

repl-disable-tcp-nodelay no    #SYNC完毕后,在slavesocket里关闭TCP_NODELAY;如果是yes,reids发送少量的TCP包给slave,但可能导致最高40ms的数据延迟;如果是no,那可能在复制的时候,会消耗少量带宽;默认我们是为了低延迟优化而设置成no,如果主从之间有很多网络跳跃,那设置成yes    

 

repl-backlog-size 100mb    #值越大,salve可以丢失的时间就越长。

 

repl-backlog-ttl 3600    #多久释放backlog,当确认master不再需要slave的时候,多久释放。0是永远不释放。

 

slave-priority 100    #master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master.而配置成0,永远不会被选举。(必须≥0)。默认是100

 

requirepass foobared    #设置客户端连接密码,因为Redis响应速度可以达到每秒100w次,所以密码要特别复杂

 

rename-command CONFIG ""    #命令重新命名,或者禁用;重命名命令为空字符串可以禁用一些危险命,令比如:FLUSHALL删除所有数据,需要注意的是,写入AOF文件或传送给slave的命令别名也许会引起一些问题

 

maxclients 10000    #设置最多链接客户端数量,默认为10000;实际可以接受的请求数目为设置值减去32,32Redis为内部文件描述符保留的                        

maxmemory     #设置最大使用内存数量,在把Redis当作LRU缓存时特别有用。设置的值要比系统能使用的值要小,因为当启用删除算法时,slave输出缓存也要占用内存

达到最大内存限制时,使用何种删除算法

#volatile-lru    ->  使用LRU算法移除带有过期标致的key

#allkeys-lru     ->  使用LRU算法移除任何key

#volatile-random ->  随机移除一个带有过期标致的key

#allkeys-random  ->  随机移除一个key

#volatile-ttl    ->  移除最近要过期的key

 

#noeviction ->      不删除key,当有写请求时,返回错误

 

maxmemory-policy volatile-lru  #默认设置为volatile-lru

 

maxmemory-samples   3    #LRUminimal TTL 算法都不是精准的算法,但是相对精确的算法(为了节省内存),随意你可以选择样本大小进行检测。Redis默认的会选择3个样本进行检测

 

appendonly no   #默认情况下,redis没有开启AOF方式的持久化,开启AOF持久化需要把no变为yes

 

appendfilename "appendonly.aof"    AOF的保存名称,默认为appendonly.aof

 

# Redis supports three different modes:

redis支持三种AOF文件持久化策略:

 

# no: don't fsync, just let the OS flush the data when it wants. Faster.

#表示由操作系统决定何时写入。性能最好,但可靠性最低

 

# always: fsync after every write to the append only log. Slow, Safest.

表示每次都写入磁盘。性能最差,比上面的安全一些

 

# everysec: fsync only one time every second. Compromise.

表示每秒执行一次写入。折中方案,推荐

appendfsync everysec    #AOF持久化方案,选择everysec,每秒执行一次写

 

no-appendfsync-on-rewrite no    #设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入。

 

auto-aof-rewrite-percentage 100        #指定Redis重写aof文件的条件,默认为100,表示与上次rewriteaof文件大小相比,当前aof文件增长量超过上次aof文件大小的100%时,就会触发background rewrite。若配置为0,则会禁用自动rewrite

 

auto-aof-rewrite-min-size 64mb     指定触发rewriteaof文件大小。若aof文件小于该值,即使当前文件的增量比例达到auto-aof-rewrite-percentage的配置值,也不会触发自动rewrite。即这两个配置项同时满足时,才会触发rewrite

 

# AOF自动重写(合并命令,减少日志大小)

AOF日志大小增加到一个特定比率,Redis调用BGREWRITEAOF自动重写日志文件

原理:Redis会记录上次重写后AOF文件的文件大小。

如果刚启动,则记录启动时AOF大小

这个基本大小会用来和当前大小比较。如果当前大小比特定比率大,就会触发重写。

你也需要指定一个AOF需要被重写的最小值,这样会避免达到了比率。

但是AOF文件还很小的情况下重写AOF文件,设置为0禁用自动重写

 

aof-load-truncated yes    #AOF文件可能在尾部是不完整的(上次系统关闭有问题,尤其是mountext4文件系统时没有加上data=ordered选项,只会发生在os崩溃时,redis自己死不会不完整。)redis重启时load进内存的时候就有问题了。发生的时候,可以选择reids启动报错,或者load尽量多正常的数据。如果aof-load-truncatedyes,会自动发布一个log给客户端然后load(默认)。如果是no,用户必须手动reids-check-aof修复AOF文件才可以。

 

lua-time-limit 5000    #Lua脚本的最大执行时间,单位毫秒,超时后会报错,并且计入日志;当一个脚本运行时间超过了最大执行时间,只有SCRIPT KILL SHUTDOWN NOSAVE两个命令可以使用;SCRIPT KILL用于停止没有调用写命令的脚本。SHUTDOWN NOSAVE是唯一的一个,在脚本的写命令正在执行用户又不想等待脚本正常结束的情况下,关闭服务器的方法。以下选项设置为0或负数就会取消脚本执行时间限制

slowlog-log-slower-than 10000      #Redis慢查询日志记录超过设定时间的查询,且只记录执行命令的时间,不记录I/O操作,比如:和客户端交互,发送回复等;时间单位为微妙,1000000微妙 = 1 ;设置为负数会禁用慢查询日志,设置为0会记录所有查询命令

 

slowlog-max-len 128    #日志长度没有限制,但是会消耗内存。超过日志长度后,最旧的记录会被移除,使用SLOWLOG RESET命令可以回收内存

 

latency-monitor-threshold 0    #LATENCY打印redis实例在跑命令时的耗时图表,只记录大于等于下边设置的值的操作。0的话,就是关闭监视。可以动态开启,直接运行CONFIG SET latency-

monitor-threshold

 

notify-keyspace-events ""    #可以通知pub/sub客户端关于key空间的变化。

比如如果开着开关。一个client进行了DEL操作在“foo”key上在database0上。两个消息将会发布通过 pub/sub

# PUBLISH __keyspace@0__:foo del

# PUBLISH __keyevent@0__:del foo

大部分人不需要这个功能,并且还需要一定开销,所以默认关闭。 

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

当有少量条目的时候,哈希使用高效内存数据结构。最大的条目也不能超过设定的阈值。

 

 

#和哈希编码一样,少量列表也以特殊方式编码节省内存。少量设定如下:

list-max-ziplist-entries 512

list-max-ziplist-value 64

集合只在以下情况下使用特殊编码来节省内存

# -->集合全部由64位带符号10进制整数构成的字符串组成

下面的选项设置这个特殊集合的大小。

set-max-intset-entries 512

当有序集合的长度和元素设定为以下数字时,又特殊编码节省内存

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

 

hll-sparse-max-bytes 3000    HyperLogLog不懂。大于16000完全不可接受!当CPU很顶得住的话,给10000可以。默认给3000.

activerehashing yes    #哈希刷新使用每100CPU毫秒中的1毫秒来帮助刷新主哈希表(顶级键值映射表);Redis哈希表使用延迟刷新机制,越多操作,越多刷新.如果服务器空闲,刷新操作就不会进行,更多内存会被哈希表占用默认每秒进行10次主字典刷新,释放内存。如果你有硬性延迟需求,偶尔2毫秒的延迟无法忍受的话。设置为no,否则设置为yes

#客户端输出缓存限制强迫断开读取速度比较慢的客户端

#有三种类型的限制

#normal -> 正常的客户端包括监控客户端

#slave -> 从客户端

# pubsub -> 客户端至少订阅了一个频道或者模式

    客户端输出缓存限制语法如下(时间单位:秒)

 

# client-output-buffer-limit <类别> <强制限制> <软性限制> <软性时间>

达到强制限制缓存大小,立刻断开链接。

达到软性限制,仍然会有软性时间大小的链接时间

默认正常客户端无限制,只有请求后,异步客户端数据请求速度快于它能读取数据的速度

订阅模式和主从客户端又默认限制,因为它们都接受推送。

强制限制和软性限制都可以设置为0来禁用这个特性

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

 

hz 10

设置Redis后台任务执行频率,比如清除过期键任务。

设置范围为1500,默认为10.越大CPU消耗越大,延迟越小。

建议不要超过100

 

aof-rewrite-incremental-fsync yes

当子进程重写AOF文件,以下选项开启时,AOF文件会每产生32M数据同步一次。

这有助于更快写入文件到磁盘避免延迟

免费下载 Word文档免费下载: redis简介

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服