zoukankan      html  css  js  c++  java
  • redis复习

    reids

    存储结构

    1:字符

    set hello world

    get hello

    递增数字

    incr key 相应的value会+1(原子递增,针对int)

    incryby/decr key increment 递增指定的整数(针对int)

    以上都是原子操作

     

    append key value :向指定的key追加字符串(加载value上)

    strlen key 获得key对应的value的长度

    mget key key ….. 同事获得多个key的value

    mset key value key value …..

    key的设计

    对象类型 : 对象id :对象属性:对象子属性

    建议对key进行分类,同步在wiki中统一管理

    短信重发机制: sms:limit:mobile

    ====================

    2:列表

    list ,可以存储一个有序的字符串列表

    lpush key value

    rpush key value

    lpop/rpop key

    lien key 获取列表的长度

    Irange key start stop: 索引可以是负数。-1表示最有欧变的第一个元素

    lrem key count value 删除 个数。值

    lset key index value 设置

    ===========================

    3:散列

    hash key value

    hset person age 20

    hset person name mic

    hset person name male

    hget person name mic

    hmset user age 25 sex female name xx

    hmget user age sex name

    hgetall key 获取hash的所有信息,包括key和value

     

    hsetnx 存在返回0,不存在返回1

    hdel key field [field……] 删除一个或者多个

    =========================================

    4:集合

    无序

    set和list不同

    sadd key member 增加数据 如果value已经存在,则会忽略已经存在的值,并且返回成功加入的元素的数量

    srem key member 删除元素

    smember key 获得所有数据

    5:有序集合

    有序

    zadd key score member

     

    zrange key start stop [withscores]

    如果两个元素的score是相同的,那么根据(0<9<A<Z<a<z)

     

     

    功能

    1:为每个key设置超时时间

    2:通过列表类型来实现分布式队列的造作

    3:支持发布定于的消息模式

     

    应用场景

    1“数据缓存

    2:单点登录

    3:秒杀抢购

    4: 网站排名

    5:应用的模块开发

     

    安装

    1:下载,tar zxvf

    2: 编译 make

    3:make test 测试编译

    4:make install 安装

    5:make install PREFIX=/data/server 安装路径

     

     

     

    redis-server 启动服务

    Redis-cli 访问redis的控制台

    redis-benchmark

    性能测试工具

    redis-check-aof 文件检查工具

    redis-check-dump rdb文件检查工具

    redis-sentinel :服务器配置

     

     

    启动redis ./redis-server ../redis.conf

    停止:单机:control+ C

    后台:./redis-cli shundown

    启动默认单机模式

    修改redis.conf

    daemonized yes //是否后台运行

     

    访问redis 控制台

    ./redis-cli -h 192.168.1.1 -p 6379

     

     

    多数据支持

    默认支持16个数据库,可以理解为一个明明空间

    跟关系型数据库不一样的点

    1:redis不支持自定义数据库名字

    2:每个数据库不能单独设置授权

    3:每个数据库之间并不是完全隔离的,可以通过flushall命令清空redis实例里的所有数据库的key

     

    select dbid 去选择不同的数据明明空间。

    dbid的取值范围默认0-15;

    使用入门

    1:获得一个符合匹配规则的键名列表

    keys pattern [? *[]]

    keys mic:rubby

    2: 判断一个建是否村子 EXISTS key 存在返回1,不存在返回0

    3:type: key 去火的这个key的数据结构类型

     

    各种数据接口的使用

     

     

     

     

    redis 事务处理

    multi 开启事务

    EXEC 执行事务

     

    设置过期时间

    expire key time

    ttl key

     

     

     

     lua 安装

    https://www.runoob.com/lua/lua-environment.html

    lua语言好处

    Redis中的应用

    redis.call("set","key","value");

    local var=redis.call("get","key");

    1:减少网络开销

    2:原子操作

    执行时,其他同样的key进行操作,都无法执行

    ./redis-cli --eval lua.lua

    3:复用性

    lua脚本的安装

    1:tar -zxvf ….

    2: make linux

    3: make install

    输入lua 就可以进入控制台

     

    弱类型语言

    变量

    全局变量、局部变量

    a = 1 ; local b =2

    a==b 比较两个值是否相等

    ~= 不等于

    逻辑运算符

    and / or

    not (a and b)

     

    eval 执行脚本

     

     

     

    redis持久化策略

    RDB/AOF

    可以同时使用,如果同时使用,会优先使用AOF来还原数据

    RDB:按照规则,定时将内存的数据同步到磁盘

    触发快照情况:

    1:自己配置的快照规则

    实践:以下三者是||的关系

    save <seconds> <changes>

    save 900 1 在900s内被更改 的key的数量大于1的时候,执行快照

    save 300 10

    save 60 10000

    2:执行save或者bgsave命令

    save: 执行内存数据同步到磁盘的请求,这个操作会阻塞客户端的请求

    bgsave:后台异步执行快照操作,不会阻塞

    3:执行flushall的时候(清楚所有db里的数据)

    清除内存的所有数据,只要有规则就会执行规则

    4:执行复制的时候

     

     

    快照的实现原理

    redis会使用fork函数复制一份当前进程的副本(子进程)

     

    redis 的优缺点

    1:可能回存在数据丢失的请求(缺点)

    2:可以最大化redis的性能(优点)

     

    AOF: 每次执行命令后,将命令本身记录下来, aof会把redis执行的每一条命令追加到磁盘文件中

    默认AOF不生效,

    如何生效:

    更改conf下的appendonly yes :重启后执行对数据的变更命令,会在bin目录下生成对应的aof命令

    AOF和rdb同时开启则使用aof

    auto-aof-rewrite-percentage 100 表示当前aof文件大小超过上一次aof文件大小的百分比多少的时候会进行重写。如果之前没有重写过,以启动时的大小为标准

    auto-aof-reworite-min-suze 64mb 限制允许重写最小aof文件大小,也就是文件小于64mb的时候,不要进行优化

     

    aof重写过程是安全的

     

    同步磁盘数据

    redis每次更改数据的时候。apf机制都会将命令记录到aof文件,但是实际上由于操作系统的缓存机制,数据并没有实施写入硬盘,而是进入硬盘缓存,去刷新到保存到新文件

     

    aof安全性高,rdb数据易丢失

    // todo
    
    内存回收策略:待补充

     

    redis集群

    1:主从(从只能读取,不能操作)

    修改从redis的conf 下的slaveof

    主机可以通过 info replication 进行查看

     

    实现原理

    1: slave链接到master后,会向master发送一个sync指令

    2: master收到SYNC的时候,会做两件事

    a;执行bgsave(rdb快照)

    b:master会把新收到的修改指令存入缓冲区

    3:replconf listening-port 6379 sync

    集群的缺点:

    没有办法对master进行动态选举,如果master挂掉,那么从的也没办法选举,只能读取之前同步的数据

    复制的方式:

    1:基于rdb文件的复制(第一次链接或者重连的时候)

    2:无硬盘复制(conf配置)

    3:增量复制 (不需要发送sync命令 而是psync,记录偏移量offset)

     

     

    哨兵机制

    sentinel

     

    当主服务器挂掉是,可以通过哨兵机制,让从服务器变成激活成主的

    sentinel.conf

    配置三台sentinel

    sdown 哨兵主观

    0down客观

    redis指令

    info replication

    哨兵机制+redis主从 ====高可用

     

     

    如有错误,请邮件zs253499660@sina.com,如有更好的方法,可以推荐
  • 相关阅读:
    pt-tcp-model
    (转)从史上八大MySQL宕机事故中学到的经验
    pt-query-digest
    DNS生效时间
    Python之uuid模块
    一个IO的传奇一生
    Python之Queue模块
    利用freemarker 静态化网页
    FreeMarker教程
    模板引擎freemarker的简单使用教程
  • 原文地址:https://www.cnblogs.com/senjiang/p/13418896.html
Copyright © 2011-2022 走看看