Redis1-原理和安装

9 篇文章 0 订阅
5 篇文章 0 订阅
理论

CAP理论

C: Consistency 一致性:指数据在多个副本之间能够保持一致的特性(严格的一致性)

A: Availability 可用性:指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应(部保证获取的数据为最新数据)

P: Partiton tolerance 分区容忍性:分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障

P总是存在的,p存在的时候,A和C无法同时存在

根据CAP原理,将NoSQL数据库分成了满足CA原则,CP原则,和满足AP原则

  • CA:强一致性和可用性 放弃容错性,例如集群数据库和XFS文件系统
  • CP:一致性和分区容忍性:当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。CP模型的常见应用:分布式数据库和分布式锁,例如zookeeper, ETCD,Consul,MySQL的PXC等集群就是追求的强一致,再比如跨行转账,一次转 账请求要等待双方银行系统都完成整个事务才算完成。
  • AP:可用性和分区容忍性,放弃一致性, 追求分区容忍性和可用性 一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。AP模型常见应用:Web缓存与DNS, MySQL主从复制,默认是异步机制就可以实现AP,但是用户接受所查询的到数据在一定时 间内不是最新的.
Base理论

通常实现AP都会保证最终一致性,而BASE理论就是根据AP来扩展的,一些业务场景 比如:订单退 款,今日退款成功,明日账户到账,只要用户可以接受在一定时间内到账即可。

基本可用 (Basically Available) :系统能用就行,不用在乎时间上的响应损失或者功能上的降级

软状态 (Soft state):允许系统中的数据存在中间状态,允许系统在不同节点的数据副本存在数据延时

最终一致性(Eventuallyconsistent):在一定时间后,到达一个最终的状态

Redis常见应用场景

缓存:缓存RDBMS中数据,比如网站的查询结果、商品信息、微博、新闻、消息

Session 共享:实现Web集群中的多服务器间的session共享

计数器:商品访问排行榜、浏览数、粉丝数、关注、点赞、评论等和次数相关的数值统计场景

社交:朋友圈、共同好友、可能认识他们等

地理位置: 基于地理信息系统GIS(Geographic Information System)实现摇一摇、附近的人、外卖 等功能

消息队列:ELK等日志系统缓存、业务的订阅/发布系统

缓存穿透,缓击击穿和缓存雪崩和缓存奔溃

穿透:缓存redis和数据库mysql中都没有的数据

解决办法:接口层增加校验,缓存有效时间可以设置短点,

击穿:缓存redis中没有,但是数据库mysql中有

解决办法:设置热点

雪崩: 缓存中数据大批量到过期时间

奔溃crash:缓存服务宕机,造成缓存

Pipeline流水线

Redis客户端执行一条命令分为6个过程

发送命令--〉网络传输--〉 命令排队--〉命令执行--〉网络传输--〉 返回结果

这个过程称为Round trip time(简称RTT, 往返时间),mget,mset指令可以一次性的批量对多个数据的执 行操作,所以有效节约了RTT

但大部分命令(如hgetall)不支持批量操作,需要消耗N次RTT ,利用 Pipeline 技术可以解决这一问题 

redis安装
官方安装
https://redis.io/docs/install/install-redis/install-redis-on-linux/
二进制安装
[root@kv1 redis-7.2.4]#tar xzvf redis-7.2.4.tar.gz -C /usr/local

[root@kv1 redis-7.2.4]#make -j 2 USE_SYSTEMD=yes PREFIX=/apps/redis install
            、                                                                               [root@kv1 redis]#mkdir {etc,log,data,run}     

[root@kv1 bin]#ln -s /apps/redis/bin/redis-server  /usr/sbin/redis-server

[root@kv1 bin]#redis-server  /apps/redis/etc/redis.conf

消除启动时的三个warning提示消息

(ubuntu默认值满足2个要求,改一个即可,rocky需要改3个)

  1. Tcp backlog

ubuntu不需要修改此选项

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

Tcp backlog 是指TCP的第三次握手服务器端收到客户端 ack确认号之后到服务器用Accept函数处理请求前的队列长度,即全连接队列

#半连接队列
[root@ubuntu2204 ~]#cat /proc/sys/net/ipv4/tcp_max_syn_backlog
128
#全连接队列默认值
[root@ubuntu2204 ~]#cat /proc/sys/net/core/somaxconn
4096
  1. overcommit_memory
WARNING overcommit_memory is set to 0! Background save may fail under low memory 
condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf 
and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to 
take effect.

内核参数说明

