redis知识点

安装&连接
https://redis.com/redis-enterprise-software/download-center/software/

#配置文件路径
/usr/local/software/redis-6.2.7/redis.conf
#备份文件
cp redis.conf redis_bak.conf

#安装目录
/usr/local/software/redis-6.2.7
#服务操作目录
cd src/

#服务端启动
./redis-server
#服务端停止
ps -ef | grep redis
kill -9 pid

#客户端连接
./redis-cli -h host -p port -a AuthPassword


数据库操作命令
flushdb
清除当前所在数据库数据
flushall
清除当前所有数据库数据
select number
切换数据库
info
查看redis服务器的整体情况
dbsize
获取数据库key数量
keys 表达式(正则表达式)
查找所有符合给定模式的key
特殊说明:正式环境中,慎用,由于redis单进程单线程,当key很多时,可能会造成阻塞
ttl key
查看过期时间(-1:永久;>0:剩余存活时间;-2:不存在;)
expire key timeout
设置key过期时间
persist key
把带有过期时间的key变成永不过期(0:当前key没有过期时间或不存在;1:删除过期时间成功;)


基本数据类型之String
1、可以是字符串、数据及二进制存储
2、一个字符串类型的值最多存储512M
3、key值不宜过长,消耗内在,且在数据库中查找这类键值的计算成本高

set key value nx ex
设置一个字符串的key
nx:not exist 表示当key不存在时,才存储key
ex:expire 过期时间,单位为秒

get key
获取key的值

mset key1 value1 key2 values...
批量设置key和value(减少redis连接)

mget key1 key2
批量获取key的值(减少redis连接)
exists key
判断当前键是否存在(0:不存在;1:存在;)

type key
返回当前键的数据类型

rename key newkey
重命名当前key

del key
删除key

strlen key
获取key存储值的长度

getrange key start stop
获取key存储值指定范围[start stop]

setrange key index value
设置key存储值从索引值开始,用value替换原内容,返回最新长度

incr key
将key +1 操作
decr key
将key -1 操作
incrby key 步长
incrbyfloat key 步长
将key增加指定步长
decrby key 步长
将key减少指定步长


基本数据类型之List
lpush key value1 value2
从列表左侧压入元素,返回list最新长度
rpush key value1 value2
从列表右侧压入元素,返回list最新长度
lpop key
从列表左侧弹出第1个元素
rpop key
从列表右侧弹出第1个元素
blpop key timeout(单位为秒)
从列表左侧弹出第1个元素,列表为空时阻塞,timeout为0表示永久阻塞,直接有数据可以弹出
brpop key timeout(单位为秒)
从列表右侧弹出第1个元素,列表为空时阻塞,timeout为0表示永久阻塞,直接有数据可以弹出,如果有多个客户端在同一列表上阻塞,先到先得原则
llen key
获取list数组长度
lrange key start stop
获取list数组指定元素[start stop]([0,-1]表示获取全部元素)


基本数据类型之Hash
hset key field value
hsetnx key field value
设置key的单个字段

hmset key field1 value1 field2 value2
设置key的多个字段

hlen key
返回字段个数

Hash结构优缺点:
优点:
1、同类数据归类整合存储,方便数据管理
2、相比string操作消耗内存与CPU更小
3、相比spring存储更节省空间

缺点:
1、过期功能不能使用在field上,只能设置key的过期时间
2、redis集群架构下不适合大规模使用


基本数据类型之Set
sadd key member1 member2
添加一个或多个元素,自动去重,返回值为成功插入到集合中的元素个数

smembers key
查看集合中所有元素

srem key member1 member2
删除一个或多个元素,元素不存在自动忽略

sismember key member
元素是否存在

srandmember key [count]
随机返回集合中指定个数的元素,默认为1个

spop key [count]
随机弹出集合中指定个数的元素,默认为1个

scard key
返回集合中元素的个数

基本数据类型之Zset
zadd key score member
在有序集合中添加一个成员,返回值为成功插入到集合中的元素个数

zrange key [start stop]
查看集合指定区间元素(升序)([0,-1]表示获取全部元素)

zrevrange key [start stop]
查看集合指定区间元素(降序)([0,-1]表示获取全部元素)

zscore key member
查看指定元素的分值

zrem key member1 member2
删除一个或多个成员

zincrby key increment member
将集合中的元素增加或减少分值,返回分值

