01Redis前无古人后无来者
2023-10-08 09:30:00   0  举报             
     
         
 01Redis前无古人后无来者
    作者其他创作
 大纲/内容
 计算向数据移动
  线程/进程
  c
  B+T
  同上
  介绍
  8x
  多少颗cpu启动多少个进程worker
  更老的数据
  不支持拉链只有一个dump.rdb
  WASEWOULDBOLCK
  client
  sendfile
  RDB
  1
  8:00  8:30
  mmap
  yum install man  man-pagessocketfd nonblock同步非阻塞   NIO如果有1000fd代表用户进程轮询调用1000次kernel成本问题
  内存的读写速度是硬盘的多少倍DDR3内存读写速度大概10G每秒(10000M)固态硬盘速度是300M每秒,是内存的三十分之一机械硬盘的速度是100M每秒,是内存的百分之一 DDR4内存读写速度大概50G每秒(50000M)固态硬盘速度是300M每秒,是内存的二百分之一机械硬盘的速度是100M每秒,是内存的五百分之一
  List
  映射函数
  最终也是一个纯指令的日志文件
  架构师
  如果开启了AOF只会用AOF恢复
  value
  实时性的
  b
  key
  B
  缓存常见问题:击穿雪崩穿透一致性(双写)技术是易与人的使用!理论是极其复杂!
  过期判定原理:1,被动访问时判定2,周期轮询判定(增量)*,目的,稍微牺牲下内存,但是保住了redis性能为王!!!!
  fd 9
  链表
  查询就有可能被过滤掉
  0
  redis中,RDB和AOF可以同时开启
  redis全网最权威的讲解
  redis: fork()
  https://db-engines.com/en/架构师:技术选型技术对比
  read  fd8read fd9
  geo
  集合操作相当多
  正反向索引
  type:value
  元素2
  内存
  x11
  data page4k
  JVM  c
  存储层:1,快照/副本2,日志
  SAPHANA内存级别的关系型数据库2T
  fd 8
  kafka
  b=46
  file.txt
  4.0以后
  时点性
  redis
  明确:比如,关机维护
  String
  数据在磁盘和内存体积不一样
  1,会随着访问延长?不对!!2,发生写,会剔除过期时间3,倒计时,且,redis不能延长4,定时5,业务逻辑自己补全
  x3
  丢失数据少
  安装
  fd3
  read  fd9
  x22
  sub
  setgetappendsetrangegetrangestrlen
  文件里数据data.txtgrepawkjava随着文件变大,速度变慢为什么硬盘i/o成为瓶颈
  client实现bloom算法自己承载bitmap
  setbit k1 1 1setbit k1 7 1setbit k1 9 1字符集  ascii其他一般叫做扩展字符集扩展:  其他字符集不在对ascii重编码0xxxxxxx你自己写一个程序,字节流读取,每字节判断
  1:exec
  client1
  cpu只有1颗JVM: 一个线程的成本  1MB1,线程多了调度成本CPU浪费2,内存成本
  9w
  磁盘
  网卡
  数值
  redis的写操作记录到文件中
             01 02 03 04sean    0    1   0   1   010101json     0    1   0   1   011111每用户46B *  用户数 10000000  =460 000 000
  常识:磁盘:1,寻址:ms2,带宽:G/M内存:1,寻址:ns2,带宽:很大秒>毫秒>微秒>纳秒  磁盘比内存在寻址上慢了10W倍I/O buffer:成本问题磁盘与磁道,扇区,一扇区 512Byte带来一个成本变大:索引4K  操作系统,无论你读多少,都是最少4k从磁盘拿
  read(fd3)
  fork创建子进程
  redisbitmap
  物理内存左小右大不随命令发生变化zrangzrevrang
  A
  a=3
  数据库:表很大,性能下降?如果表有索引增删改变慢查询速度呢?1,1个或少量查询依然很快2,并发大的时候会受硬盘带宽影响速度
  -2
  read(fd)
  nil
  对field进行数值计算场景:点赞,收藏,详情页
  setbitbitcountbitposbitop
  管道:1,衔接,前一个命令的输出作为后一个命令的输入2,管道会触发创建【子进程】echo $$  |   moreecho $BASHPID |  more$$ 高于 |  
  a3
  Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
  缓存常见问题,面试回答思路
  bitmap
  0 1 2 3 4 5 6 7        8 9 10 11
  x45
  阻塞模式
  3天之内
  b=4
  2:exec
  权重/聚合指令
  fd4
  队列反向命令
  轮询发生在用户空间
  1:mutli
  redis作为数据库/缓存的区别缓存!!!!
  单机自己:持久化
  删除抵消的命令合并重复的命令
  forkcow8点创建子进程父子进程对数据的修改,对方看不到
  业务运转
  应用进程recv()recv()recv()recv()处理数据
  save 900 1save 300 10save 60 10000dbfilename dump.rdbdir /var/lib/redis/6379 
  V
  redis缓存解决数据的读请求快
  元素1
  write (fd4)
  http://download.redis.io/releases/redis-5.0.5.tar.gz
  lists
  kernel
  hashmap(k-v)
  返回成功指示
  rediszset
  插曲
  配置文件中给出bgsave的规则: save这个标识
  弊端,体量无线变大》  恢复慢
  Set
  AOF是一个混合体利用了RDB的快利用了日志的全量
  AOF中包含RDB全量,增加记录新的写操作
  业务逻辑
  共享空间
  epoll
  抢购,秒杀,详情页,点赞,评论规避并发下,对数据库的事务操作完全由redis内存操作代替
  incr
  -1
  client连接
  kafkajvm
  head
  内存是有限随着访问的变化,应该淘汰掉冷数据
  redis里的数据怎么能随着业务变化,只保留热数据,因为内存大小式有限的,也就是瓶颈
  1,穿透了,不存在2,client,增加redis中的key,value标记3,数据库增加了元素5,完成元素对bloom的添加
  2:del k1
  StringByte
  redis运行了10年开启了AOF10年头,redis挂了1,AOF多大:很大,10T*,恢复,会不会溢出2,恢复要多久:恢复用5年
  内存多大呢?maxmemory <bytes>maxmemory-policy noevictionLFU   碰了多少次LRU  多久没碰他
  集群
  计算解析json
  a=38
  2:mutli
  元素3
  select
  nginx
  1:get k1
  rediszookeeperES2到3周
  select (1000fds)
  x7
  将老的数据RDB到aof文件中将增量的以指令的方式Append到AOF
  centos 6.xredis 官网5.x
  系统调用
  缓存数据不重要不是全量数据缓存应该随着访问变化热数据
  redis进阶使用
  主从复制
  消费者
  01000000
  非阻塞模式
  redis单进程
  create  epfd
  spop取出1个
  redis作为缓存
  分值
  h
  tail
  0100  0010
  db.filea=3b=6时点混乱!
  sorted_set
  随机事件
  bitmaps
  hashes
  4.0以前
  爱做不做。。。过滤器:bloom布隆过滤器counting bloomcukcoo布谷鸟过滤器
  stream
  应用进程recv()处理数据
  service
  概率解决问题不可能百分百阻挡>1%1,你有啥2,有的向bitmap中标记3,请求的可能被误标记4,但是,一定概率会大量减少放行:穿透5,而且,成本低
  fork()
  重写
  【无序】&&【随机性】放入的多少不同,元素存储的顺序不同去重
  苹果
  内核无数据准备好无数据准备好无数据准备好数据准备好复制数据            完成复制
  字符类型
  数组
  value没有类型的概念
  copy on write:内核机制写时复制创建子进程并不发生复制创建进程变快了根据经验,不可能父子进程把所有数据都改一遍玩的是指针
  db.file8:00
  想让他们怎排序?名称含糖量大小价格吃货热度
  原点:redis是内存数据库
  索引
  hdfs,fsimage+edits.log让日志只记录增量合并的过程
  抽奖:10个奖品用户:  <10   >10中将:是否重复解决家庭争斗!
  折中缓存memcachedredis2个基础设施1,冯诺依曼体系的硬件2,以太网,tcp/ip的网络
  client实现bloom算法
  AOF
  skip list跳跃表
  kernel  fd8 buffer
  Mysql
  5V场景
  SRANDMEMBER  key  count正数:取出一个去重的结果集(不能超过已有集)负数:取出一个带重复的结果集,一定满足你要的数量如果:0,不返回
  排序是怎么实现的增删改查的速度?
  redis:6379
  encoding
  memcachedkey,value
  appendonly yesappendfilename \"appendonly.aof\"auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbappendfsync alwaysappendfsync everysecappendfsync no 
  自学先宽,后深花钱老师具备  先宽后深说的出来
  db.filea=3b=4时点正确8
  redis:6380
  1,速度:快2,空间:小
  香蕉
  2-1
  日志,优点如果能保住,还是可以用的结果:设计一个方案让日志,AOF足够小
  把你有的添加进去
  数值类型
  缓存:数据可以丢  急速!数据库:数据绝对不能丢的  速度+持久性掉电易失!redis+mysql  》  数据库  《 不太对
  类型不是很重要redis的server中对每种类型都有自己的方法index()lpop
  红黑树
  2,京东就是你们的,618做活动:送礼物大库备货多少礼物假设京东有2E用户僵尸用户冷热用户/忠诚用户活跃用户统计!随即窗口比如说 1号~3号  连续登录要     去重setbit 20190101   1  1setbit 20190102   1  1setbit 20190102   7  1bitop  or   destkey 20190101  20190102BITCOUNT  destkey  0 -1 
  插曲因为socket在这个时期是blockingBIO
  鸭梨
  元素
  bgsave
  复制
  redis的持久化
  save
  ref:2
  创建子进程的速度应该是什么程度如果父进程是redis,内存数据比如10G1,速度2,内存空间够不够
  file
  发布订阅
  l
  2
  弊端
  阻塞,单播队列FIFO
  pub
  linux
  ctl add  del  sfdwait()
  sets
  1-2
  kernel的epoll同步,非阻塞多路复用
  sorted  sets
  栈同向命令
  多路复用NIO用户态内核态fd相关数据考来考去
  1:watch k1
  DBservice
  redisbloom.sobitmap
  key的有效期
  集合操作并集,交集
  优点:类似java中的序列化恢复的速度相对快
  client2
                      u1  u2  u3 20190101    0     1   0      00010020190102    1     1   0    10101
  0-3
  0100  0001
  二进制  安全字节流*字符流
  布隆过滤器HyperLogLog
  随机   造层3类   平衡树平均值先对最优
  单进程,单线程,单实例并发很多的请求如何变得很快的呢?
  a
  内核无数据准备好⬇等待⬇       ⬇数据准备好复制数据  ⬇  ⬇将数据⬇        复制到⬇        用户空间⬇             ⬇完成拷贝
  持久化
  数据库全量
  关系型数据库建表:必须给出schema类型:字节宽度存:倾向于行级存储
  历史性
  e
  使用linux的时候:父子进程父进程的数据,子进程可不可以看得到?常规思想,进程是数据隔离的!进阶思想,父进程其实可以让子进程看到数据!linux中export的环境变量,子进程的修改不会破坏父进程父进程的修改也不会破坏子进程
  read  fd8
  写操作会触发IO
  丢失数据相对多一些时点与时点之间窗口数据容易丢失8得到一个rdb,9纲要洛一个rdb,挂机了
  使用
  memcache返回value所有的数据到clientserver  网卡IOclient要有你实现的代码去节码
  多路复用NIO
  xuk: redis本身不是单线程,他处理用户数据(用户请求)是单进程单线程的 
  字符串
  “顺序”性每连接内的命令顺序
  实操:安装  install
   
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 