JAVA高级开发工程师面试系列——Redis

Redis与Memcached对比

  • Redis支持的数据类型:字符串String,列表List,哈希Map,集合set,有序集合sorted set;Memcached只支持简单的key-value存储
  • Redis支持的持久化:可基于内存亦可持久化;Redis提供两种主要的持久化策略:RDB快照和AOF日志;Memcached是纯内存
  • Redis只使用单核;Memcached可使用多核
  • Redis在存储小数据时比Memcached性能高,而对于100kb以上的数据,Memcached的性能要高于Redis;Redis的读速度11万次/s,写速度8.1万次/s
  • Redis支持服务端分布式存储,而Memcached本身不支持分布式,只能在客户端通过一致性哈希这样的分布式算法实现分布式存储
  • 单个Redis命令的执行时原子性的,但Redis没有在事务上增加任何维持原子性的机制,所以Redis事务的执行并不是 原子性的;

Redis的发布/订阅

实时性较高,但不保证可靠,不支持持久化;
除了表示不同topic之外,它并不支持分组;

Redis每种类型数据的容量

Redis的string可以包含任何数据,如jpg图片或序列化对象,一个键值最大512MB
Redis的hash可以存储2^32 – 1(40多亿)个键值对
Redis的列表最多可包含2^32 – 1(40多亿)个元素
Redis的集合最大成员数2^32 – 1(40多亿)个,不允许重复
Redis的有序集合的最大成员数2^32 – 1(40多亿)个,不允许重复

Redis配置

  • 绑定的主机地址
  • 端口
  • 设置Redis的连接密码,默认关闭
  • 连接超时时间
  • 是否为守护进程
  • 设置本机为slaver服务时,设置master服务的IP地址及端口和密码
  • 设置数据库,默认为0
  • 指定存储至本地数据库时,是否启用压缩数据,默认为yes
  • 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
  • 设置同一时间最大客户端连接数,默认无限制
  • 指定Redis的最大内存限制
  • 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件
    save
    Redis默认配置文件中提供了三个条件:
    save 900 1
    save 300 10
    save 60 10000
    分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改
  • 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为Redis本身同步数据文件是按照save条件同步的,所以有的数据在一段时间内只存在于内存中,默认为no,可选值no/yes;
  • 指定更新日志的条件,有3个可选值:no表示等待操作系统执行;always表示每次更新操作后手动调用fsync()将数据写入到磁盘;everysec表示每秒同步一次,默认值。
  • vm-max-memory,将大于此值得数据存入虚拟内存(磁盘)
  • 访问swap的线程数,最好不要超过机器的核心数,默认为4
  • swap的page-size,默认为32
  • swap文件中page的数量,默认124317728
  • 在设置客户端应答时,是否把较小的包合并成一个包发送

Redis哨兵

Redis集群

Redis主从

Redis缓存同步

主副本同步延迟问题,数据库和Redis同步延迟问题

你可能感兴趣的:(JAVA高级开发工程师面试系列——Redis)