




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录Redis 使用场景及相关面试题2基本类型(5种数据类型)2String2HASH(map)4List5Set(去重)6ZSet(sorted set)7Redis特性8Redis 持久化方式有哪些8为什么单线程redis 还这么快9Redis堵塞问题和性能监控9慢查询日志10redis通过pipeline提升吞吐量11发布/订阅及高级特性13Hyperloglog13GEO地理信息存储15Lua(撸啊)脚本与redis17redis集群模式18Redis 使用场景及相关面试题Redis全称? Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:RemoteDictionaryServer(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。基本类型(5种数据类型)StringString 类型是包含很多种类的的特殊类型(字节串,整数,浮点),并且是二进制安全的,比如对序列化对象进行存储,图片,进行二进制存储,比如一个简单字符串,数值等。常规操作l Set和Get方法l setnx( not exist)l setex(expired) 设置有效期(psetex)l setrange 替换字符串l mset和mget 一次性获取或设置多个值l getset 返回旧值设置新值l appendname 字符串追加方法l strlenname 获取字符串长度面试题 redis key value最大值?一个key或是value大小最大是512Mmemcached 和redis区别?memcached key最大长度250个字符,value最大是1M的(默认情况)分布式锁基本原理setnx来争抢锁再用expire给锁加一个过期时间防止锁忘记了释放。两个命令不具备原子性计数相关操作l incr和decr 对某一值进行递增递减(可以用来计数)l incrby和decrby对某一值进行制定长度递增递减l incrbyfloat 对浮点数操作HASH(map) 应用场景:面试题比如我们要一个用户的信息存储内存,包含以下信息:Key 用户IDvalue用户对象包含姓名name,年龄age,生日birthday 等信息方案1 任何对象都可以转字符串,也可以采用json序列化(程序控制)方法2 Map 结构 (类似列数据库)Hash 它特别适合存储对象,相比较而言,将一个对象存在hash类型里比存String类型里占用内存空间更少,并方便存储整个对象l hset和hget hmset(批量)l hsetnxl hincrby和hdecrby 递增和递减l hexists 存在返回,不存在返回0l hlen 返回集合所有键数值l hdel 删除制定fieldl hkeys 返回所有字段l hvals 返回所有value值l hgetall 返回所有key和valuehset 001 name zhangsan1hmset 001 name zhangsan2 age 18 birthday 20010121HGET 001 namehgetall 001List利用Lists的push的操作,将任务存储在list中,然后工作线程再用pop操作将任务取出进行执行。List 类型是链表结构的集合,常用于存储任务信息,最近浏览过的文章,常用联系人,主要有pop和push功能l lpush/rpop 从头部加元素l rpush/lpop 从尾部加元素l linsert 插入元素l lset 将指定下标的元素替换掉l lrem 删除元素 返回删除个数l ltrim 保留制定key 的值范围内的数据l lpop 从list头部删除元素,并返回删除元素l rpop 从list尾部删除元素,并返回删除元素l rpoplpush 从尾部删除元素 在从头部加入元素(内部循环)l lindex 返回key的list中index位置元素l llen返回元素个数l/?cu=true&utm_source=baidu-search&utm_medium=cpc&utm_campaign=t_262767352_baidusearch&utm_term=62517444570_0_8111d730865b4308b95656e518b8c6acSet(去重)对集合我们可以去交集(SINTERSTORE),并集(SUNIONSTORE),差集(SDIFFSTORE)。l sadd 添加l srem 删除l spop 随机返回删除的key(弹出一个元素)l sdiff 返回俩集合不同元素l sdiffstore 返回不同元素存在另一个集合l smembers 查看集合元素l smove 从一个set集合移到另一个set集合中(相当于剪切复制)l scard 查看集合里元素个数l srandmember 随机返回一个元素l sismember 判断某元素是否为集合中元素(返回1代表是集合中元素,返回0则不是)实际业务场景可以满足 朋友圈共同好友ZSet(sorted set)ZSet 有序集合 (有序且唯一)内部跳跃表实现的l zadd 添加l zrem 删除l zincrby 以制定值去自动减少或增加l zrangebyscore找到制定区间范围的数据l zremrangebyrank删除1到1l zremrangebyscore删除制定需要l zcard 返回集合里所有元素个数l zcount 返回集合中score在给定区间的数量排行榜 延迟队列返回排序集合ZRANGE game 0 -1返回集合及分数ZRANGE game 0 -1 WITHSCORES根据分数范围获取集合ZRANGEBYSCORE game 0 1倒序ZREVRANGERedis特性Redis 持久化方式有哪些redis是一个支持持久化的内存数据库,也就是redis经常将内存中的数据同步到硬盘来保证持久化l snapshotting (快照) 默认方式 将内存中数据以快照方式写入二进制文件中,默认dump.rdbl append-only file(缩写 aof)的方式-推荐,由于快照方式在一定时间间隔做一次,有可能发生数据丢失情况,aof方式比快照有更好的持久化性,RDB 是默认持久化方案,最大好处,基于快照,备份简单,单个文件,不好地方,redis发生故障,最后几秒数据丢失 进程 forkAOF 特点,写一条redis然后写日志,好处保证数据不丢失,不好地方,数据规模超大时候,磁盘会有卡顿。面试题Redis 支持同时开启 RDB 和 AOF,系统重启后,Redis 会优先使用 AOF 来恢复数据,这样丢失的数据会最少,也可以全部关掉。持久化交给数据库在架构设计中,有“分流”一招,说的是将处理快的请求和处理慢的请求分离来开 这些快的放在一个线程中搞定,而持久化,持久化、Master-slave同步数据这些耗时的操作就单开一个进程来处理,不要慢的影响到快的; 既然需要使用keys这些耗时的操作,那么我们就将它们剥离出去,比如单开一个redis slave结点,专门用于keys、sort等耗时的操作,这些查询一般不会是线上的实时业务,查询慢点就慢点,主要是能完成任务,而对于线上的耗时快的任务没有影响;为什么单线程redis 还这么快(1) 绝大部分请求是纯粹的内存操作,非常快速(做过测试没?)(2) 采用单线程,避免了不必要的上下文切换和竞争条件, 原子性保证关键 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块仍用了多个线程(例如持久化模块)(3) 非阻塞IO - IO多路复用,这样提高了redis的吞吐量。“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗) 基于操作系统epoll实现的 (4) Redis的瓶颈最有可能是机器内存的大小或者网络带宽,还有些操作不当造成的堵塞用于记录执行时间超过给定时间的命令请求,可以用来监视和优化查询速度Redis堵塞问题和性能监控(1) Redis的事件循环在一个线程中处理,作为一个单线程程序,重要的是要保证事件处理的时延短,这样,事件循环中的后续任务才不会阻塞; 当redis的数据量达到一定级别后(比如20G),很多操作对性能的影响尤为严重;(2) 耗时长的命令造成阻塞 keys、sort,smembers 时间复杂度为O(N), N 为数据库中 key 的数量。当数据库中的个数过大(上亿),这个命令会造成读写线程阻塞数秒;/set/sadd.html(3)持久化造成的阻塞AOF / RDB慢查询日志redis通过pipeline提升吞吐量从两个图的对比中可看出,普通的请求模型是同步的,每次请求对应一次IO操作等待;而Pipeline 化之后所有的请求合并为一次IO,除了时延可以降低之外,还能大幅度提升系统吞吐量。代码演示发布/订阅及高级特性 面试中有的还会问,你知道redis可以做发布订阅吗? dubbo的注册中心除了Zookeeper也可以Redis如果和面试官聊开了,Redis 4 还引入了名为 stream 流处理的新数据类型和对应的命令,野心勃勃想替代流处理中间件(kafka)Hyperloglog大数据应用场景中最常见的一个问题便是基数估算,而在进行基数估算时遇到的问题主要是内存需求以及后期数据合并处理等。什么是基数统计呢,要明白这个词本来就区别于个数。比如说一个集合0, 1, 3, 3, 4, 5,其基数是5,而个数是6。因为3重复出现了两次。基数常用去重统计。有些场景,上亿访问去重ip统计,可以用HyperLogLogGEO地理信息存储返回两个人的距离Lua(撸啊)脚本与redis redis原子性操作 针对一个jvm下 多线程也可以实现原子性,如果,程序是分布式部署,在多jvm下同样的redis操作无法保证原子性操作,当然我们可以使用分布式锁,来保证原子性操作, lua脚本与redis结合使用可以实现原子性操作(主要实现了redis复合性操作是原子性的,lua脚本同一时间点肯定只有一个单线程能访问我们的lua脚本),避免多线程并发时出现数据的不一致的问题,例如我们简单抢票,抢红包等场景lua 是一个小巧的脚本语言。是由c编写的 代码简洁优美,几乎所有操作系统平台都可以编译,运行,一个完整的lua解释器不过200k,在目前所有脚本引擎中,lua的速度最快,这一切都决定了lua是作为嵌入式脚本的最佳选择。java如何使用lua脚本我们可以使用redis加lua的方式,实现一个完整的事物,保证事物的原子性 我们使用jedis下的scriptload方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年生物医药行业创新研发技术与市场前景报告
- 2025年环境保护行业环境保护技术前景研究报告
- 2025年可穿戴科技产业市场前景展望报告
- 2025年汽车行业自动驾驶技术应用前景探讨报告
- 2025年机械制造行业智能制造技术发展前景研究报告
- 2025年人工智能助理行业AI助手应用与市场前景研究报告
- 2025年家居建材行业环保建材市场前景研究报告
- 国家事业单位招聘2025国家自然科学基金委员会招聘拟聘(二)笔试历年参考题库附带答案详解
- 云南省2025云南农业大学第一批招聘编制外人员(12人)笔试历年参考题库附带答案详解
- 2025贵州成黔集团高校毕业生招聘36人笔试参考题库附带答案详解
- 产品品质及售后无忧服务承诺书3篇
- 2025年第11个全国近视防控宣传教育月活动课件
- 二年级防溺水教案
- 2025年养老产业市场营销策略调整分析报告
- 部编版二年级道德与法治上册第4课《欢欢喜喜庆国庆》精美课件
- 潍坊市2026届高三开学调研监测考试生物试题及答案
- 三维波动方程双变网格有限差分并行模拟方法:理论、实践与优化
- 好风起二部合唱简谱致远音乐
- 异姓兄妹结拜协议书范本
- 膝关节炎科普知识课件
- 2025广西公需科目考试答案(3套涵盖95-试题)一区两地一园一通道建设人工智能时代的机遇与挑战
评论
0/150
提交评论