Redis基础与数据结构

认识一下Redis的基本使用场景和数据结构类型。

Redis简介

Redis是一种基于内存的非关系型数据库,对数据的读写操作均是在内存中完成的,因此读写速度非常快,常用于缓存、消息队列、分布式锁等场景。此外,Redis还支持事务、持久化、Lua脚本、多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布/订阅模式、内存淘汰机制、过期删除机制等。

Redis和Memcached的区别

两者的共同点是:

  • 都是基于内存的数据库,一般都用来当缓存用
  • 都有过期策略
  • 性能都较高

区别在于:

  • Redis支持的数据类型更丰富,而Memcached只支持最简单的k-v类型
  • Redis支持持久化,而Memcached不支持
  • Redis支持原生的集群模式,而Memcached需要依靠客户端来实现集群
  • Redis还支持发布/订阅模型、Lua脚本、事务等功能,Memcached不支持。

为什么用Redis作缓存

  1. Redis具备高性能
  2. Redis支持高并发

Redis数据结构

Redis的五种基础数据类型:

  • String:缓存对象、常规计数、分布式锁、共享session信息等
  • List:消息队列(但是有两个问题:生产者需要自行实现全局唯一;不能以消费组形式消费数据)
  • Hash:缓存对象、购物车等
  • Set:聚合计算(并集、交集、差集)等,比如点赞、共同关注、抽奖活动
  • Zset:排序场景,比如排行榜、电话和姓名排序等

后续版本Redis又支持四种新的数据类型:

  • BitMap:状态统计,比如签到、判断用户登陆状态、连续签到用户总数等
  • HyperLogLog:海量数据基数统计,比如百万级网页UV统计
  • GEO:存储地理位置信息,比如打车
  • Stream:消息队列,相比于List实现的消息队列多了自动生成全局唯一消息ID和支持以消费组形式消费数据这两个特性

Redis数据类型详解

String

String类型的底层数据结构实现主要是intSDS(简单动态字符串)。

List

Hash

Set

Zset

BitMap

HyperLogLog

GEO

Stream