美文网首页
redis从入门到熟练

redis从入门到熟练

作者: Chaos_YM | 来源:发表于2020-03-22 22:50 被阅读0次

    速度快:10w ops(每秒10万次读写)
    原因:在内存中;C语言开发;单线程(按优先级从前到后)
    数据结构:string,list,hash tabls,sets,sorted sets,bitmap,hyperloglog(本质字符串)

    一,redis八个特性

    1,安装和启动

    安装:

    然后进入redis-5.0.7下的src目录中,主要看6个可执行文件:
    redis-server, redis-cli, redis-benchmark, redis-check-aof, redis-check-dump, redis-sentinel
    分别对应redis服务器,redis命令行,性能测试,AOF修复,RDB修复, sentinel服务器

    启动:
    直接启动:执行redis-server,默认端口6379
    参数启动:增加参数
    配置文件启动:文件路径以命令行参数传入(生产环境推荐)

    常用配置:
    daemonize: no|yes 是否以守护进程启动,默认no
    port:端口 默认6379
    logfile:日志文件
    dir:工作目录

    2,API

    1,常用命令
    注意:单线程的redis最好不要使用耗时的命令

    keys [pattern]     # 用通配符展示key    o(n)的命令,生产环境少用,或者在从节点使用
    dbsize             # 显示key的总数
    exists key       # 判断存在  返回1/0
    del key   (get set)        # 删除键值对   del b d si 同时删除多个
    expire key seconds  # 设置过期时间
    ttl key            # 产看剩余过期时间   返回 -2 表示key不存在  返回-1表示key存在,但是没有过期时间
    persist key     # 去掉过期时间
    type key        # 返回key的数据类型
    # 以上命令 keys时间复杂度是o(n),其余都是o(1)
    
    mget,mset  # 批量存取
    

    2,数据结构,单线程
    字符串:用做缓存,计数器,分布式锁 命令:incr, decr, incrby, decrby(增减,计数)
    哈希:hget, hset, hdel
    列表:有序,可以重复

    3,其他功能

    1),慢查询

    符合慢查询条件的查询会插入到慢查询队列中(先进先出)

    生命周期
    慢查询配置一:
    slowlog-max-len,设置慢查询队列长度,超出长度,先进的元素会被舍弃,默认128,同常1000(存在内存中,断电丢失)
    慢查询配置二:
    slowlog-log-slower-than,阙值,超过这个时间会加入慢查询队列,单位微秒,默认10000,通常设置1000
    =0,记录所有,<0都不加入慢查询
    常用命令:
    slowlog get [n]:获取慢查询队列 指定条数
    slowlog len:获取队列长度
    slowlog reset:清空慢查询

    2),pipeline

    批量传输redis命令,节省网络时间开销(1次网络传输10ms级起步,redis命令微秒级)
    pipeline非原子操作,顺序执行和返回,执行中可能插入其他命令
    pipeline命令不易过多,返回数据有压力
    每次只作用一个redis节点

    3),发布订阅

    发布者publisher 订阅者subscriber (实际上都是客户端)
    消息队列(抢占式,只有一个订阅者收到)
    频道channel
    API:
    publish channel message
    subscribe [channel] 多个
    unsubscribe [channel] 多个
    psubscribe [pattern] 模式,通配符

    4),bitmap,位图

    getbit, setbit直接操作value的二进制的位
    setbit key offset value value智能位0和1,offset为设置第几位,返回值为这个位原值
    bitcount key [start end] 获取二进制位图值为一的个数

    案例:独立用户统计,节省内存


    用户统计.png 用户统计续.png

    5),hyperloglog,极小空间完成数量统计

    6),GEO,经纬度

    4,持久化

    持久化:redis数据的更新异步的保存在硬盘中
    主流方式:AOF(日志) RDB(快照)

    1),RDB

    快照:数据在某个时间点的映像(类似于拷贝)
    RDB触发机制:

    • save命令:同步命令,阻塞(数据量大会等待拷贝),如果存在老文件会替换
    • bgsave命令:异步的save,使用Linux fork函数生成子进程来执行save。fork函数有较小几率阻塞redis
    • 自动:使用save config文件,然后使用bgsave
    • 其他触发机制:shutdown,全量复制,主从复制
    save与bgsave.png

    2),AOF

    RDB的缺点:耗时,耗性能;不稳定,易丢失;
    aof写命令的日志会先写入缓冲区,然后在进入硬盘
    缓冲区到硬盘的三种策略:

    • always 一直同步写入,每条命令同步一次
    • everysec 每秒同步一次
    • no 以操作系统特性自动操作


      对比

    重写:
    命令过多导致AOF文件过大,处理难;为了减小文件大小和加快恢复速度。
    原理:把过期的命令,可以覆盖的命令优化掉
    实现:

    • bgrewriteaof命令 启用fork进程
    • 配置文件:auto-aof-rewrite-min-size 重写的文件尺寸标准,达到即触发重写;auto-aof-rewrite-percentage AOF文件增长率,每次重写后,文件增加了多少后再次触发重写

    3),AOF对比RDB,与选择

    todo:此部分写完主从,再来补充。。。。。。


    对比

    相关文章

      网友评论

          本文标题:redis从入门到熟练

          本文链接:https://www.haomeiwen.com/subject/hhiklhtx.html