简述:redis 单实例,单进程,当线程处理用户请求数据,基于内存对数据处理。Redis默认分为0-16号库,每个库互相隔离(数据不共享)

基础复习:

1,系统中的每个进程对应有一个fd,通过网卡连接系统的每个连接会产生一个fd

2,一个进程会有自己内存工作空间称之为用户空间,kernel工作空间称为内核空间,进程和kernel交互会发生内存拷贝

系统内核Nio处理的发展历程:

Redis快速原因:

     1,基于内存,避免了磁盘IO性能影响
     2,使用kernel epoll机制,减少内核态用户态之间频繁调用
     3,单线程“顺序”处理client请求避免多线程锁的问题

Redis Value Type:

Strings,基本操作 set ,get,append,strlen,setrange,getrange

(1)set k1 val1 [nx/xx]  //nx不存在才能创建,已存在则失败 ,xx已存在才更新value

(2)string包含数值类,可以对数值类value进行直接操作  incr k (+1),incrby k 50(+50) decr k2(-1) decrby 3(-3)

(3)mset k1 v1 k2 v2 //批量创建  mget k1 k2 //批量获取

(4)expire k1 5 //设置key有效时间5s  set k1 20 ex 5 //创建时指定key的时间    ttl k1  //查询k1剩余时间

(5)getrange k1 2 5 //取出索引2-5的内容  setrange k1 5 tatata  //指定索引范围设置内容

 bitmap: setbit k1 [position] [bitvalue]
 bitpos k1 [bitvalue] [start][end]//在指定字符范围查找,bitvalue首次出现位置
 bitcount k1 [start][end]//在指定字符范围查找1 count

 案例:一,统计用户登录400bit,1bit 1day
 setbit  k1 [day], 1   count k1
  二,统计活跃用户(去重处理)日期key,按位或计算处理
 set 20190101 1 1 , set 20190101 7 1 ,set 20190102 1 1
 bitop or destkey 20190101 20190103
 bitcount destkey 0 -1

Lists,基本操作 rpush, lpush,lrange,rpop,可作为栈,队列,数组,阻塞/插队

(1)rpush k1 a,b,c   lpush first //左边为head,右边为tail,(first a b c)

(2)lrange k1 0 -1  //正序输出  rrange //倒序输出

(3)ltrim k1 [start] [end]  //保留前N条数据,剔除老数据

(4)brpop k1 [seconds]//阻塞提取元素,0为一只等待,其它超时返回

Hashes,基本操作 hmset hmget hget hincby,用于点赞,收藏,详情

(1)hmset  person:100 name tom sex man birth 1998-01-01
(2)hget person:100 name//获取单一属性值    hgetall //获取全部属性名和值
hmget person:100 name sex birth //只获取属性值

Sets, 无序唯一,随机,用于抽奖,打标签

(1)sadd k1 v1 v2 v3 //添加元素   smembers  k1//查询元素   sismember k1元素是否存在
(2)sinterstore kdest k1 k2 //存储交集结果,减少io输出(sinte会产生IO结果输出)
    sunionrestore   //并集合结果存储
    srandmember   //整数,取出去重结果(范围内)负数,重复结果集满足数量

Sorted set,唯一且按score排序  如:a.score>b.score 则 a>b 若score相同则按key的字典序处理

  常用操作,
  zadd k1 score v1 //添加   zrange k1 0 -1//正序  zrevrange k1//倒序
  zrange k1 0 -1 withscores//带score值输出
  zrangebyscore k1 //筛选匹配区间元素
  zremrangebyscore k1 [start score][end score]//移除区间内的元素

索引:redis支持正向索引与反向索引,反向-1表示最后,-2表示最后一位-1

redis过期判定:

  1,被动判定:当过期key达到过期后暂不清理,client下次访问这key在处理

  2,主动判定:每隔一段时间随机抽取20,发现已过期key删除,如此次已过期的key超过样本量的25%,则继续重新随机,查找,删除,直到样本内过期key低于25%

redis持久化:

linux fork机制,父进程,子进程

Linux父进程fork子进程后,子进程会包含父进程此时内存里数据,后续当父进程数据发生修改子进程不受影响。同样子进程内数据变化也不影响父进程数据,即两者之间数据隔离。
fork cow机制:当内存数据发生变化,系统不会直接修改原值,将要修改的数据copy一副到新地址后再修改新值
 
 注: fork进程速度快,省内存!
1,创建子进程并不会发生内存复制,只不过是两者的内存指向同一个内存地址
2,当父进程内数据发生改变,父进程会使用cow机制,子进程内数据并不会受到影响,保证了时点数据完整性
 

Redis之穿透,雪崩:

发生前提:发生了大量并发请求

击穿问题:如果大量请求key不在业务范围内且绕过service和Redis到达db,导致db引起压力的问题

雪崩问题:大量的key同时过期或不存在cache,导致请求全部打到db,,导致db引起压力的问题

解决方法:

  击穿的解决:增加布隆过滤器,无效的key拦截掉

  雪崩的解决:

  1,非一致整点数据,使用随机数使过期时间分散
  2,时点性数据,需要web service辅助(延时处理,限制请求进入数量)

Redis集群模式:

  AKF拆分原则:

    X:全量镜像,解决可用性问题
    Y:业务功能拆分,解决压力问题
    Z:数据拆分,解决容量问题
 

  集群模式:

  1,主从复制:(master-slave model)

集群中容量问题:当数据业务无法拆分或大一业务数据量过多会导致redis扩容问题