zrank key member
返回元素排名(从0开始)

zrank key member
返回元素逆序排名(从0开始)

zremrangebyscore key min max
根据分值删除指定分值区间内的元素

zcard key
返回集合中元素的个数

zcount key min max
查看指定分值范围中元素的个数


Redis事务管理
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的
multi:标记一个事务块的开始
exec: 执行所有事务块内的命令
discard:取消事务


redis如何删除过期数据
1、惰性删除:当用户主动访问一个过期的key时,redis会将其直接从内存中删除
2、定期删除:周期性的通过随机算法,抽取N(默认100)个被设置了过期时间的key,检查这其中已经过期的key,将其清除。同时,如果其中已经过期的key超过了一定的百分比M(默认是25),则将继续执行一次主动清理
3、maxmemory:内存不足时触发主动清理(根据淘汰策略)

淘汰策略:
LRU(Least Recently Used,最近最少使用)
LFU(Least Frequently Used,最不经常使用)
1.volatile-lru:带过期时间的、最近最少使用
2.allkeys-lru:不带过期时间、最近最少使用
3.volatile-lfu:带过期时间的、最不经常使用
4.allkeys-lfu:不带过期时间、最不经常使用
5.volatile-random:随机删除一个键(带过期时间的)
6.allkeys-random:随机删除一个键
7.volatile-ttl:删除带过期时间最早的一个键
8.no-enviction:不删除键,返回错误信息(redis默认选项)

特别说明:
slave自己不会自己清理过期key,当一个key要过期时,master会先清理,之后master向slave发送一条del命令,告知slave也要删除这个key,以此达到主从数据库一致性

redis持久化之RDB
通过配置文件设置save参数
save 时间(单位:秒) 修改次数
1、只要满足任意一个条件,服务器就会自动执行bgsave
2、每次创建RDB文件之后,服务器会将自动持久化而设置的时间计数器和次数计数器清零
3、创建RDB文件需要将服务器所有的数据库的数据都保存起来,这是一个非常消耗资源和时间的操作,所以服务器需要隔一段时间才创建一个新的RDB文件,也就是说,创建RDB文件不能执行的过于频繁,否则会严重影响服务器的性能
4、可能会丢失数据

redis持久化之AOF
1、存储的是命令,而不是真实数据
2、默认不开启
配置策略
always:服务器每写入一条命令,就将缓冲区里的命令追加写入到硬盘,不会丢失任何已经成功执行的命令数据
everysec:每秒异步写入到硬盘,最多丢失1秒的命令数据
no:服务器不主动将命令写入硬盘,则操作系统决定何时将缓冲区里的命令写入到硬盘,丢失命令数量不确定
特殊说明
操作系统在调用write函数时,为了提高效率,通常不会直接将内容写入到硬盘里,而是将内容放入一个内存缓冲区里,等缓冲区被填满时,才将存储在缓冲区里的内容真正写入到硬盘里

手动触发
bgrewriteaof
自动触发
修改配置文件
#当aof文件的增量大于100%时,才进行重写
auto-aof-rewrite-percentage 100
#扩容配置64 -> 128 -> 256
auto-aof-rewrite-min-size 64mb

RDB VS AOF
RDB:
1、全量备份、一次保存整个数据库
2、保存间隔较长
3、数据不愿速度快
4、执行save命令全阻塞服务器,可以手动或自动触发bgsave不会阻塞

AOF
1、增量备份,一次保存一条修改数据库的命令
2、保存间隔默认为1秒钟
3、数据还原速度一般,冗余命令多,还原速度慢
4、重写不会阻塞服务器

场景分析
根据不同的业务配置不同的持久化机制,如即配置RDB,又配置AOF,则先找AOF文件,再执行RDB文件


Redis集群(主从复制、哨兵模式、集群架构)

水平拆分:以多个业务为单位,进行逻辑拆分
垂直拆分:以单个业务为单位,进行逻辑拆分

#主从复制
1、replicaof是新版本的命令,旧版本是slaveof命令
2、master会一直将自己的数据更新同步给slave,保持主从同步
3、只有master可以执行写命令,slave只能执行读命令
4、当master宕机后,在启动之前崩溃的主数据库,然后使用slaveof命令将其设置成新的主数据库的从数据库,即可同步数据。
作用:分担读的压力,提高可用性
原理:客户端可以连接slave,发送读命令,从服务器执行读命令,降低master的读压力
注意:从服务器只能读不能写

