首页 > 其他 > 详细

Redis

时间:2020-04-19 18:38:08      阅读:51      评论:0      收藏:0      [点我收藏+]

数据结构 c

  redis    0-15DB  -- key   --value( String  list  set   map  z-set)

  String  

    int/sds   sds.h  sds.c  

    二进制安全   sds   char[]  len  \0标记符  不计入len长度

  list  

    查找不方便 lpush  rpush   lpop rpop

    其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素。         

  redis> RPUSH mylist "one"   
  redis> RPUSH mylist "two"   

  redis> RPUSH mylist "three"   

  redis> LRANGE mylist 0 0    1) "one"   

  redis> LRANGE mylist -3 2   1) "one 2) "two" 3) "three"  

    3.2版本之前 zipList linkedlist
    3.2之后 quicklist 双向链表 有ziplist组成的双向链表
    消息队列
    栈
    生产者消费者模型

  hash(map) 

    key  field -value

    hget   hdel hset  hexists 

    ziplist数据量小

    hash    dict.h   dictEntry   dict  dictht(扩容)

  set  

    sadd    diff 

    intset   hashtable(key ,value(null))

  z-set

    score value 

    zadd  rank 9 baidu  8 google 

    zrange 

    跳跃表    t_zset.c   level  

    排行榜

命令

  http://redisdoc.com/index.html

  keys *   

  exists key

过期时间 

  命令 expire gupao 50  ttl gupao  presist  gupao   

     setnx( key, seconds,value)  

  原理  消极方法  

      积极方法  周期性从设置过期时间的key中选择一部分删除  如果 25%  重复执行

发布订阅

   publish  channel.mic  hello

      subscribe  channel.mic   不支持消息存储 

持久化 

  RDB  快照   fork子进程  dump.rdb 

    规则sava 900 1 或    save 300 10  或  save 60 1000  

    save 阻塞  bgsave 不阻塞  恢复快

  AOF appendonly.aof  日志文件  防止数据丢失

    重写aof文件  同时  重写缓冲数据   ;重写完成之后  重写缓冲 追加到aof 防止数据丢失

    appendfsync  (always)everysec(no)

  rdb 和aof 一起使用

内存回收策略

  allkeys-lru 

  allkeys-random

  volatile-random/lru/ttl   范围:设置过期时间的key

为什么单线程

  多线程 更好的使用cpu资源,计算  其他核心用不到   

  单线程 减少线程切换开销  瓶颈在于内存和网络部分   

  多路复用    非阻塞io  

    同步阻塞

    同步非阻塞

    异步阻塞

    多路复用

LUA 脚本  原子性   pipeline 管道模型

    批量执行减少网络开销   原子性   复用性

    redis.call(‘set‘,‘gupao‘,‘123‘)

    redis.call(‘get‘,‘gupao‘)

    eval "return redis.call(‘get‘,‘gupao‘)"

    eval "return  redis.call(‘set‘,KEYS[1],ARGV[1])"   1(key的数量) mic val;

    ./redis-cli --eval hello.lua

主从结构  

  数据同步   一致性

  选主

  配置  从节点  slaveof ip port   bind   防火墙

    info relication

  ping 命令  心跳    无磁盘复制

  内部选举(zab协议)

  外部选举(哨兵)

哨兵(raft算法 leader flower  candicate  epoch  term )

  监控master  salve 是否正常  ,master故障  选举master

  哨兵节点  订阅  master节点 channel

  连接sentiel  set 才能做故障转移

cluster  无中心化架构  

  海量数据   分片  slot16000  最小6台   3主 3从   每个都是master节点    故障转移或者新增节点    从新分片

jedis/redisson

  jedis   jedisSentinelPoll.java  jedis.java  protocal.java  jedisCluster

  jedisLock   

  redission 

  RedissionClient =  Redission.create 

  getLock

  RedissionLock   lua

分布式锁

 

缓存一致性问题  

  更新 数据库   更新 缓存  MQ  或者 补偿机制

缓存雪崩

  时间离散

缓存击穿

  null 

  key值规则 过滤  布隆过滤器  压缩 空间换时间   概率性算法  误差率;

 

Redis

原文:https://www.cnblogs.com/hoper2020/p/12732675.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!