REDIS基础要点
简述: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机制,父进程,子进程
Redis之穿透,雪崩:
发生前提:发生了大量并发请求
击穿问题:如果大量请求key不在业务范围内且绕过service和Redis到达db,导致db引起压力的问题
雪崩问题:大量的key同时过期或不存在cache,导致请求全部打到db,,导致db引起压力的问题
解决方法:
击穿的解决:增加布隆过滤器,无效的key拦截掉
雪崩的解决:
Redis集群模式:
AKF拆分原则:
集群模式:
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基础要点的更多相关文章
- CORS基础要点:关于dataType、contentType、withCredentials
事实上,面试时我喜欢问跨域,因为多数开发者都知道它并且常用,而我希望能从面试者的回答中知道他在这个问题的深入程度,进一步看看面试者研究问题的思维方式及钻研精神,然而确实难到了很多人,当然这也不是面试通 ...
- windows下使用redis,Redis入门使用,Redis基础命令
windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...
- [.net 面向对象程序设计深入](14)Redis——基础
[.net 面向对象程序设计深入](14)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...
- linux redis基础应用 主从服务器配置
Redis基础应用 redis是一个开源的可基于内存可持久化的日志型,key-value数据库redis的存储分为内存存储,磁盘存储和log文件三部分配置文件中有三个参数对其进行配置 优势:和memc ...
- [.net 面向对象程序设计深入](36)Redis——基础
[.net 面向对象程序设计深入](36)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...
- mysql主从复制、redis基础、持久化和主从复制
一.mysql(mariadb)基础 1.基础命令(centos7操作系统下) 1.启动mysql systemctl start mariadb 2.linux客户端连接自己 mysql -uroo ...
- Redis基础用法、高级特性与性能调优以及缓存穿透等分析
一.Redis介绍 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用.Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hype ...
- Redis基础知识补充及持久化、备份介绍(二)--技术流ken
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...
- Spring-Boot之Redis基础
Spring-Boot之Redis基础 准备 Redis下载地址:github.com/MSOpenTech/redis/releases Redis数据库的默认端口号是 6379 开启Redis服务 ...
- mongodb,Mysql,redis基础教程
数据库基础 1:mongodb基础教程 1:pymongo基础教程 2:Mysql基础教程 3:redis基础教程
随机推荐
- Vuex极速入门
01.什么是Vuex? 1.1.为什么需要状态管理? 在复杂的系统中,我们会把系统按照业务逻辑拆分为多个层次.多个模块,采用组件式的开发方式.而此时不同模块.父子模块之间的通信就成了一个问题. 为了解 ...
- Windows 安装 Zookeeper 详细步骤
Windows 安装 Zookeeper 详细步骤 一. Zookeeper 安装包下载 1.官网地址 Zookeeper官网 2.安装包下载 这里选择目前的稳定版 3.6.3 下载 可以看到有两个选 ...
- 7、解决swagger测试接口报错:TypeError: Failed to execute ‘fetch‘ on ‘Window‘: Request with GET/HEAD method cannot have body
一.Swagger报错: 1.报错类型: TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method ...
- GC耗时高,原因竟是服务流量小?
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 最近,我们系统配置了GC耗时的监控,但配置上之后,系统会偶尔出现GC耗时大于1s的报警,排查花了一些力气,故在这里 ...
- group by 语句怎么优化?
一.一个简单使用示例 我这里创建一张订单表 CREATE TABLE `order_info` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', `or ...
- 数据预处理时为什么要使用OneHot编码?
什么是LabelEncoder(整数编码) 整数编码 将一列文本数据转化成数值,即列中的每一个特征都通过一个整数来表示.例如,[red, blue, red, yellow] = [0,2,0,1]. ...
- 二十三、图的遍历(BFS和DFS)
一.概念 图的遍历(Traversing Graph)从某一顶点出发,访问图中所有顶点,且使每一顶点仅被访问一次.与树的遍历不同的是,图的遍历需要处理两种特殊情况:一是从某一顶点出发进行遍历时,可 ...
- LeetCode-343. 整数拆分 - 题解分析
题目来源 343. 整数拆分 题目详情 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化. 返回 你可以获得的最大乘积 . 示例 1: 输入: ...
- cordova第三方插件的创建,修改以及调试指南---真机调试,浏览器调试
cordova使用以及真机调试,浏览器调试 创建插件 点击参考此文-- 超详细手把手教你cordova开发使用指南+自定义插件 插件修改注意事项--很重要 每次对自己代码目录里面任何内容进行修改后 都 ...
- windows11预览版装WSA心得
这两天心血来潮想要装个WSA(安卓windows子系统),原来一直用的安卓模拟器(mumu啊蓝叠啊逍遥啊),但感觉像wsa这种安卓系统与主系统融合的模式更带感,于是开始了我艰苦的安装(瞎捯饬)之路 我 ...