二.Redis学习:Redis概述

简介

Redis的全称是 REmote DIctionary Server(远程字典服务器),它是由一个名叫Salvatore Sanfilippo 的意大利人写的;redis的默认端口6379是作者根据字母[MERZ]1在手机键盘上的位置决定的。
Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis与其他key-value缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载到内存中使用。
  • Redis的value支持多种数据库类型:string、list、set、zset、hash等。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis优势

  • Redis的性能极高 - 写的速度高达每秒81000次;读的速度甚至高达每秒110000次。
  • 丰富的数据类型 - Redis支持二进制案例的 String、List、Hashes、Sets、Ordered Set 数据类型(string,list,hash,set,zset)。
  • 原子性 - Redis的所有操作都是原子性的,意思就是要么执行成功,要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性通过MULTI和EXEC指令包起来。
  • 丰富的特性 - Redis还支持publish/subscribe2,通知,key过期等特性。

与其他key-value存储的不同

  • Redis有着更为复杂的数据结构,并且对他们提供原子性操作,Redis的数据类型都是基于基本数据结构的,无需进行额外的抽象。
  • Redis运行在内存中,但是可以持久化到磁盘,对数据集进行高速读写时,需要权衡好系统的内存,数据量不能大于内存容量。相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常方便,可以做很多内部复杂度高的事情。

Redis的配置读解