主从操作流程
1:查看后台运行端口
ps -ef | grep redis
2:执行命令,杀死对应端口
kill -9 pid
集群提前准备

redis安装目录:
/usr/local/software/redis-6.2.7

复制配置文件
cp redis.conf /usr/local/games/redis/6380/redis.conf
cp redis.conf /usr/local/games/redis/6381/redis.conf
cp redis.conf /usr/local/games/redis/6382/redis.conf
修改配置文件端口
1、vim修改
2、windows中统一修改

切换到src目录
cd /usr/local/software/redis-6.2.7/src
启动服务:
./redis-server ../redis.conf
./redis-server /usr/local/games/redis/6380/redis.conf
./redis-server /usr/local/games/redis/6381/redis.conf
./redis-server /usr/local/games/redis/6382/redis.conf

客户端连接指定IP
./redis-cli -h 127.0.0.1 -p 6382

#查看主从配置
redis-cli info replication或info replication

#配置主从
replicaof 127.0.0.1 6379
#自封为王
replicaof no one
1、从服务器内存小时,会导致复制失败

#哨兵模式
#配置文件
启动哨兵:
./redis-server ../sentinel.conf

sentinel monitor master-name ip port quorum
#master-name是主数据库的名字(别名)
#ip和port 是当前主数据库地址和端口号
#quorum表示在执行故障切换操作前,需要多少哨兵节点同意
说明:
1、竞选机制的实现,是依赖于在系统中启动一个sentinel进程。
2、这里之所以只需要连接主节点,是因为通过主节点的info命令,获取从节点信息,从而和从节点也建立连接,同时也能通过主节点的info信息知道新增从节点的信息。一个哨兵节点可以监控多个主节点,但是并不提倡这么做,因为当哨兵节点崩溃时,同时有多个集群切换会发生故障。哨兵启动后,会与主数据库建立两条连接。

优点:
哨兵模式是基于主从模式的,解决可主从模式中master故障不可以自动切换故障的问题

缺点:
1、是一种中心化的集群实现方案:始终只有一个Redis主机来接收和处理写请求,写操作受单机瓶颈影响。
2、集群里所有节点保存的都是全量数据,浪费内存空间,没有真正实现分布式存储。数据量过大时,主从同步严重影响master的性能。
3、Redis主机宕机后,哨兵模式正在投票选举的情况之外,因为投票选举结束之前,谁也不知道主机和从机是谁,此时Redis也会开启保护机制,禁止写操作,直到选举出了新的Redis主机。


#集群架构
官方推荐,集群部署至少要 3 台以上的master节点,最好使用 3 主 3 从六个节点的模式。

Redis Cluster集群具有如下几个特点:
1、集群完全去中心化,采用多主多从;所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2、客户端与 Redis 节点直连,不需要中间代理层。客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
3、每一个分区都是由一个Redis主机和多个从机组成,分片和分片之间是相互平行的。
4、每一个master节点负责维护一部分槽,以及槽所映射的键值数据;集群中每个节点都有全量的槽信息,通过槽每个node都知道具体数据存储到哪个node上。

redis cluster主要是针对海量数据+高并发+高可用的场景,海量数据,如果你的数据量很大,那么建议就用redis cluster,数据量不是很大时,使用sentinel就够了。redis cluster的性能和高可用性均优于哨兵模式。

当设置daemonize为yes时,可在后台关闭

1:查看后台运行端口
ps -ef | grep redis
2:执行命令,杀死对应端口
kill -9 pid
集群提前准备
redis安装目录:
/usr/local/software/redis-6.2.7

复制配置文件
cp redis.conf /usr/local/games/redis/6380/redis.conf
cp redis.conf /usr/local/games/redis/6381/redis.conf
cp redis.conf /usr/local/games/redis/6382/redis.conf
修改配置文件端口
1、vim修改
2、windows中统一修改

切换到src目录
cd /usr/local/software/redis-6.2.7/src
启动服务:
./redis-server ../redis.conf
./redis-server /usr/local/games/redis/6380/redis.conf
./redis-server /usr/local/games/redis/6381/redis.conf
./redis-server /usr/local/games/redis/6382/redis.conf


客户端连接指定IP
./redis-cli -h 127.0.0.1 -p 6382

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值