内核参数overcommit_memory 实现内存分配策略,可选值有三个:0、1、2
0 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则内存
申请失败,并把错误返回给应用进程
1 表示内核允许分配所有的物理内存,而不管当前的内存状态如何
2 表示内核允许分配超过所有物理内存和交换空间总和的内存
#查看值得2种方式
[root@kv1 bin]#cat /proc/sys/vm/overcommit_memory
0
[root@kv1 bin]#sysctl vm.overcommit_memory
vm.overcommit_memory = 0



修改
#vim /etc/sysctl.conf
vm.overcommit_memory = 1  #新版只允许1,不支持2
[root@kv1 bin]#sysctl -p
vm.overcommit_memory = 1
[root@kv1 bin]#
[root@kv1 bin]#cat /proc/sys/vm/overcommit_memory
1
  1. transparent hugepage
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. 
This will create latency and memory usage issues with Redis. To fix this issue 
run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as 
root, and add it to your /etc/rc.local in order to retain the setting after a 
reboot. Redis must be restarted after THP is disabled.
警告:您在内核中启用了透明大页面(THP,不同于一般4k内存页,而为2M)支持。 这将在Redis中造成延迟
和内存使用问题。 要解决此问题,请以root 用户身份运行命令“echo never> 
/sys/kernel/mm/transparent_hugepage/enabled”,并将其添加到您的/etc/rc.local中,以便在
重启后保留设置。禁用THP后,必须重新启动Redis。

ubuntu不需要修改此参数

[root@kv1 bin]#cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
CentOS开机配置
[root@centos8 ~]#echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' 
>> /etc/rc.d/rc.local 
[root@centos8 ~]#cat /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@centos8 ~]#chmod +x /etc/rc.d/rc.local

重启发现没有告警

创建用户,修改配置文件和创建redis服务sevice文件

[root@kv1 ~]#useradd -r -s /sbin/nologin redis
[root@kv1 ~]#chown -R redis.redis /apps/redis
[root@kv1 etc]#vim redis.conf
#dir ./
dir /apps/redis/data
#pidfile /var/run/redis_6379.pid
pidfile /apps/redis/run/redis_6379.pid



#创建service文件
[root@kv1 redis]#vim /lib/systemd/system/redis.service
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised
systemd
ExecStop=/bin/kill -s QUIT $MAINPID        
Type=notify #如果支持systemd可以启用此行
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=10000000
[Install]
WantedBy=multi-user.target


[root@kv1 ~]#systemctl status redis
● redis.service - Redis persistent key-value database
     Loaded: loaded (/lib/systemd/system/redis.service; disabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-04-22 19:32:39 CST; 3s ago
   Main PID: 2023 (redis-server)
     Status: "Ready to accept connections"
      Tasks: 5 (limit: 2178)
     Memory: 2.0M
        CPU: 9ms
     CGroup: /system.slice/redis.service
             └─2023 "/apps/redis/bin/redis-server 127.0.0.1:6379" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">

4月 22 19:32:39 kv1 systemd[1]: Starting Redis persistent key-value database...
4月 22 19:32:39 kv1 redis-server[2023]: 2023:C 22 Apr 2024 19:32:39.697 * Supervised by systemd. Please make sure you set appropriate values for Tim>
4月 22 19:32:39 kv1 redis-server[2023]: 2023:C 22 Apr 2024 19:32:39.697 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
4月 22 19:32:39 kv1 redis-server[2023]: 2023:C 22 Apr 2024 19:32:39.697 * Redis version=7.2.4, bits=64, commit=00000000, modified=0, pid=2023, just >
4月 22 19:32:39 kv1 redis-server[2023]: 2023:C 22 Apr 2024 19:32:39.697 * Configuration loaded
4月 22 19:32:39 kv1 redis-server[2023]: 2023:M 22 Apr 2024 19:32:39.697 * monotonic clock: POSIX clock_gettime
4月 22 19:32:39 kv1 redis-server[2023]: 2023:M 22 Apr 2024 19:32:39.698 * Running mode=standalone, port=6379.
4月 22 19:32:39 kv1 redis-server[2023]: 2023:M 22 Apr 2024 19:32:39.698 * Server initialized
4月 22 19:32:39 kv1 redis-server[2023]: 2023:M 22 Apr 2024 19:32:39.698 * Ready to accept connections tcp
4月 22 19:32:39 kv1 systemd[1]: Started Redis persistent key-value database.



[root@kv1 ~]#ss -tnl
State            Recv-Q           Send-Q                      Local Address:Port                       Peer Address:Port           Process

LISTEN           0                511                             127.0.0.1:6379                            0.0.0.0:*
LISTEN           0                511                                 [::1]:6379             

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值