专栏总结6:redis相关

本文详细介绍了Redis的基础知识,包括Redis的非关系型数据库特性、数据类型、持久化机制、内存管理和键的过期策略。文章强调了Redis的高性能和适用场景,如计数器、缓存、会话存储、消息队列等,并讨论了Redis的线程模型、分布式锁实现以及集群方案。此外,还涵盖了Redis在分布式环境下的数据一致性、缓存异常处理和内存优化策略。文章最后提到了Redis与其他缓存系统的比较,如与Memcached的区别,以及如何选择合适的持久化方式。
摘要由CSDN通过智能技术生成

请不要付费,只是把历史笔记发布,包含专栏内容总结。

专栏总结1:基础网络相关
专栏总结2:数据结构和算法
专栏总结3:操作系统和计算机原理
专栏总结4:Linux和linux内核
专栏总结5:mysql相关
专栏总结6:redis相关

专栏总结7:中间件Nginx、消息队列
专栏总结java1:类型和String、反射
专栏总结java2:集合
专栏总结java3:类接口相关
专栏总结java4:异常
专栏总结java5:线程/多线程并发
专栏总结java6:jvm
专栏总结java7:jdk
专栏总结java8:Socket编程 nio
专栏总结java9:MyBatis+hibernate
专栏总结java10:Spring MVC
专栏总结java11:springboot
专栏总结java12:springcloud
专栏总结java13:dubbo

专栏总结:场景实践
专栏总结:架构设计总结

 

 

 

 

 

 


  • redis 简介
  • redis了解吗?你说说怎么用redis实现分布式锁?
  • Redis常用数据结构及底层数据结构实现
  • 如何解决 Redis 的并发竞争 Key 问题
  • 如何保证缓存与数据库双写时的数据一致性?
  • 为什么要用 redis /为什么要用缓存(高性能、高并发)
  • 为什么要用 redis 而不用 map/guava 做缓存?
  • redis 和 memcached 的区别
  • redis 常见数据结构以及使用场景分析(String、Hash、List、Set、Sorted Set
  • redis 设置过期时间
  • redis 内存淘汰机制(MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?
  • redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复
  • redis 事务
  • Redis 常见异常及解决方案(缓存穿透、缓存雪崩、缓存预热、缓存降级
  • 分布式环境下常见的应用场景(分布式锁、分布式自增 ID
  • Redis 集群模式(主从模式、哨兵模式、Cluster 集群模式
  • 如何解决 Redis 的并发竞争 Key 问题
  • 如何保证缓存与数据库双写时的数据一致性?

 

NOSQL


Redis等缓存系统/中间件/NoSQL/一致性Hash等
· 列举一个常用的Redis客户端的并发模型。
· HBase如何实现模糊查询?
· 列举一个常用的消息中间件,如果消息要保序如何实现?
· 如何实现一个Hashtable?你的设计如何考虑Hash冲突?如何优化?
· 分布式缓存,一致性hash
· LRU算法,slab分配,如何减少内存碎片
· 如何解决缓存单机热点问题
· 什么是布隆过滤器,其实现原理是? False positive指的是?
· memcache与redis的区别
· zookeeper有什么功能,选举算法如何进行
· map/reduce过程,如何用map/reduce实现两个数据源的联合统计

 

 

一、基础题


1、什么是Redis

Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。

与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

2、Redis有哪些优缺点

优点

  • 读写性能优异, Redis能读的速度是110000次/s,写的速度是81000次/s。

  • 支持数据持久化,支持AOF和RDB两种持久化方式。

  • 支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。

  • 数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。

  • 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

缺点

  • 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

  • Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。

  • 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。

  • Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

 

3、为什么要用 Redis /为什么要用缓存

主要从“高性能”和“高并发”这两点来看待这个问题。

高性能:

假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在数缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!

高并发:

直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

4、为什么要用 Redis 而不用 map/guava 做缓存?

缓存分为本地缓存和分布式缓存。以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。

使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复杂。

5、Redis为什么这么快

1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是O(1);

2、数据结构简单,对数据操作也简单,Redis 中的数据结构是专门进行设计的;

3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;

4、使用多路 I/O 复用模型,非阻塞 IO;

5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis 直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;

 

二、数据类型


1、Redis有哪些数据类型

Redis主要有5种数据类型,包括String,List,Set,Zset,Hash,满足大部分的使用要求

 

2、Redis常用数据结构及底层数据结构实现


 

 

 

三、Redis的应用场景有哪些?


总结一

计数器:可以对 String 进行自增自减运算,从而实现计数器功能。Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。

缓存:将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。

会话缓存:可以使用 Redis 来统一存储多台应用服务器的会话信息。当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。

全页缓存(FPC):除基本的会话token之外,Redis还提供很简便的FPC平台。以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。此外,对WordPress的用户来说,Pantheon有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

查找表:例如 DNS 记录就很适合使用 Redis 进行存储。查找表和缓存类似,也是利用了 Redis 快速的查找特性。但是查找表的内容不能失效&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hguisu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值