Redis系列(⼀):Redis简介
⼀、Redis概述
Redis是⼀个开源(遵循BSD协议)Key-Value数据结构的内存存储系统,⽤作数据库、缓存和消息代理。它⽀持5种数据结构:字符串string、哈希hash、列表list、集合set和有序的集合sorted-set。Redis⽀持Lua脚本,哨兵机制和集实现⾼可⽤。适⽤场景:缓存、投票、抽奖、分布式session、排⾏榜、计数、队列、发布订阅等;具体介绍见。
⼆、Redis安装
②安装gcc:yum install gcc
④执⾏ cp redis‐5.0. ../
⑤ cd /root/svr 然后执⾏:tar -xvf redis‐5.0.:
cd redis‐5.0.2:
⑥执⾏:make install PREFIX=/root/svr/redis-5.0.2
⑦启动redis 执⾏:bin/redis-server ../f (注意:如果要后台启动需要把f配置⾥⾯的daemonize改为yes)
⑧验证是否启动成功 ps -ef|grep redis
⑨进去redis客户端:bin/redis-cli
⑩退出客户端:quit
三、f主要配置详解
参数解释
bind指定 Redis 只接收来⾃于该 IP 地址的请求,如果不进⾏设置,那么将处理所有请求
port监听端⼝,默认6379
timeout设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关
闭该连接
daemonize默认情况下,redis不是在后台运⾏的,如果需要在后台运⾏,把该项的值更改为yes
loglevel log等级分为4级,debug, verbose, notice, 和 warning。⽣产环境下⼀般开启notice
logfile配置log⽂件地址,默认使⽤标准输出,即打印在命令⾏终端的窗⼝上
save save <seconds> <changes>⽐如save 60 10000意思60秒(1分钟)内⾄少10000个key值改变(则进⾏数据库保存--持久化rdb)dbfilename rdb⽂件的名称
dir数据⽬录,2种持久化rdb、aof⽂件就在这个⽬录
replicaof replicaof <masterip> <masterport>:该配置是主从的配置表⽰该redis实例是masterip:masterport的从节点
masterauth master连接密码
replica-serve-stale-data 当slave跟master失去连接或者正在同步数据,slave有两种运⾏⽅式:
1) 如果replica-serve-stale-data设置为yes(默认设置),slave会继续响应客户端的请求。
2) 如果replica-serve-stale-data设置为no,除去指定的命令之外的任何请求都会返回⼀个错误”SYNC with master in progress”
replica-read-only是否设置slave只读
repl-diskless-sync同步策略: 磁盘或socket,默认磁盘⽅式
repl-diskless-sync-delay 如果⾮磁盘同步⽅式开启,可以配置同步延迟时间,以等待master产⽣⼦进程通过socket传输RDB数据给slave。默认值为5秒,设置为0秒则每次传输⽆延迟
repl-ping-replica-period slave根据指定的时间间隔向master发送ping请求。默认10秒repl-timeout同步的超时时间
repl-disable-tcp-
nodelay是否在slave套接字发送SYNC之后禁⽤ TCP_NODELAY repl-backlog-size设置数据备份的backlog⼤⼩
repl-backlog-ttl slave断开开始计时多少秒后,backlog缓冲将会释放
replica-priority slave的优先级,当master挂了,优先级数字⼩的salve会优先考虑提升为master,0作为⼀个特殊的优先级,标识这个slave不能作为master
requirepass客户端在处理任何命令时都要密码验证
rename-command命令重命名,可以给危险命令改变名字
maxclients设置最多同时连接的客户端数量,默认这个限制是10000个客户端。
maxmemory设置最⼤内存,⼀旦内存使⽤达到最⼤内存,redis会根据选定的回收策略(maxmemmory-policy)删除key
maxmemory-policy 最⼤内存策略:如果达到内存限制了,redis如何选择删除key:
1)volatile-lru -> 根据LRU算法删除设置过期时间的key
2)allkeys-lru -> 根据LRU算法删除任何key
3)volatile-random -> 随机移除设置过过期时间的key
4)allkeys-random -> 随机移除任何key
5)volatile-ttl -> 移除即将过期的key(minor TTL)
6)noeviction -> 不移除任何key,只返回⼀个写错误
maxmemory-samples设置样本量的个数
appendonly是否开启AOF,如果开启那么在启动时Redis将加载AOF⽂件,它更能保证数据的可靠性,aof的⽂件内容就是RESP协议appendfilename AOF⽂件名(默认:"appendonly.aof")
appendfsync 配置 Redis 多久才将数据 fsync 到磁盘⼀次
Redis⽀持三种不同的模式:
1)no:不要⽴刻刷,只有在操作系统需要刷的时候再刷。⽐较快。
2)always:每次写操作都⽴刻写⼊到aof⽂件。慢,但是最安全。
3)everysec:每秒写⼀次。折中⽅案。
auto-aof-rewrite-
percentage⾃动重写AOF⽂件。如果AOF⽇志⽂件增⼤到指定百分⽐,默认100。Redis能够通过 BGREWRITEAOF ⾃动重写AOF⽇志⽂件auto-aof-rewrite-min-
size⾃动重写AOF⽂件。如果AOF⽇志⽂件到达最⼩的指定⼤⼩,默认64mb
aof-use-rdb-preamble Redis 4.0之后配置混合持久化,需要配置 aof-use-rdb-preamble yes
lua-time-limit Lua脚本的最⼤执⾏时间,单位为毫秒
cluster-enabled是否开启集 cluster-enabled yes
cluster-config-file redis⾃动⽣成集配置信息的⽂件名
cluster-node-timeout集节点超时毫秒数。超时的节点将被视为不可⽤状态。
aof-rewrite-incremental-
fsync当⼀个⼦进程重写AOF⽂件时,如果配置aof-rewrite-incremental-fsync yes,则⽂件每⽣成32M,数据会被同步
rdb-save-incremental-
fsync当redis保存RDB⽂件时,如果启⽤了以下选项,每⽣成32MB数据,⽂件将被fsync到磁盘
四、Redis五种数据结构
1、String
1.1 字符串操作
SET key value //设置字符串键值对
MSET key value [key value ...] //批量设置字符串键值对
SETNX key value //设置字符串键值对,当key存在就不做处理直接返回0,否则跟set命令⼀样
GET key //获取⼀个字符串键值
MGET key [key ...] //批量获取字符串键值
DEL key [key ...] //删除⼀个键
EXPIRE key seconds //设置⼀个键的过期时间(秒)
1.2 原⼦操作
INCR key //将key中储存的数字值加1
DECR key //将key中储存的数字值减1
INCRBY key increment //将key所储存的值加上increment
DECRBY key decrement //将key所储存的值减去decrement
2、Hash
redis支持的数据结构 2.1 常⽤操作
HSET key field value //设置哈希表key中的字段field的值设为value
HSETNX key field value //设置哈希表key中的字段field的值设为value,当key存在不做处理,返回0,否则跟hset命令⼀样HMSET key field value [field value ...] //批量设置哈希表key中的字段field的值设为value
HGET key field //获取哈希表key对应的field字段的值
HMGET key field [field ...] //批量获取哈希表key中多个field字段的值
HDEL key field [field ...] //删除哈希表key中的field字段
HLEN key //返回哈希表key中field的数量
HGETALL key //返回哈希表key中所有的键值
HINCRBY key field increment //为哈希表key中field键的值加上增量increment
3、List
3.1 常⽤操作
LPUSH key value [value ...] //将⼀个或多个值value插⼊到key列表的表头(最左边)
RPUSH key value [value ...] //将⼀个或多个值value插⼊到key列表的表尾(最右边)
LPOP key //移除并返回key列表的头元素
RPOP key //移除并返回key列表的尾元素
LRANGE key start stop //返回列表key中指定区间内的元素,区间以偏移量start和stop指定
BLPOP key [key ...] timeout //从key列表表头弹出⼀个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,⼀直阻塞等待BRPOP key [key ...] timeout //从key列表表尾弹出⼀个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,⼀直阻塞等待 4、Set
4.1 常⽤操作
SADD key member [member ...] //往集合key中存⼊元素,元素存在则忽略,key不存在则新建
SREM key member [member ...] //从集合key中删除元素
SMEMBERS key //获取集合key中所有元素
SCARD key //获取集合key的元素个数
SISMEMBER key member //判断member元素是否存在于集合key中
SRANDMEMBER key [count] //从集合key中选出count个元素,元素不从key中删除
SPOP key [count] //从集合key中选出count个元素,元素从key中删除
4.2 运算操作
SINTER key [key ...] //交集运算
SINTERSTORE destination key [key ..] //将交集结果存⼊新集合destination中
SUNION key [key ..] //并集运算
SUNIONSTORE destination key [key ...] //将并集结果存⼊新集合destination中
SDIFF key [key ...] //差集运算
SDIFFSTORE destination key [key ...] //将差集结果存⼊新集合destination中
5、Sorted-Set
5.1 常⽤操作
ZADD key score member [[score member]...] //往有序集合key中加⼊带分值元素
ZREM key member [member ...] //从有序集合key中删除元素
ZSCORE key member //返回有序集合key中元素member的分值
ZINCRBY key increment member //为有序集合key中元素member的分值加上increment
ZCARD key //返回有序集合key中元素个数
ZRANGE key start stop [WITHSCORES] //正序获取有序集合key从start下标到stop下标的元素
ZREVRANGE key start stop [WITHSCORES] //倒序获取有序集合key从start下标到stop下标的元素
5.2 运算操作
ZUNIONSTORE destkey numkeys key [key ...] //并集计算
ZINTERSTORE destkey numkeys key [key ...] //交集计算
五、Redis核⼼原理
1、Redis单线程为什么还能这么快
Redis所有的数据都是在内存中,所有的运算都是内存级别的运算,⽽且单线程避免了多线程的切换性能损耗的问题。正因为Redis是单线程,所以要⼩⼼使⽤Redis指令,对于那些耗时的指令(⽐如keys),⼀定要谨慎使⽤,⼀不⼩⼼就可能会导致 Redis 卡顿。
2、Redis单线程为何能处理那么多的并发客户端连接
Redis的IO多路复⽤:redis利⽤epoll来实现IO多路复⽤,将连接信息和事件放到队列中,依次放到⽂件事件分派器,事件分派器将事件分发给事件处理器。(IO多路复⽤在后续的netty系列⾥⾯详细讲解)
总结:Redis是⼀个Key-Value数据结构的内存存储系统,他⽀持5种数据结构,分别是String结构、Hash结构、List结构、Set结构、Sorted-Set结构;Redis⽀持Lua脚本,哨兵机制和集实现⾼可⽤;介绍了安装Redis的步骤,详细的解释了f的主要配置,以及Redis的核⼼原理。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论