您的当前位置:首页正文

java面试---redis

2024-11-27 来源:个人技术集锦

什么是redis

redis是一个基于内存的高性能key-value数据库

 

redis特点

redis本质上是一个key-value类型的内存数据库,整个数据量统统加载在内存中操作,定期异步操作把数据库数据flush到硬盘上保存。性能出色,每秒处理超过10w次读写操作。支持保存多种数据结构,单个value最大限制是1GB。

主要缺点是数据库容量收到物理内存限制,不嫩用作海量数据的高性能读写,因此redis适合在较小数据量的高性能操作上

 

redis支持数据类型:

Strings

lists

sets

sorted set

hashes

 

为什么redis需要把所有数据放到内存中

redis为了达到最快读写速度将数据读到内存中,并通过异步的方式写入磁盘。redis具有快速和数据持久化的特征,如果不把数据放入内存,磁盘I/O速度严重影响性能。

 

redis是单进程单线程的

redis利用队列技术奖并发访问变为串行访问,消除了传统数据库串行控制的开销

 

分布式

redis支持主从模式。原则:master会将数据同步到slave,而slave不会将数据同步到master。slave启动时会连接master来同步数据

典型的分布式读写分离模型。利用master来插入数据,slave来检索服务

 

redis回收策略

  • volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
  • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  • allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  • no-enviction(驱逐):禁止驱逐数据

 

redis常见性能问题和解决方案

1、master最好不要做持久化工作

2、如果数据比较重要,某个slave开启AOF备份数据,策略设置为每秒一次

3、为了主从复制的速度和连接的稳定性,master和slave最好在同一个局域网内

4、尽量避免在压力很大的主库增加从库

5、主从赋值不要用图状结构,单向链表结构更加稳定

 

redis适合场景

1、会话缓存

2、全页缓存

3、队列

4、排行榜、计数器

5、发布/订阅

 

 

显示全文