一般常见的项目用的mysql是基于存储的数据库,对于一些高速读写、数据结构简单、并发性能要求高、应用场景多变等需求下,用mysql是十分缓慢的,例如电商秒杀和高并发场景。由于程序在执行时,是在内存中。因此需要一种基于内存的数据库。Redis是一个开源的高性能键值存储数据库,它以其快速、灵活和多功能的特性成为了广泛应用的内存数据库。但是由于内存的易失性,所以在项目中还需要使用mysql数据库。因此一个项目往往是mysql+redis。于是项目就有了redis和mysql数据进行同步问题。
Redis基于内存操作,通过将数据存储在内存中实现高速读写操作,同时也支持数据持久化到磁盘。其基本工作原理包括数据的读取、写入、过期淘汰等过程,通过单线程的方式处理命令请求,保证了原子性操作。
Redis在面试中经常被问使用场景等,下面是对面试中经常被问的应用场景的一个总结:
1. 排行榜
在许多应用中,需要实时展示用户的排名情况,比如社交网络中的粉丝数排行、电商平台中的销量排行等。Redis的有序集合数据结构非常适合用来存储和更新排行榜数据,通过有序集合的特性可以快速实现排名的计算和更新。
- 大key和热key
在Redis中,大key指的是占用较大内存的key,热key则是被频繁访问的key。对于大key,可以通过合理的数据分片或者使用Redis的数据结构进行拆分优化;对于热key,可以通过设置过期时间、使用LRU算法等手段进行缓解,以避免对系统性能的影响。
- 限流
限流是保护系统免受过载攻击的重要手段之一。Redis可以通过计数器或令牌桶算法实现请求的限流控制,确保系统不会因为大量请求而崩溃,同时保证系统的稳定性和可靠性。
- 分布式锁
在分布式系统中,保证数据的原子性操作是非常重要的。Redis提供了分布式锁的功能,通过SETNX(SET if Not eXists)指令可以实现简单的分布式锁,确保在分布式环境下的数据一致性。
- 雪花算法
为了避免在分布式系统中产生重复的ID,可以使用雪花算法来生成全局唯一的ID。Redis可以作为存储和生成雪花算法所需的数据中心ID、机器ID等信息的工具,保证全局唯一ID的生成。
- 缓存三兄弟
缓存雪崩、缓存穿透、缓存击穿是常见的缓存问题,会对系统性能和稳定性造成影响。通过合理设置缓存过期时间、使用预热、加入哨兵机制等手段,可以有效应对这些问题,提高系统的可用性和性能。
总的来说,我觉得redis的出现是因为内存执行效率高。由于redis的断电丢失数据的特性,衍生出mysql和redis结合使用。两者结合使用就出现了数据不一致问题。同时redis自身的问题,也需要做数据库的容灾备份问题。所以企业一般是往往围绕着这些问题来问。