wangJiaLun-go

王加伦的技术分享

0%

Redis 缓存过期处理与内存淘汰机制

缓存过期处理

  • (主动)定时删除

    定时随机的检查过期的key,如果过期则清理删除。

    1
    2
    # 默认每秒钟10次,把这个设置的越大意味着占用的CPU也就越多
    hz 10
  • (被动)惰性删除

    当客户端请求一个已经过期的key的时候,那么redis会检查这个key是否过期,如果过期了,则删除,然后返回一个nil。这种策略对 CPU 比较友好,不会有太多的损耗,但是内存占用会比较高。

阅读全文 »

redis 主从复制(读写分离)

  • 将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。

  • 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

    主从之间数据复制存在消耗,建议一主两从就可以了。

作用

  • 负载均衡

    在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以提高Redis服务器的并发量。

  • 数据的热备份

    主节点会把数据复制给从节点。

  • 故障恢复

    主节点宕机时可以由从节点提供服务

阅读全文 »

redis 持久化机制

RDB(Redis DataBase)

  • 特点

    通过配置触发条件或者手动触发将内存中数据写入到磁盘的临时文件中,作为快照存储。恢复时候把快照读进内存

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 核心配置
    # 900秒(15分钟)内至少1个key值改变(则进行数据库保存--持久化)
    # 300秒(5分钟)内至少10个key值改变(则进行数据库保存--持久化)
    # 60秒(1分钟)内至少10000个key值改变(则进行数据库保存--持久化)
    save 900 1
    save 300 10
    save 60 10000
    # 保存快照失败时,redis停止接受更新操作(例如持久化时候发现磁盘满了,不能再存储。redis会报错起到提示作用)
    stop-writes-on-bgsave-error yes
    # 导出数据库的文件名称
    dbfilename dump.rdb
    # 配置工作目录 dir /usr/local/redis/workspace
    dir ./
    # 开启rdb压缩模式
    rdbcompression yes

    手动触发 bgsave

    阅读全文 »

redis五种数据类型常用命令

  • keys *:查看所有的key (生产环境慎用,有性能影响)
  • type key:key的类型
  • select index:切换数据库,总共默认16个
  • flushdb:删除当前db中的数据
  • flushall:删除所有db中的数据
阅读全文 »

keepalived 双主热备

  • 首先配置好双机主备参照 我之前的 安装配置

  • 在之前主机的keepalived核心配置文件中新增一个BACKUP虚拟节点

    在之前备用机的keepalived核心配置文件中新增一个MASTER虚拟节点

    阅读全文 »

Keepalived配置nginx自动重启

  • 编写Nginx重启检测脚本 vim /etc/keepalived/check_nginx_alive_or_not.sh
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash 
    #判断nginx服务是否启动,如果不存在,调用nginx启用命令,并停止2秒,若#启动失败,杀掉keepalived
    A=`ps -C nginx --no-header |wc -l`
    if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
    killall keepalived
    fi
    fi
    阅读全文 »

nginx 日志切割

  • 编写脚本 vim cat_nginx_log.sh

    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    LOG_PATH="/var/log/nginx/"
    RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
    PID=/var/run/nginx/nginx.pid
    mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
    mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
    #向Nginx主进程发送信号,用于重新打开日志文件
    kill -USR1 `cat $PID`
阅读全文 »

nginx.conf 详解

结构

  • main (全局配置)
    • event (配置工作模式以及连接数)
    • http (http模块相关配置)
      • server (虚拟主机配置,可以配置多个虚拟主机)
        • location (路由规则)
        • upstream (集群,内网服务器)
阅读全文 »