redis基础

1、redis的定义:基于内存的高性能非关系型(key-value)数据库。
2、redis的数据类型:string、hash、list、set、sorted-set。
3、redis的特点:redis本身是一个key-value类型的内存数据库,整个数据库在系统内存中操作,定期的将数据同步到磁盘中,因为是纯内存操作,所以性能特别快,每秒可实现10万次的操作。另外redis支持多种数据类型,可以保存多种数据结构。因此redis可以实现多种功能,例如用list来做双向链表,实现轻量级的消息队列服务。另外通过对存入的key-value设置expire参数,实现数据缓存。
4、redis有哪些好处:
速度快,数据都存储在内存中,查找和操作的时间复杂度都是O(1)
有丰富的数据类型string、hash、list、set、sorted-set。
支持事务,操作都是原子性的。
丰富的特性:可用作缓存,消息
5、redis常见性能问题和解决方案
a. Master写内存快照,调用rdbSave函数,会阻塞主线程工作,当快照比较大时,会间歇性停止服务,所以不建议Master写内存快照。
b. Master AOF持久化,如果不重写aof文件,这个持久化方式对性能的影响是最小的,但是会导致aof文件不断增大,AOF文件过大会影响Master重启的恢复速度Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据重要,某个Slave开启AOF备份数据,策略为每秒同步一次。
c. Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内
6、mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据
(redis内存数据达到一定量时,会启用数据淘汰策略,redis提供6中数据淘汰策略)

  • volatile-lru:从已经设置过期时间的数据集挑选最近最少使用的淘汰。
  • volatile-ttl:从已经设置过期时间的数据集中挑选将要过期的淘汰。
  • volatile-random:从已经设置过期时间的数据集随机挑选要淘汰的。
  • allkeys-lru:从所有数据集中挑选最近最少使用的数据淘汰。
  • allkeys-random:从所有的数据集中随机挑选的数据淘汰。
  • no-enviction:禁止驱逐数据。
    7、redis为什么把数据存到内存中?
    因为在内存中读写速度比较快,并通过异步的形式写到磁盘中,所以redis具有持久化和快速的特点。如果不将数据都写到内存中,I/O磁盘速度会严重影响redis的性能。
    8、redis缓存失效策略和主键失效机制
    在redis中有生存期的key成为volatile,在创建缓存的时候,会给key设置生存期,过了生存期,其key可能会被删除。
    (1)影响生存时间的操作

    • 生存时间可以通过使用 DEL 命令来删除整个 key 来移除,或者被 SET 和 GETSET 命令覆盖原来的数据,也就是说,修改key对应的value和使用另外相同的key和value来覆盖以后,当前数据的生存时间不变
      (2)如何更新生存时间
    • 可以对一个已经带有生存时间的 key 执行EXPIRE命令,新指定的生存时间会取代旧的生存时间。过期时间的精度已经被控制在1ms之内,主键失效的时间复杂度是O(1)。
    • EXPIRE和TTL命令搭配使用,TTL可以查看key的当前生存时间。设置成功返回 1;当 key 不存在或者不能为 key 设置生存时间时,返回 0 。
    • 最大缓存配置:在 redis 中,允许用户设置最大使用内存大小server.maxmemory
        默认为0,没有指定最大缓存,如果有新的数据添加,超过最大内存,则会使redis崩溃,所以一定要设置。redis 内存数据集大小上升到一定大小的时候,就会实行数据淘汰策略
      9、redis的使用场景
      • 最常用的一种使用Redis的情景是会话缓存(session cache)
      • 全页缓存(FPC)
      • 最新列表
        • 新闻列表页面最新的新闻列表,使用redis的lpush命令构建一个list,一个个顺序都塞进去
      • 排行榜应用
        实现此功能主要用到redis的数据类型是redis的有序集合sortedSet。sortedSet是set类型的一个拓展,比原有的类型多了一个顺序属性,此属性再买次插入数据时会自动调整顺序值,保证value值按照一定顺序连续排列。
        假如一个游戏经验值排行榜,主要的实现思路是:
        1 在一个新的玩家参与到游戏中,在redis中的sortedSet中新增一条记录,score为0.(zadd key_name 0 number)
        2 当玩家的经验值发生变化时,修改该玩家的score值(zadd key_name 5 number )
        3 使用redis的zrange (score升序排列),zrevrange(score降序排列)方法获取排行榜(zrange/zrevrange key_name 0 -1 withscores)。
      • 计数器应用
        redis的命令都是原子性的,可以轻松的利用incr/decr命令进行原子性操作,来构建计数系统。由于单线程,可以避免并发问题,保证不会出错。
      • 数据排重
        redis set是可以自动重排的,当你需要存储一个列表数据,又不希望出现重复数据,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口。
        实现方案:set的内部是一个value永远为null的HashMap,实际上是通过计算hash的方式快速重排,这也是set能提供判断一个成员是否在集合内的原因。
      • 实时的反垃圾系统
      • 可以发布订阅的实时消息系统
        redis中pub/sub系统可以构建实时的消息系统
        这里写图片描述
        一个生产者可以对应多个消费者,但是必须保证消息发布者和订阅者同时在线,否则一旦消息订阅者由于各种总异常情况被迫断开连接,再起重新连接后,其离线期间的消息是无法被重新通知。当然,生产者是不需要关心有多少订阅者,也不用关心订阅者的具体信息,而订阅者可以根据需要自由选择订阅哪些频道。
        造成的缺点:如果大量的消息到redis服务时,如果订阅者不能及时消费,则就会导致信息堆积,引发内存问题。
      • 队列应用:如图所示
        这里写图片描述

redis 4.0新增特性:
1 lazyFree:lazyFree机制可以避免del、rename、flushAll、flushdb引起的的阻塞。
2 unlink 在4.0之前del命令在删除key之前,会释放掉所有key内存以后才会返回ok,如果key比较大的情况下,会等待很久,为了兼容del的功能,redis4.0引入unlink命令,效果和用法和del一样,不过unlink是释放内存在后台运行的线程。
3 flushdb/flushAll 可以指定是否使用Lazyfree的方式来清空整个内存。
4 rename :执行 rename oldkey newkey 时,如果newkey已经存在,redis会先删除,这也会引发上面提到的删除大key问题,如果想让redis在这种场景下也使用lazyfree的方式来删除,可以在控制台上打开如下配置。lazyfree-lazy-server-del yes/no
5 混合rdb-aof持久化机制:
redis 4.0的RDB-AOF混合机制一旦开启,AOF重写产生同时包含的rdb格式和aof格式的内容,rdb记录原有的数据,aof用于记录最近发生了变化的数据。这样redis同时兼有rdb和aof持久化的优点,技能快速生成重写的问题件,也能在出现问题的时候,快速的载入数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值