configdescription
daemonize noRedis默认不是以守护进程3的方式运行的,使用守护线程可以修改配置值为 yes (windows不支持守护线程模式运行)
pidfile /var/run/redis.pid当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定。
port 6379指定Redis监听端口为6379,作者在他的一篇博文中解释了为什么选用6379作为默认的端口号。
bind 127.0.0.1绑定的主机地址(该参数并非是指定哪个服务器才能访问,而是指定本机网卡对应的ip,只有通过这个ip才能进行访问,如果要设置外部可以访问,设置为 0.0.0.0/公网ip)
timeout 300客户端连接超时断开:如果客户端连接闲置超过300秒,则关闭连接。(设置为0,则关闭该功能)
loglevel notice指定日志记录级别,Redis总共支出四个级别:debug、verbose、notice、warning,默认为notice。
logfile stdout日志记录方式,默记录输出到/dev/null。可把日志记录输出到指定位置文件。
databases 16设置数据库的数量,默认数据库为0,可以使用SELECT命令在连接上指定数据库的序号
save4 <second> <changes>
save 900 1
save 300 10
save 60 10000
这是RDB的核心规则配置。例如:save 900 1;指定900秒内,只要有一个更改,则把内存中的数据快照写入磁盘中。
rdbcompression yes指定存储到本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU压缩和解压的时间,可以把它设置为no,但这样会导致数据库文件变得巨大。(建议开启压缩)
dbfilename dump.rdb指定本地数据库文件名,一般使用默认值dump.rdb
dir ./数据目录,指定本地数据库存放目录。rdb、aof文件也会写在这个目录
masterauth <master-password>当master服务设置了密码保护时,slav副本服务连接master服务时的密码
slaveof <masterip> <masterport>
新版配置:replicaof<masterip> <masterport>
设置当本机为slav服务时,设置master服务的ip和端口,在redis启动时,它会自动从master进行数据同步。(当master设置了密码时,会启用masterauth的密码进行验证)
requirepass foobared设置Redsi连接密码,如果设置了连接密码,客户端在连接时需要使用AUTH<password>命令提供密码,默认是不开启密码的。(Redis每秒可以完成15W次密码认证,所以密码的复杂度设置的越高越好)
maxclients 10000设置能连接上redis的最大客户端连接数量,默认是10000个客户端连接。由于redis不区分连接是客户端的还是内部打开文件或者slave连接等,所以建议minclients最小设置到32,如果超过了最大链接数,redis会给新连接返回“max number of clients reached”,并关闭新连接。
maxmemory <bytes>redis配置最大内存容量,当内存满了,需要配合maxmemory-policy策略5来进行处理。
maxmemory-sampleslru检测样本数,使用lru或者ttl淘汰算法,从需要淘汰的列表中随机选择sample个key,选出限制时间最长的key移除。
appendonly noRedis默认不开启(AOF6)。Redis默认情况下是异步的把数据写到磁盘中,因为按照save的RDB保存策略,会出现存在于内存但未写入磁盘的数据,如果此时出现宕机,则数据会丢失。而appendonly yes就是为了弥补rdm的不足而出现的,则每次进行更新操作后都进行日志记录(appendonly.aof),每次启动redis都会先去读取日志,把数据加载到内存中。
appendfilename appendonly.aof指定更新日志文件名,默认为appendonly.aof
appendfsync everysecaof持久化策略的配置7。默认everysec表示每秒执行一次fsync。
no-appendfsync-on-werite no在执行重写时,是否进行AOF操作,默认no,表示执行重写时进行AOF操作。yes表示执行重写时不进行AOF操作
auto-aof-rewrite-percentage 100aof自动重写的策略百分比配置,aof文件增长率超过旧aof文件的百分比,就进行重写。默认100,表示比旧文件增长了100%的时候,就进行aof重写
auto-aof-rewrite-min-sizeaof自动重写的策略文件大小配置,当前aof文件的尺寸到达设置的尺寸,然后进行重写。
aof-load-truncated yes默认值yes,当aof文件因异常被截断,启动时会发送一个log给用户,并且加载到内存。设置为no,不会被加进内存,启动redis会失败,需要手动使用redis工具"redis-check-aof"修复aof文件。
aof-use-rdb-preamble yes加载时,识别出以"REDIS"字符串开头的aof文件。并加载出带有此前缀的RDB文件。
lua-time-limit 5000Lua脚本的最大执行毫秒数
cluster-enabled yes开启redis集群,默认是不开启的
cluster-config-file nodes-6379.conf配置redis自动生成的集群配置文件名,该配置不需要我们自己配置,redis会生成并更新这个文件。
cluster-node-timeout 15000阶段互连超时的阈值,集群节点超时毫秒数。
cluster-replica-validity-factor 10故障迁移时,全部的slave都会请求申请升级为master,但有些slave可能与master断开连接一段时间,导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判断slave节点与master断线时间是否过长(node-timeout * slave-validity0factor)+ repl-ping-slave-period。
cluster-migration-barrier 1当master宕机后,它的slave从节点升级为master后,新的master下,至少要有一个slave节点。(如果该值为1,只有1master和1slave的情况下,master宕机后,不会再把剩下的一个slave升级)
cluster-require-full-coverage yes默认yes,即多个小集群,如果有一个集群不可用,那么就不对外提供服务。设置为no时,表示集群下,就算出现某个小集群宕机,依然会对外提供服务。
cluster-replica-no-failover no默认值no,表示不阻止replicas副本做主故障升级转移。设置yes代表阻止副本进行主故障迁移。
slowlog-log-slower-than 10000slog log慢查询日志是用来记录redis中运行比较慢的命令,如果大于slog log设置的实际,就会把该指令记录下来。这里的时间设置使用的是微秒单位,一百万微秒等于一秒。设置为负数表示关闭该功能,不做记录。设置为0表示记录所有执行指令。(该记录是基于内存的,不会持久化到磁盘)
slowlog-max-len 128慢查询日志的长度,如果慢日志的长度超过该长度,就会把旧日志删除,再把该日志追加到旧日志。通过SLOWLOG RESET可以删除日志,释放内存。
latency-monitor-threshold 0延时监控系统记录执行时间大于或等于预定时间(毫秒)的操作,为0时不记录。
notify-keyspace-enents “”键空间通知使得客户端可以通过订阅频道或模式,来接收那些以某种方式改动了redis数据集的事件。默认是关闭,不开启时间通知。
hash-max-ziplist-entries 512数据量小于等于设置的值的,用ziplist;大于设置的值的,用hash
hash-max-ziplist-value 64参数值小于等于配置设置的值,使用ziplist;大于配置值的,使用hash。
list-max-ziplist-size -2每个quicklist节点上的ziplist大小8不能超过的值。默认-2不能超过8kb。
list-compress-depth 0这个配置表示一个quicklist双向链表两端不压缩的个数,默认值0表示全部都不压缩。设置1表示两端各有一个节点不压缩,中间压缩;设置2也是一样,依次排列。
set-max-intset-entries 512set有一种特殊编码的情况,当set数据全是十进制64位有符号整数构成的字符串时,并且它的大小超过了这个设置的值,就使用intset来编码。
zset-max-ziplist-entries 128与hash类似,当小于等于设置的值时,使用ziplist进行编码。
zset-max-ziplist-value 64当值小于等于配置设置的值,就使用ziplist进行编码。
hll-sparse-max-bytes 3000value的大小小于等于配置设置的值使用稀疏数据结构,大于配置设置的值使用稠密的数据结构(bense)。如果value的值大于16000几乎是没用的。建议value大概为3000.如果对cpu要求不高,对空间要求比较高,建议设置10000左右。
activerehashing yesredis将在每100毫秒花费1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。

