zoukankan      html  css  js  c++  java
  • 缓存知识整理(包含Redis)

    一、缓存知识

      1、buffer和cache的区别

          Buffer 缓冲 写操作 写缓冲
            Cache 缓存 读操作 读缓存 磁盘-->内存-->CPU

      2、PHP的缓存方案

    官方文档:http://www.php.net/manual/zh/opcache.installation.php
    PHP 5.5.0 及后续版本
    OPcache 只能编译为共享扩展。 如果你使用 --disable-all 参数 禁用了默认扩展的构建, 那么必须使用 --enable-opcache 选项来开启 OPcache
    推荐的 php.ini 设置
    使用下列推荐设置来获得较好的 性能:

    opcache.memory_consumption=128
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=4000
    opcache.revalidate_freq=60
    opcache.fast_shutdown=1
    opcache.enable_cli=1

      3、RAID卡优化

    出处:http://www.cnblogs.com/chenmh/p/5846766.html

    radi卡电池充放电:http://www.tuicool.com/articles/a2AzAb

      1、查看RAID卡电池情况

    MegaCli64 -AdpBbuCmd -GetBbuStatus -aAll

    如果返回如下错误那么可能是RAID卡BUU电池有问题或者没有电池保护功能:

    Adapter 0: Get BBU Status Failed.

    FW error description:

      The required hardware component is not present. 

    Exit Code: 0x22

      2、查看当前RAID卡缓存策略

    MegaCli64 -LDinfo -Lall -aAll
    Default Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU
    Current Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU

    第一部分:

    WriteBack:写缓存策略

    WriteThrough:直接写入磁盘,不适用RAID卡缓存。

    第二部分:

    ReadAheadNone:不开启预读

    ReadAhead:开启预读,在读操作的时候,预先把后面顺序的数据载入raid卡缓存,在顺序读的环境中能提供很好的性能,但是在随机读的环境中反而降低读的性能(适合文件系统,不适合数据库系统)

    ReadAdaptive:自适应预读,在缓存和I/O空闲时选择预读,默认策略。

    第三部分:

    Direct:读操作不缓存到RAID卡缓存。

    Cached:读操作缓存到RAID卡缓存。

    第四部分:如果BBU(电池)出现问题是否启用Write Cache

    No Write Cache if Bad BBU:如果BBU出现问题不使用Write Cache,从WriteBack自动切换到WriteThrough,默认配置。

    Write Cache OK if Bad BBU: 如果BBU出现问题仍启用Write Cache,这种配置是非常不安全的,除非是有UPS或者双电源的情况下。

      3、RAID卡策略更改

    修改WriteBack

    MegaCli64 -LDSetProp -WB -Lall -aAll

    修改WriteThrough:

    MegaCli64 -LDSetProp -WT -Lall -aAll

    修改No Write Cache if Bad BBU:

    MegaCli64 -LDSetProp -NoCachedBadBBU -Lall -aAll

    修改Write Cache OK if Bad BBU:

    MegaCli64 -LDSetProp -CachedBadBBU -Lall -aAll

      4.其它相关命令

     1 查看机器型号    # dmidecode | grep"Product" 
     2 
     3 查看厂商    # dmidecode| grep "Manufacturer" 
     4 
     5 查看序列号    # dmidecode | grep "Serial Number" 
     6 
     7 查看CPU信息    # dmidecode | grep "CPU" 
     8 
     9 查看CPU个数    # dmidecode | grep "Socket Designation: CPU" |wc –l 
    10 
    11 查看出厂日期    # dmidecode | grep"Date" 
    12 
    13 查看充电状态    # MegaCli64 -AdpBbuCmd-GetBbuStatus -aALL |grep "Charger Status" 
    14 
    15 显示BBU状态信息    # MegaCli64 -AdpBbuCmd-GetBbuStatus –aALL 
    16 
    17 显示BBU容量信息    # MegaCli64 -AdpBbuCmd-GetBbuCapacityInfo –aALL 
    18 
    19 显示BBU设计参数    # MegaCli64 -AdpBbuCmd-GetBbuDesignInfo –aALL 
    20 
    21 显示当前BBU属性    # MegaCli64 -AdpBbuCmd-GetBbuProperties –aALL 
    22 
    23 查看充电进度百分比    # MegaCli64 -AdpBbuCmd-GetBbuStatus -aALL |grep "Relative State of Charge" 
    24 
    25 查询Raid阵列数    # MegaCli64 -cfgdsply -aALL|grep "Number of DISK GROUPS:" 
    26 
    27 显示Raid卡型号,Raid设置,Disk相关信息      # MegaCli64-cfgdsply –aALL 
    28 
    29 显示所有物理信息    # MegaCli64 -PDList-aALL 
    30 
    31 显示所有逻辑磁盘组信息    # MegaCli64 -LDInfo -LALL–aAll 
    32 
    33 查看物理磁盘重建进度(重要)    # MegaCli64 -PDRbld-ShowProg -PhysDrv [1:5] -a0 
    34 
    35 查看适配器个数    #MegaCli64 –adpCount 
    36 
    37 查看适配器时间    #MegaCli64 -AdpGetTime–aALL 
    38 
    39 显示所有适配器信息    #MegaCli64 -AdpAllInfo–aAll 
    40 
    41 查看Cache 策略设置    # MegaCli64 -cfgdsply -aALL|grep Polic
    View Code

     二、Redis应用

    键值存储,数据结构服务

    radis的单线程的;存储在磁盘上的数据仅仅是做为redis重启后能尽快读取数据,而不提过查询;

      1、memcache和redis的区别

    https://blog.csdn.net/u013474436/article/details/48632665

    简单的区别

     应用场景

    redis key的大小不建议超过2M

    先建立h1h2 ,然后再建立一个key引用之前的key

      2、官方地址和参考博文

    官方文档:https://redis.io/ 
    命令参考:https://redisdoc.com/

      3、Redis的安装

    #yum安装redis
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum
    -y install redis #查看版本 [root@redis2 ~]# redis-cli -v redis-cli 3.2.10
    #备份配置文件
    cp  /etc/redis.conf{,.orgi}

    vim /etc/redis.conf #修改redis主配置文件 cat
    /etc/redis.conf bind 10.10.10.60 #监听的地址 port 6379 #开启的端口
    timeout 0 #按需连接,不需要改 dir
    /var/lib/redis #数据放置的位置,很重要
    logfile /var/log/redis/redis.log 日志存放位置 daemonize no #是否放在后台运行,写yes maxmemory 300M #使用系统多大内存,建议设置 默认最大化使用内存 #重启Redis服务 service start redis
    #查看日志
    [root@redis2 ~]# tail -f /var/log/redis/redis.log
    日志提示操作:sysctl vm.overcommit_memory=1  直接在系统上运行命令即可

     检测

    [root@redis2 ~]# netstat -luntp|grep redis
    tcp 0 0 10.10.10.60:6379 0.0.0.0:* LISTEN 22809/redis-server

      4、Redis的基础操作

    redis是以key-value方法存储的

    #连接redis
    [root@redis2 ~]# redis-cli -h 10.10.10.60 -p 6379 #如果是远程连接其他redis的方法
    10.10.10.60:6379> exit
    [root@redis2 ~]# redis-cli #如果监听地址默认是127.0.0.1,这个命令即可连接本机
    Could not connect to Redis at 127.0.0.1:6379: Connection refused
    Could not connect to Redis at 127.0.0.1:6379: Connection refused

    在同一个空间内{类似于数据库}不允许有相同的键存在

    127.0.0.1:6379> SELECT 1   #打开一号空间
    OK
    127.0.0.1:6379[1]> SELECT 2  #打开二号空间
    OK
    127.0.0.1:6379[2]> SELECT 0  #打开0号空间
    OK
    127.0.0.1:6379> set yanqi 123    #在零号空间写入一个key
    OK
    127.0.0.1:6379> get yanqi
    "123"
    127.0.0.1:6379> SELECT 1   #切换到1号空间
    OK
    127.0.0.1:6379[1]> get yanqi   #是查询失败的
    (nil)
    备注:默认只使用0号空间
    127.0.0.1:6379> get yanqi   
    "123"
    127.0.0.1:6379> SET yanqi 456 NX   #key值存在就不更新
    (nil)
    127.0.0.1:6379> GET yanqi
    "123"
    127.0.0.1:6379> SET yanqi 456 XX   #key值存在才更新
    OK
    127.0.0.1:6379> GET yanqi
    "456"
    127.0.0.1:6379> 

        4.1、字符串类型

    字符串类型
    #APPEND 在value后追加字符串
    10.10.10.60:6379> get yanqi
    "1993"
    10.10.10.60:6379> append yanqi huang   #给key yanqi 追加一个yanqi的字符
    (integer) 9    #字符的长度
    10.10.10.60:6379> get yanqi
    "1993huang"
    
    #获取字key对应的values字符串的长度
    10.10.10.60:6379> STRLEN yanqi   #获取key对应values字符的长度
    (integer) 9
    
    #INCR 自增,适用于统计
    10.10.10.60:6379> INCR yanqi  #只对values为数字类型有效
    (error) ERR value is not an integer or out of range
    10.10.10.60:6379> set www 31   #每查询一次就会在原有的values上加1
    OK
    10.10.10.60:6379> INCR www
    (integer) 32
    
    #INCRBY 指定每次递增的步长
    redis 10.0.0.10:6379> incrby user 5
    (integer) 40
    redis 10.0.0.10:6379> incrby user 5
    (integer) 45
    
    #DECR 递减
    redis 10.0.0.10:6379> DECR user
    (integer) 54
    redis 10.0.0.10:6379> DECR user
    (integer) 53
    
    #INCRBYFLOAT 支持浮点类型的的递增
    
    #MSET 同时设定多个key的值
    MSET key values key2 values key3 values 
    
    #MGET 同时获取多个key的值
    redis 10.0.0.10:6379> mget key1 key2 key3
    字符串类类型命令

      4.2、散列类型

    HSET
    redis 10.0.0.10:6379> HSET car name bmw
    (integer) 1
    redis 10.0.0.10:6379> HSET car price 500
    (integer) 1
    redis 10.0.0.10:6379> keys *
    1) "key2"
    2) "key3"
    3) "user"
    4) "mykey"
    5) "a"
    6) "name"
    7) "car"
    8) "w"
    9) "key1"
    1.3.2.2    HGET
    redis 10.0.0.10:6379> hget car name
    "bmw"
    redis 10.0.0.10:6379> hget car price
    "500"
    
    
    #HMSET
    redis 10.0.0.10:6379> hmset book name redis price 100 auth zhaolaoshi
    OK
    1.3.2.4    HMGET
    redis 10.0.0.10:6379> hmget book price auth name
    1) "100"
    2) "zhaolaoshi"
    3) "redis"
    
    
    #HGETALL查看键所有的值
    redis 10.0.0.10:6379> hgetall book
    1) "price"
    2) "100"
    3) "name"
    4) "redis"
    5) "auth"
    6) "zhaolaoshi"
    
    #HDEL 删除对应的键值
    redis 10.0.0.10:6379> hdel book price
    (integer) 1
    redis 10.0.0.10:6379> hgetall book
    1) "name"
    2) "reids"
    3) "auth"
    4) "zhao"
    
    #HEXISTS 判断字段是否存在
    redis 10.0.0.10:6379> hexists book name
    (integer) 1
    redis 10.0.0.10:6379> hexists book nam
    (integer) 0
    View Code

      4.3、列表类型list

    #lpush从左边插入数据
    redis 10.0.0.10:6379> lpush letter a
    (integer) 1
    redis 10.0.0.10:6379> lpush letter b
    (integer) 2
    
    
    #rpush从右边插入数据
    redis 10.0.0.10:6379> rpush letter a
    (integer) 3
    redis 10.0.0.10:6379> rpush letter b
    (integer) 4
    redis 10.0.0.10:6379>
    
    
    #LINDEX获取数据
    redis 10.0.0.10:6379> LINDEX letter -1
    "b"
    redis 10.0.0.10:6379> LINDEX letter -2
    "a"
    redis 10.0.0.10:6379> LINDEX letter -3
    "a"
    redis 10.0.0.10:6379> lindex letter -4
    "b"
    
    
    #RPOP 弹出数据,每弹一个数据,list里就会少一个数据,弹完列表就为空了
    redis 10.0.0.10:6379> rpop letter
    "b"
    redis 10.0.0.10:6379> rpop letter
    "a"
    redis 10.0.0.10:6379> rpop letter
    "a"
    redis 10.0.0.10:6379> rpop letter
    "b"
    redis 10.0.0.10:6379> rpop letter
    (nil)
    
    #LRANGE 显示范围,从左到右显示。2 代表从左到右第3个数字,-1代表左边第一个数字。
    redis 10.0.0.10:6379> LRANGE mylist  2 -1
    1) "key3"
    2) "key2"
    3) "key1
    
    #LLEN 获取list的长度
    redis 10.0.0.10:6379> LLEN mylist
    (integer) 5
    View Code

     

      4.4、集合类型sets

    #SADD 添加一个或多个元素到key中
    redis 10.0.0.10:6379> SADD word1 a 
    (integer) 1
    redis 10.0.0.10:6379> SADD word1 a b c d
    (integer) 3
    
    #SREM 删除集合里的元素
    redis 10.0.0.10:6379> SREM word1  d
    (integer) 1
    
    #SMEMBERS 获取集合key里的所有值。
    redis 10.0.0.10:6379> SMEMBERS word1
    1) "c"
    2) "a"
    3) "b"
    
    #SISMEMBER 判断集合里是否有指定的元素,返回值1为真,0为假
    redis 10.0.0.10:6379> SISMEMBER word1 b
    (integer) 1
    redis 10.0.0.10:6379> SISMEMBER word1 bc
    (integer) 0
    
    #SDIFF 显示差积运算
    redis 10.0.0.10:6379> sadd A 1 2 3  
    (integer) 3
    redis 10.0.0.10:6379> sadd B 2 3 4
    (integer) 3
    redis 10.0.0.10:6379> sdiff A B   # 显示A有的  B没有的
    1) "1"
    redis 10.0.0.10:6379> sdiff B A   # 显示B有的  A没有的
    1)    "4"
    
    #SINTER 显示交集
    redis 10.0.0.10:6379> SINTER A B
    1) "2"
    2) "3"
    
    #SUNION 显示并集(合集)
    redis 10.0.0.10:6379> SUNION A B
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    
    #SCARD 显示集合中元素的个数
    redis 10.0.0.10:6379> SCARD B
    (integer) 3
    redis 10.0.0.10:6379> SCARD A
    (integer) 3
    
    #SDIFFSTORE 不显示结果,将结果服务新的集合
    语法:SDIFFSTORE newkey key1 key1
    redis 10.0.0.10:6379> SDIFFSTORE C A B
    (integer) 1
    redis 10.0.0.10:6379> smembers C
    1) "1"
    redis 10.0.0.10:6379> TYPE C
    set
    View Code

      4.5、 有序集合类型 sorted sets

    #ZADD 添加集合
    语法:ZADD key 分数(整数) 值
    redis 10.0.0.10:6379> ZADD USER 10 wangfei
    (integer) 1
    redis 10.0.0.10:6379> ZADD USER 1 zhangsan 2 zhsngsi 3 wangfei
    (integer) 2
    
    
    #ZSCORE 获取元素的分数
    redis 10.0.0.10:6379> ZsCORE USER zhangsan
    "1"
    redis 10.0.0.10:6379> ZsCORE USER zhsngsi
    "2"
    redis 10.0.0.10:6379> ZsCORE USER wangfei
    "3"
    
    #ZRANGE 指定范围的元素列表
    redis 10.0.0.10:6379> ZADD num 1 a 2 b 3 c
    (integer) 3
    redis 10.0.0.10:6379> zrange num 0 -1
    1) "a"
    2) "b"
    3) "c"
    redis 10.0.0.10:6379> zrange num  0 3
    1) "a"
    2) "b"
    3) "c"
    View Code

      

      5、redis持久化(persistence)

    官方文档地址:一定要看 https://redisdoc.com/topic/persistence.html

    将redis内存中的数据放到磁盘中的操作就叫做持久化

      5.1、Redis持久化

    Redis 提供了多种不同级别的持久化方式:
    1、RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
    2、AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。
    注:Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。

    例如:redis默认使用RDB,使用一段时间后再开启AOF,重启redis进程后数据就没了!!!因为redis重启了就会优先读取AOF文件

    如果内存是32G或以上内存,快照过于频繁,需要使用SSD来提高IO性能,因为RDB每次做快照都是上G的内容;也可以拆分成多次redis来跑;

      5.2、RDB持久化和AOF持久化的优缺点

    https://redisdoc.com/topic/persistence.html
    RDB(默认启用)
    简单理解:功能更全、执行更快、易于备份(数据可以借助第三方工具分析)
    每隔一定时间对内存里的数据做一次备份(做一个快照)。
    快照的过程:
    1、    fork子进程
    2、    父进程继续干活,子进程将内存中的数据写入到硬盘中的临时文件
    3、    当子进程写完数据后,用临时文件替换RDB文件。
    注:因为rdb文件为压缩文件,比内存中的要小很多;如果需要恢复 1g内容需要30S
    
    当在60S内宕机,就会发生数据丢失的情况。
    
    配置文件/etc/redis.conf  关于RDB的相关配置
    .....
    202  save 900 1      # 在900s内,如果有1个键改变就进行快照
    203  save 300 10     # 在300s内,如果有10个键改变就进行快照
    204  save 60 10000   # 在60s内,如果有10000个键改变就进行快照
    ......
    dir /var/lib/redis/   # 快照存放地址,如果配置文件没有指定。在哪个目录下启动redis,快照就保存在哪个路径下

     AOF

    简单理解:数据更全、易于读懂;默认每秒就写一次数据,所以最多就丢失1s的数据

    快照的过程:
    1、    fork子进程
    2、    父进程继续干活,子进程将内存中的数据写入到硬盘中的临时文件
    3、    当子进程写完数据后,用临时文件替换AOF文件。
    
    运行中开启AOF模式,立即生效
    redis 10.0.0.10:6379> CONFIG SET appendonly yes
    
    配置文件/etc/redis.conf  关于AOF的相关配置
    appendonly yes   #  默认为no

      5.3、RDB 和 AOF ,我应该用哪一个

    一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性, 你应该同时使用两种持久化功能。
    
    如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。
    
    有很多用户都只使用 AOF 持久化, 但我们并不推荐这种方式: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快


       5.4、持久化测试

    RDB默认是开启的,在配置文件内再把AOF的持久化开启!

    [root@redis2 redis]# vim  /etc/redis.conf 
    [root@redis2 redis]# systemctl restart redis.service
    [root@redis2 redis]# redis
    -cli -h 10.10.10.60 10.10.10.60:6379> 10.10.10.60:6379> set test01 2000 OK 10.10.10.60:6379> set test02 2002 OK 10.10.10.60:6379> get test01 "2000" 10.10.10.60:6379> exit [root@redis2 redis]#
    [root@redis2 redis]# cat appendonly.aof
    *2 $6 SELECT $1 0 *3 $3 set $6 test01 $4 2000 *3 $3 set $6 test02 $4 2002 [root@redis2 redis]#

      5.5、恢复测试

      6、主从复制

    数据量非常大的时候,建议晚上添加从服务

    主机IP 角色
    10.10.10.60 主库
    10.10.10.59 从库

     

        6.1、准备两台redis设备

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum -y install redis

    service redis restart
    systemctl enable redis.service

    tail -f /var/log/redis/redis.log
    显示sysctl vm.overcommit_memory=1

    service redis restart

    修改主配置文件/etc/redis.conf


    [root@redis2 ~]# redis-cli -h 10.10.10.60 10.10.10.60:6379> info Replication # Replication role:master connected_slaves:0 master_repl_offset:7535 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:7534 10.10.10.60:6379> [root@redis1 ~]# redis-cli -h 10.10.10.59 10.10.10.59:6379> info Replication # Replication role:master connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 10.10.10.59:6379>

    注释:两个配置一样,只是监控的IP地址不一样;只修改了监听IP地址、开启AOF、查看了数据的备份目录;其他均为修改!!!

     1 [root@redis1 ~]# egrep -v "$^|#" /etc/redis.conf 
     2 bind 10.10.10.59
     3 protected-mode yes
     4 port 6379
     5 tcp-backlog 511
     6 timeout 0
     7 tcp-keepalive 300
     8 daemonize yes
     9 supervised no
    10 pidfile /var/run/redis_6379.pid
    11 loglevel notice
    12 logfile /var/log/redis/redis.log
    13 databases 16
    14 save 900 1
    15 save 300 10
    16 save 60 10000
    17 stop-writes-on-bgsave-error yes
    18 rdbcompression yes
    19 rdbchecksum yes
    20 dbfilename dump.rdb
    21 dir /var/lib/redis
    22 slave-serve-stale-data yes
    23 slave-read-only yes
    24 repl-diskless-sync no
    25 repl-diskless-sync-delay 5
    26 repl-disable-tcp-nodelay no
    27 slave-priority 100
    28 appendonly yes
    29 appendfilename "appendonly.aof"
    30 appendfsync everysec
    31 no-appendfsync-on-rewrite no
    32 auto-aof-rewrite-percentage 100
    33 auto-aof-rewrite-min-size 64mb
    34 aof-load-truncated yes
    35 lua-time-limit 5000
    36 slowlog-log-slower-than 10000
    37 slowlog-max-len 128
    38 latency-monitor-threshold 0
    39 notify-keyspace-events ""
    40 hash-max-ziplist-entries 512
    41 hash-max-ziplist-value 64
    42 list-max-ziplist-size -2
    43 list-compress-depth 0
    44 set-max-intset-entries 512
    45 zset-max-ziplist-entries 128
    46 zset-max-ziplist-value 64
    47 hll-sparse-max-bytes 3000
    48 activerehashing yes
    49 client-output-buffer-limit normal 0 0 0
    50 client-output-buffer-limit slave 256mb 64mb 60
    51 client-output-buffer-limit pubsub 32mb 8mb 60
    52 hz 10
    53 aof-rewrite-incremental-fsync yes
    54 [root@redis1 ~]# 
    大部分都是默认配置

      6.2、设置10.59为从库

    有两种设置方法:(其实就是在要设置成从库的redis上执行 slaveof  IP port

          1、在主配置文件内添加:   slaveof  10.10.10.60  6379      #

          2、在命令中执行:slaveof  10.10.10.60  6379   #重启后命令丢失,需从新执行

    [root@redis1 ~]# redis-cli -h 10.10.10.59
    10.10.10.59:6379> slaveof  10.10.10.60  6379  #指向主库
    OK
    10.10.10.59:6379> info Replication
    # Replication
    role:slave     #由master变为了slave
    master_host:10.10.10.60   #主库的IP地址
    master_port:6379   #主库的端口
    master_link_status:up     #当前的状态,是UP的
    master_last_io_seconds_ago:3
    master_sync_in_progress:0
    slave_repl_offset:8725
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_repl_offset:0
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    10.10.10.59:6379> 

     主库显示如下:

     测试:就是在主库上set一个key,再到salve中get这个key,现在正常即可!!!

        6.3、主从切换

    当主库down机后需要提升从库为主库,执行一条命令!

      7、reid集群

    1、客户端分片  将Redis分片的工作放在业务程序端(最可靠的方法

    优点:实现方法和代码全部自己掌控,随时调整

    缺点:手动迁移数据

    2、Redis Cluster

    缺点:客户端实现很少

    3、代理分片:类似 mysql Proxy:twemproxy 

    缺点:不知道数据存在哪,生产基本不用!!!

      

    tidb

     https://github.com/CodisLabs/codis

     Codis 优点:(第二种选法

      1、无缝迁移数据

      2、有动态扩容和缩容的能力

        缺点:

      1、单线程

      2、部分命令不支持:https://github.com/CodisLabs/codis/blob/release3.2/doc/unsupported_cmds.md

  • 相关阅读:
    堆内存与栈内存
    struts2 ajax 实现方式
    Hibernate 配置派生属性
    高效 jquery 的奥秘
    对于Maven管理的项目制定虚拟目录
    ThreadLocal 笔记
    java Thread.join()
    vi 使用笔记
    浮动闭合方案:clearfix
    熬夜之弊及改善之法
  • 原文地址:https://www.cnblogs.com/huangyanqi/p/9210583.html
Copyright © 2011-2022 走看看