• REDIS学习


    基本操作:

    1、设置set k1 v1

    2、选择库 select no.

    3、删除对应的k-v:  delete k1

    4、删除当前库flushdb

    5、删除所有库flushall

    6、设置key的过期时间:expire keyname seconds

    常用数据类型:五大

    1、string:简单的k-v对

    对value是整型的进行加减,一定要是数字才可以:

    INCR k1          递增1

    INCRBY k1  3   递增3

    DECR k1       

    DECRBY k1 3

    修改从0位开始的值,v的值会覆盖:setrange k1  0 1111

    按区间[n,m]查看value的值:getrange k1   n m

    设置k-v,并同时设置过期时间(若k-v已存在,会覆盖):setex k1 100 v1111

    同上,但若k-v已存在,那么操作失败:setnx k1 100 v11111111

    批量设置k-v,不管其是否存在:    mset k1 v1 k2 v2

    批量设置k-v,如果有一个存在就整个操作失败:    msetnx k1 v1 k2 v2

    2、hash:hash表,无序

    3、list:双向链表

    插入一个或多个元素:lpush listName  1 2 3 4 5

    set:hash表,只有key没有value,无序

    zset(sorted set):有序集合,底层实现是跳表

    持久化persistence

    RDB:将数据库的内存快照以二进制的形式写入磁盘的rdb文件中。

    对数据完整性要求不是那么高,对快速备份和恢复比较在意,优先考虑rdb,但有可能会丢失最后一个时间片的数据。

    save seconds

    AOF:以协议文本的方式记录数据库的每一个写操作,写到AOF文件中去,以此达到记录数据库状态的目的。

    配置

    开启appendonly yes

    策略有三种appendfsync always/appendfsync everysec/appendfsync no

    append文件名:ppendfilename "appendonly.aof"

    aof文件过大重写:随着aof文件越来越大,超过阈值(默认64   配置auto-aof-rewrite-min-size 64mb auto-aof-rewrite-percentage 100)的时候,redis开始启动文件压缩,生产保证数据恢复的最小命令集,可以使用命令bgrewriteaof。之后每次重写的触发条件是文件到达上次的1倍,且大于64M。

    对数据完整性要起比较高,带来的代价就是持续的IO,二是rewrite最后过程中将rewrite过程中的新增写操作写入新的文件时带来的阻塞是不可避免的。

    redis支持事务

    开启->入队->执行

    基本操作

    multi:表示一个事务的开启,标志这后面的redis操作会被入队queue。

    exec:执行事务中的指令集,排他的执行。

    discard:撤销事务的执行,销毁queue。

    指令集中有一个出错的话,整个事务都无法执行

    redis对事务是部分支持的,比如命令中有一些是不存在的命令,那就会导致所有其他命令也无法执行(比如把set k1 v1错误的协程setget k1 v1);如果只是有一些命令错误,但是命令本身是存在的(比如将set k1 v1写成set k1 v1 v2 v3),那么除了错误的命令之外的其他命令都能得到执行。我的理解是执行正确的命令,如果某些命令无法执行,事务内的其他已执行的命令不会被回滚。也就是说redis的事务不保证原子性。

    watch监控:属于乐观锁的一种(CAS)。WATCH监控一个或多个key是否被修改(从监控开始到事务提交这段时间内),如果修改,整个事务都无法执行,并返回nil(注意:WATCH只对事务),返回nil。一旦执行了EXEC,所有的监控锁都会被取消。

    UNwatch监控:取消所有keys的监控。

    发布和订阅

    进程中一种消息通信的模式:发送者发送消息(PUBLISH channel1 "hello world"),订阅者 (subscribe)接收消息 。

    命令:

    订阅、接收消息:subscribe  c1 c2 c3      表示订阅c1 c2 c3三个频道;也可以用通配符订阅:psubscribe c*

    发布、发送消息:publicsh c1  "hello redis"

    注意:实际生产中一般不用redis来处理发布和订阅,而是用其他消息中间件来完成发布和订阅。

    主从复制和读写分离

    master-slave

    redis server起来后默认都是master,除非修改配置文件。

    命令行和config配置文件配置的方法相同,都是:

    slaveof <masterip> <masterport>

    即可。主机无需配置。slave只能读,不能进行写操作。master能读能写。当然一般是读写分离的。

    生产时一般是一个master,多个slave。通常会遇到如下几种故障:

    1、master挂掉:此时slaves依旧是slave,slave并不会在master挂掉后自动变成slave。当master恢复后又变成了master,又恢复到挂掉之前的主仆关系。若master挂掉期间,slave手动改成了master,那么原来的master恢复后则变成了光杆司令。

    2、slave挂掉:这种情况下,slave再恢复后不会和原来的master自动连接并形成主仆关系,需要手动配置slaveof ip port,或者修改配置文件。

    处理故障,做主从分离一般有如下几种策略:

    1、一主一从:从机原地待命,不会变成slave,需要手动干预,master恢复后又回恢复到之前的主机地位,主从备份依旧有效。

    2、一主多从

    3、薪火相传

    4、哨兵模式sentinel。主机挂掉后,组织slaves投票选出master;若原来的master恢复后回来了,那么他会被哨兵监控到,使他变成slave。

    其中前三种基本上被哨兵模式取代了。因为哨兵模式更加自动化,不需要人工干预。前面三种都需要人工干预,在某一台从机上执行命令SLAVEOF NO ONE,指定其为新的master

    master-slave的缺点

    由于所有的写操作都在master上,然后复制到slaves上,所以复制过程会有个延迟,而且当访问繁忙或者当slave数量上来后,延迟更加明显。

  • 相关阅读:
    【未完成】【oracle】add_months与add_days
    【java】[null]的问题
    PID控制算法研究
    matlab函数:residue和residuez的用法
    Windows入门基础:2.vs2013中Icon显示
    关于for()循环使用过程中遇到的问题(俄罗斯方块游戏中遇到的问题)
    Windows入门基础:1.关于CreateWindow()函数使用中遇到的问题
    error C4996: 'swprintf': swprintf has been changed to conform with the ISO C standard,set _CRT_NON_CONFORMING_SWPRINT
    QT5.3.2与VS2013 fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突_(解决方案)
    Java如何访问private变量
  • 原文地址:https://www.cnblogs.com/howo/p/9127341.html
Copyright © 2020-2023  润新知