Redis知识

面试题

Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。

它支持多种类型的数据结构,如字符串(Strings),散列(Hash),列表(List),集合(Set),有序集合(Sorted Set或者是ZSet)与范围查询,Bitmaps,Hyperloglogs 和地理空间(Geospatial)索引半径查询。其中常见的数据结构类型有:String、List、Set、Hash、ZSet这5种。

Redis 内置了复制(Replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(Transactions) 和不同级别的磁盘持久化(Persistence),并通过 Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(High Availability)。

Redis也提供了持久化的选项,这些选项可以让用户将自己的数据保存到磁盘上面进行存储。根据实际情况,可以每隔一定时间将数据集导出到磁盘(快照),或者追加到命令日志中(AOF只追加文件),他会在执行写命令时,将被执行的写命令复制到硬盘里面。您也可以关闭持久化功能,将Redis作为一个高效的网络的缓存数据功能使用。

Redis不使用表,他的数据库不会预定义或者强制去要求用户对Redis存储的不同数据进行关联。
redis集群

redis持久化

https://www.cnblogs.com/itdragon/p/7906481.html

  • RDB(Redis Database)
1.RDB 是 Redis 默认的持久化方案。
2.在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中
3. 指定目录下生成一个dump.rdb文件
4. Redis 重启会通过加载dump.rdb文件恢复数据
优点:
1 适合大规模的数据恢复。
2 如果业务对数据完整性和一致性要求不高,RDB是很好的选择。

缺点:
1 数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机了。
2 备份时占用内存,因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍哦),最后再将临时文件替换之前的备份文件。
所以Redis 的持久化和数据的恢复要选择在夜深人静的时候执行是比较合理的。
  • AOF(Append Only File)

redis支持的数据类型

https://www.cnblogs.com/dijia478/p/8058775.html

  • key-value
  • map,散列hash
  • list
  • 集合、有序集合
  • 发布订阅

redis分布式锁解决方案

  • https://www.cnblogs.com/cxyyh/p/11132161.html
  • https://cloud.tencent.com/developer/news/241627

悲观锁、乐观锁

  • https://blog.csdn.net/yanghan1222/article/details/80449528
redis过期策略

redis单线程为什么快

  • .redis是存储在内存上的,读写的话不会受到硬盘 I/O 速度的限制
  • 多路IO复用模型,非阻塞IO 解释:多路:多网络连接 复用:复用同一个线程
  • .数据结构简单,对数据操作也简单
  • 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
  • 使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;

缓存雪崩、缓存穿透、缓存击穿

  • 缓存雪崩,是指在某一个时间段,缓存集中过期失效。
  • 缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞
  • 缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。

你可能感兴趣的:(Redis知识)