Redis(Remote Dictionary Server),即远程字典服务,是一个开源
的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志
型、Key-Value数据库。
一、基本概述
定义:Redis是一个高性能的key-value存储系统,它支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。
开发语言:使用ANSI C语言编写。
特点:速度快、支持多种数据结构、丰富的操作、原子性操作、支持持久化、支持主从同步等。
二、性能特点
速度快:Redis是基于内存的存储数据库,绝大部分的命令处理只是纯粹的内存操作,内存的读写速度非常快。官方提供的数据可以支持100000以上的QPS(每秒查询率)。
数据结构丰富:Redis支持多种数据结构,可以满足不同场景下的数据存储和查询需求。
持久化:Redis支持数据的持久化,可以将内存中的数据保存到磁盘中,避免了数据丢失的风险。支持RDB、AOF、RDB&AOF三种持久化方案。
高可用性:Redis支持主从复制、哨兵和集群等多种高可用方案,可以保证数据的高可靠性和高可用性。
三、数据结构
字符串(String):
字符串是Redis最基本的数据结构,用于存储文本或二进制数据。
字符串类型的操作包括设置值(SET)、获取值(GET)、追加(APPEND)、自增
自减(INCR、DECR)等。字符串类型通常用于缓存、计数器、存储序列化的对象等场景。
列表(List):
列表是一个有序的字符串集合,允许重复值。
列表的操作包括从头或尾部添加元素(LPUSH、RPUSH)、获取元素(LRANGE)、删除元素(LPOP、RPOP)等。
列表类型适用于队列、栈等场景,如消息队列、操作日志等。
集合(Set):
集合是一个无序的字符串集合,不允许重复值。
集合的操作包括添加元素(SADD)、删除元素(SREM)、查找元素(SISMEMBER)、集合运算(交集、并集、差集)等。
集合类型适用于存储不重复的数据集合,如标签系统、社交网络关系等。
有序集合(Sorted Set):
有序集合类似于集合,但每个元素都关联一个分数(score),用于排序。
有序集合的操作包括添加元素(ZADD)、删除元素(ZREM)、查找元素(ZRANGE、ZREVRANGE)、按分数范围获取元素等。
有序集合类型适用于排行榜、范围查询等场景。
哈希(Hash):
哈希是一个键值对集合,其中每个键都映射到一个值。
哈希的操作包括设置字段值(HSET)、获取字段值(HGET)、删除字段(HDEL)、获取所有字段(HGETALL)等。
哈希类型适用于存储对象,每个对象包含多个字段和对应的值,如存储用户信息等。
位图(Bitmap):
位图是一种特殊的字符串,每个位都可以设置为0或1,用于处理二进制数据。
位图的操作包括设置位(SETBIT)、获取位(GETBIT)、计算位的操作(AND、OR、XOR等)。
位图类型适用于标记、计数等场景,如在线状态、用户签到等。
地理位置(Geospatial):
Redis支持地理位置数据类型,允许存储地理坐标和执行地理位置查询。
地理位置的操作包括添加地理位置(GEOADD)、查找附近的位置(GEORADIUS)、计算距离(GEODIST)等。
地理位置类型适用于位置服务、物流跟踪等场景。
流(Stream):
流是Redis 5.0引入的一种新的数据结构,类似于消息队列,可以实现发布/订阅模式和消费者组。
流的操作包括添加消息(XADD)、读取消息(XREAD、XRANGE、XREVRANGE)、确认消息(XACK)等。
流类型适用于需要持久化消息队列的场景。
原子计数器(HyperLogLog):
HyperLogLog是一种用于基数估计的数据结构,可以估算集合中的不重复元素数量。
HyperLogLog的操作包括添加元素(PFADD)、估算元素数量(PFCOUNT)等。
HyperLogLog类型适用于UV统计、广告点击率统计等场景。
四、应用场景
缓存:用作高性能缓存层,以减轻数据库负载。
会话管理:管理用户会话状态,如Web应用程序中的用户登录状态、购物车内容等。
消息队列:支持发布/订阅模式,可以用作轻量级的消息队列系统。
计数器和排行榜:Redis的原子增减操作非常适合用于计数器和排行榜应用。
实时分析:有序集合和位图数据结构使其成为实时分析和计数的理想工具。
地理空间应用:支持地理空间数据,可以用于构建地理位置应用。
分布式锁:用于实现分布式锁,确保多个客户端之间的协作和数据一致性。