未更新完毕,后续还有


  1. MERZ:取自意大利歌女 Alessia Merz 的名字。 ↩︎

  2. publish/subscribe:发布/订阅功能。 ↩︎

  3. 进程守护:交由后台线程运行,关闭窗口后,不会结束进程。 ↩︎

  4. 官方出厂默认是save 900 1。 ↩︎

  5. 内存容量超过maxmemory后的处理策略:(
    volatile-lru:根据lru算法移除已过期的key。
    allkeys-lru:根据lru算法删除所有key。
    volatile-random:随机移除设置过期时间的key。
    allkeys-random:随机移除任何key。
    volatile-ttl:移除即将过期的key。(minor TTL)
    noeniction:不移除任何key,只返回一个写错误。
    ↩︎

  6. 什么是AOF:redis会根据一些自己的策略把所有的写操作都记录到aof日志中,然后根据他自己的一些重写策略,对aof日志文件进行重写,当redis重启时,会去检查并执行aof日志,恢复数据。不能直接就说使用RDB,RDB虽然比AOF的性能高;但是AOF的安全性比RDB高,使用默认配置重写策略,只会丢失1秒数据。如果要使用redis的服务是一个不要求持久化的,比如只存token、查询结果这种允许丢失的数据的,最好的方案其实是不使用持久化,应该把RDB和AOF都关掉。如果是要求一致性的服务,比如缓存业务相关需要暂存写入数据的数据,这个时候应该同时开启RDB和AOF,使用两种备份容灾方案。如果服务既要求安全,又需要速度,这个时候才需要在RDB和AOF之间做抉择,RDB速度会比AOF快一些,但牺牲了一些安全性;AOF的安全性会高很多,但牺牲了一些性能。 ↩︎

  7. aof执行策略:(
    appendfsync no:表示不执行fsync,由操作系统保证数据同步到磁盘(速度最快)。
    appendfsync everysec:表示每秒执行一次fsync,可能会导致丢失这一秒的数据。
    appendfsync always:表示每次写入都执行fsync,以保证数据同步到磁盘。(数据最安全,但也是三个之中最慢的)
    ↩︎

  8. 表示quicklist节点的ziplist的长度不能超过的长度值:(
    -5:每个quicklist节点上的ziplist大小不能超过64Kb。(不推荐)
    -4:每个quicklist节点上的ziplist大小不能超过32Kb。
    -3:每个quicklist节点上的ziplist大小不能超过16Kb。
    -2:每个quicklist节点上的ziplist大小不能超过8Kb。(redis默认值)
    -1:每个quicklist节点上的ziplist大小不能超过4Kb。
    ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值