前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >适合用于面试的一些redis基础知识的总结

适合用于面试的一些redis基础知识的总结

作者头像
哲洛不闹
发布2019-12-20 16:54:17
4240
发布2019-12-20 16:54:17
举报
文章被收录于专栏:java一日一条

github地址:https://github.com/DodoXixi/zeros-doc/blob/master/redis/redis-summary.MD 个人公众号:Java一日一条

redis总结

  • redis基础
    • redis支持的各种对象和数据结构
    • RDB与AOF持久化
    • 过期键淘汰处理
    • 功能之发布与订阅-subscribe
    • redis事务的实现

redis基础

redis是一个开源的,内存中的数据结构存储系统,它可以用作数据库,缓存和消息中间件。 特点:单进程,单线程,模型的KV数据库。支持多种类型的数据结构,如 字符串(strings),散列(hashes),集合(sets), 有序集合(sorted sets)与范围查询,bitmaps,hyperloglogs和地理空间(geospatial)索引半径查询。Redis内置了复制(replication),LUA脚本(Lua scripting) LRU驱动时间(LRU eviction),事务(transactions)和不同级别的磁盘持久化(persistence),并通过Redis哨兵(Sentinel)和自动分区(cluster)提供高可用性(high availability)

redis支持的各种对象和数据结构

  • 字符串(Strings) ,一个字符串类型的值最多能存储512M字节的内容
  • 列表(lists),简单的字符串列表,按照插入顺序排序。 LPUSH 插入一个新元素到列表头部,RPUSH插入一个新元素到列表的尾部。
  • 有序列表(Sorted sets),每个字符串元素都关联一个score,里面的元素总是通过scored进行排序。
  • 散列(hashes)
  • bit maps,
  • hyperloglogs, 用来做基数统计
    • PFADD: 指定元素添加到HyperLogLog中,
    • PFCOUNT: 返回给定的HyperLogLog中的基数。
    • PFMERGE: 合并多个HyperLogLog。

RDB与AOF持久化

redis 提供了多种不同级别的持久化方式,一种为RDB,一种为AOF

  • RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.
  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.
  • 如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.
  • 你也可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.

RDB 优缺点

优点:

  • 保存某个时间点得数据集适合用于备份
  • 文件紧凑,方便传输,适合用于灾难恢复
  • 执行的过程中,分出子进程操作,不影响主流程,可以优化redis性能。
  • 与AOF相比,在恢复大的数据集的时候,RDB更快。 缺点:
  • 由于是间隔时间执行,在出现redis意外停止工作的时候肯定会导致一部分数据丢失。
  • RDB需要经常fork子进程来保存数据集到硬盘,当数据集比较大的时候,fork会非常耗时。

AOF 优缺点

优点:

  • 可以选择多种不同的fsync策略
  • AOF文件是一种只进行追加的日志文件
  • Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写

缺点:

  • 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。
  • 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB ,关闭fsync策略之后,AOF和RDB一样快。

fsync策略

  • 每次有新命令追加到 AOF 文件时就执行一次 fsync : 非常慢,也非常安全
  • 每秒 fsync 一次: 足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失 1 秒钟的数据。
  • 从不 fsync : 将数据交给操作系统来处理。 更快,也更不安全的选择。

过期键淘汰处理

过期键淘汰策略分为 主动淘汰和被动淘汰

  • 主动淘汰 在key被访问的时候会判断这个key是否过期,如果过期,执行Del操作。
  • 被动淘汰 每秒执行十次
    • 测试随机的20个keys进行相关过期检测
    • 删除所有已经过期的keys
    • 如果有多于25%的keys过期,重复上述步骤

功能之发布与订阅-subscribe

redis支持发布订阅功能

redis事务的实现

redis通过MUTLTI,EXEC,WATCH等命令来实现事务(transaction)功能。事务提供了一种将多个命令请求打包,然后一次性,按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会终端事务而改去执行其他客户端的命令请求,他会将事务中的所有命令都执行完毕,然后采取处理其他客户端的命令请求。

特点:redis事务不支持回滚,即使事务队列中的命令是执行错误的,也会执行下去,直到事务队列中的命令一直执行完。

ACID

  • 持久性: redis服务器在无持久化的内存模式下运作时,以及服务器不再RDB持久化模式下运作时,在AOF下appendfsync选项为everysec和no时,事务不具有耐久性,当服务器在AOF持久化模式下,并且appendfsync选项为always时,事务具有耐久性。
  • 隔离性: redis是使用单线程的方式来执行事务导致redis的事务都是串行方式执行,因此总是具有隔离性。
  • 原子性: 不支持混滚但是碰到错误会一直执行下去。
  • 一致性

WATCH

带有WATCH命令的事务会将客户端和被监视的键在数据库的watched_keys字典中进行关联,

watched_keys

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java一日一条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • redis总结
    • redis基础
      • redis支持的各种对象和数据结构
      • RDB与AOF持久化
      • 过期键淘汰处理
      • 功能之发布与订阅-subscribe
      • redis事务的实现
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档