图解Redis 01 | 初识Redis

图解Redis 01 | 初识Redis
最新回答
从学不会孤独

2023-09-16 20:22:52

初识Redis

Redis是一种基于内存的数据库,因其卓越的性能和丰富的功能,在缓存、消息队列、分布式锁等场景中得到了广泛应用。

Redis的基本概念
  • 内存数据库:Redis的所有数据读写操作都在内存中完成,因此读写速度非常快。
  • 多种数据类型:Redis提供了多种数据类型来支持不同的业务需求,如String、Hash、List、Set、Zset等,后续版本还增加了Bitmaps、HyperLogLog、GEO、Stream等数据类型。
  • 原子性操作:由于Redis是单线程架构,一条命令的执行是由单个线程完成,因此对数据类型的操作都是原子的,不会出现并发竞争的问题。

Redis的高级特性

除了基本的数据存储功能,Redis还支持一系列高级特性,进一步增强了其功能和应用场景的多样性。

  • 事务:Redis支持事务操作,可以通过MULTI、EXEC、DISCARD和WATCH等命令实现。
  • 持久化:Redis支持RDB和AOF两种持久化机制,可以将数据保存到磁盘,保证数据在Redis发生故障后能够恢复。
  • Lua脚本:Redis支持Lua脚本的执行,可以在服务器端运行复杂的逻辑。
  • 多种集群方案:Redis支持主从复制模式、哨兵模式和分片集群模式等多种集群方案,可以实现高可用性和水平扩展。
  • 发布/订阅模式:Redis支持发布/订阅模式,可以实现消息的实时传递。
  • 内存驱逐机制:Redis具有内存驱逐机制,可以在内存不足时自动删除一些数据,以保证Redis的稳定运行。
  • 过期删除机制:Redis支持设置数据的过期时间,当数据过期时,Redis会自动删除这些数据。

Redis与Memcached的区别

虽然Redis和Memcached都是基于内存的非关系型数据库,但它们在多个方面存在显著差异。

  • 支持的数据类型:Redis支持多种复杂的数据结构,可以满足更复杂的数据存储场景需求;而Memcached主要是简单的键值对存储。
  • 持久化:Redis支持数据持久化,可以将数据保存到磁盘;而Memcached通常不具备数据持久化功能,数据只存在于内存中。
  • 内存管理:Redis具有更加灵活的内存管理策略和机制,可以配置和优化内存使用方式;而Memcached在内存管理方面比较简单。
  • 性能特点:在一些特定场景下,Memcached可能在简单的键值对操作中展现出极高的性能;但Redis在综合性能、功能多样性方面具有优势。
  • 应用场景:Memcached比较适合缓存比较简单的数据;而Redis可以应用在更广泛的场景,如缓存、消息队列、分布式锁等。

Redis支持的数据类型及其应用场景

Redis提供了丰富多样的数据类型,每种数据类型都有其特定的应用场景。

  • String:一般用于计数或缓存简单的键值对数据,例如用户信息、配置参数等。
  • Hash:用于存储对象信息,如一个用户的详细属性,常用于实现购物车等场景。
  • List:适用于消息队列、排行榜等。
  • Set:用于处理聚合计算(如并、交、差运算)的场景,比如点赞、共同关注、抽奖活动等。
  • Zset:适合实现带权重的排行榜或按时间排序的事件。
  • Bitmaps:用于处理二进制状态统计的场景,比如签到、判断用户登录状态、统计连续签到的用户总数等。
  • HyperLogLog:适合海量数据基数统计的场景,例如对百万级网页的UV(独立访问用户数)进行计数。
  • GEO:用于基于位置的服务,如查找附近的商家、网约车等。
  • Stream:用于实现高级消息队列。

Redis数据类型与底层数据结构的对应关系

Redis的数据类型与底层数据结构之间存在对应关系,这些底层数据结构是实现Redis高效性能的关键。

  • String类型:底层数据结构主要是SDS(Simple Dynamic String),与C语言字符串相比,SDS具有保存二进制数据、获取字符串长度时间复杂度为O(1)、拼接字符串不会导致缓冲区溢出等优点。
  • List类型:在Redis 3.2版本之前,底层数据结构可以是双向链表或ziplist;从Redis 3.2版本开始,底层数据结构改为quicklist,取代了双向链表和ziplist。
  • Hash类型:在Redis 7.0版本之前,底层数据结构可以是ziplist或hash table;从Redis 7.0版本开始,ziplist数据结构已被废弃,取而代之的是listpack数据结构。
  • Set类型:底层数据结构可以是hash table或整数集合,具体取决于集合中的元素类型和数量。
  • Zset类型:在Redis 7.0版本之前,底层数据结构可以是ziplist或skiplist;从Redis 7.0版本开始,ziplist数据结构已被废弃,取而代之的是listpack数据结构。

  • SDS(Simple Dynamic String)

  • ziplist(压缩列表)

  • 双向链表

  • quicklist(快速列表)

  • hash table(哈希表)

  • listpack(列表包)

  • 整数集合

  • skiplist(跳表)

通过了解Redis的基本概念、高级特性、与Memcached的区别、支持的数据类型及其应用场景,以及数据类型与底层数据结构的对应关系,我们可以更好地理解和使用Redis,充分发挥其性能优势和应用价值。