解决方案:

  (1)哈希取模,缺点:模数值固定影响扩展

  (2)一致性哈希,环形hash,虚拟节点,解决数据倾斜

  2,无主模型(分片):

  (1)data slot:通过hash算法将数据分散到集群中的每个节点上,即数据分制
  (2)client随机连接Redis节点,若key在此节点则处理,如果slot在其它节点则redirect到slot节点地址去处理
  (3)如集群中某个节点负责的slots无法提供服务则导致整个集群无法对外服务,所以备份节点需要多台

 

  Redis 延迟问题: 

  不合理使用命令和数据结构:
    当数据量达到一定级别时,某些命令的执行就会花费大量时间,比如对一个包含上万个元素的 hash 结构执行 hgetall 操作。对于键值较多的 hash 结构可以使用 scan 系列命令来逐步遍历,而不是直接使用 hgetall 来全部获取。
  建议对于键值较多的 hash 结构可以使用 scan 系列命令来逐步遍历,而不是直接使用 hgetall 来全部获取。发现大对象,redis-cli -h {ip} -p {port} --bigkeys 持续采样,实时输出当时得到的 value 占用空间最大的 key 值

  持久化阻塞:当我们开启AOF持久化功能时,文件刷盘的方式一般采用每秒一次,后台线程每秒对AOF文件做 fsync 操作。当硬盘压力过大时,fsync 操作需要等待,直到写入完成

 

REDIS基础要点的更多相关文章

  1. CORS基础要点:关于dataType、contentType、withCredentials

    事实上,面试时我喜欢问跨域,因为多数开发者都知道它并且常用,而我希望能从面试者的回答中知道他在这个问题的深入程度,进一步看看面试者研究问题的思维方式及钻研精神,然而确实难到了很多人,当然这也不是面试通 ...

  2. windows下使用redis,Redis入门使用,Redis基础命令

    windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...

  3. [.net 面向对象程序设计深入](14)Redis——基础

    [.net 面向对象程序设计深入](14)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...

  4. linux redis基础应用 主从服务器配置

    Redis基础应用 redis是一个开源的可基于内存可持久化的日志型,key-value数据库redis的存储分为内存存储,磁盘存储和log文件三部分配置文件中有三个参数对其进行配置 优势:和memc ...

  5. [.net 面向对象程序设计深入](36)Redis——基础

    [.net 面向对象程序设计深入](36)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...

  6. mysql主从复制、redis基础、持久化和主从复制

    一.mysql(mariadb)基础 1.基础命令(centos7操作系统下) 1.启动mysql systemctl start mariadb 2.linux客户端连接自己 mysql -uroo ...

  7. Redis基础用法、高级特性与性能调优以及缓存穿透等分析

     一.Redis介绍 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用.Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hype ...

  8. Redis基础知识补充及持久化、备份介绍(二)--技术流ken

    Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...

  9. Spring-Boot之Redis基础

    Spring-Boot之Redis基础 准备 Redis下载地址:github.com/MSOpenTech/redis/releases Redis数据库的默认端口号是 6379 开启Redis服务 ...

  10. mongodb,Mysql,redis基础教程

    数据库基础 1:mongodb基础教程 1:pymongo基础教程  2:Mysql基础教程 3:redis基础教程

随机推荐

  1. 前端h5适配刘海屏和滴水屏

    前端适配苹果刘海屏,安卓刘海屏水滴瓶 其实w3c早就为我们提供了解决方法(CSS3新特性viewport-fit) 在w3c.org官方给出的关于圆形展示(Round display)的标准中, 提到 ...

  2. Hadoop详解(06) - Yarn平台架构和资源调度器

    Hadoop详解(06) - Yarn平台架构和资源调度器 Yarn平台架构 Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程 ...

  3. python之路56 dajngo最后一天 csrf跨站请求 auth模块登录注册方法

    csrf跨站请求伪造 钓鱼网站:模仿一个正规的网站 让用户在该网站上做操作 但是操作的结果会影响到用户正常的网站账户 但是其中有一些猫腻 eg:英语四六级考试需要网上先缴费 但是你会发现卡里的钱扣了但 ...

  4. linux 基础之输入输出重定向

    输入输出重定向 输出重定向 正确命令 > 文件 (覆盖) 正确命令 >> 文件(追加) 错误命令 2> 文件(覆盖) 错误命令 2>>文件(追加) 命令> 文 ...

  5. odoo中的字段创建后,不可以编辑

  6. Java基础1-1-4—java基础语法(循环+随机数)

    4.循环+随机数 4.1 循环语句-for循环 循环 特征:1.重复做某件事情 2.具有明确的开始和停止标志 for循环格式介绍 public static void main(String[] ar ...

  7. 初始rust

    安装rust 访问rust 按照步骤操作即可,安装很慢,请耐心等待 安装成功之后,请注意在命令行测试 rustc --version,cargo --version看看输出版本信息是否正常,如果不正常 ...

  8. 结构型模式 - 装饰器模式Decorator

    1.你这老母亲的,我哪来的广告? 学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 装饰器模式的定义与特点 装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下 ...

  9. 如何避免让线程摸鱼,请用异步技术 async await 拿捏他~

    发现问题 你点了外卖后,会一直不做其它事情,一直等外卖的到来么? 当然不会拉! 我们来看看代码世界的: public void Query(){ // 当前线程 向 数据库服务器 发起查询命令 // ...

  10. you-get下载B站视频

    you-get下载B站视频 库存 you-get介绍 https://github.com/soimort/you-get you-get是一个命令行工具,可以下载知名网站的视频 支持的网站有  ht ...