文章目录
- 前言
- 一、字符串(String)
- 应用场景
- 常用命令
- 二、哈希(Hash)
- 应用场景
- 常用命令
- 三、列表(List)
- 应用场景
- 常用命令
- 四、集合(Set)
- 应用场景
- 常用命令
- 五、有序集合(Sorted Set)
- 应用场景
- 常用命令
- 六、流(Stream)
- 应用场景
- 常用命令
- 七、地理空间(Geospatial)
- 应用场景
- 常用命令
- 八、位图(Bitmap)
- 应用场景
- 常用命令
- 九、基数统计(HyperLogLog)
- 应用场景
- 常用命令
前言
Redis是一个开源的、高性能的键值对NoSQL 数据库。在Redis中有五种常用数据类型和几种特殊数据类型,每种类型适用于不同的应用场景。
一、字符串(String)
定义:最基本的数据类型,能存储任何形式的字符串,包括文本、数字、二进制数据等,最大存储长度为 512MB
。
应用场景
常用于缓存,比如把网页内容、查询结果暂存起来,加速后续访问;
redis分布式锁使用SETNX
实现;
计数器功能也常用字符串,通过INCR、DECR 这类自增自减命令来统计页面访问量、点赞数等。
常用命令
SET key value # 设置指定键的值。
SETNX key value # 设置指定键的值,只有在指定的 key 不存在时,才会为 key 设置指定的值。
GET key # 获取指定键的值。
INCR key / DECR key # 将键对应的整数值递增/递减。
INCRBY key increment / DECRBY key decrement # 按指定增量递增/递减。
APPEND key value # 在现有字符串后追加数据。
STRLEN key # 获取字符串的长度。
二、哈希(Hash)
定义:由键值对组成的无序散列表,适合存储对象信息
,其中字段(field)相当于对象的属性,值(value)是属性对应的内容。
应用场景
在存储、修改用户资料场景极为常用,像用户名、年龄、性别这些属性组成一个用户对象,存储在一个哈希结构里。
常用命令
HSET key field value # 设置哈希表中字段的值。
HGET key field # 获取哈希表中字段的值。
HMSET key field1 value1 [field2 value2 ...] # 一次性设置多个字段。
HGETALL key # 获取哈希表中所有字段和值。
HDEL key field [field ...] # 删除一个或多个哈希表字段。
HINCRBY key field increment # 递增哈希表中字段的整数值。
HKEYS key / HVALS key # 获取所有字段名/字段值。
HEXISTS key field # 检查给定字段是否存在。
三、列表(List)
定义:按插入顺序排序的字符串列表,一个列表最多可以存储 2^32-1 个元素。
在 Redis 中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是一种比较灵活的数据结构,可以充当栈和队列的角色,在实际开发中有很多应用场景。
应用场景
实现消息队列是它的典型应用,生产者往列表一端添加消息,消费者从另一端依次取出;还能用于展示最新的文章列表、评论列表等,利用其顺序特性来排列数据。
常用命令
LPUSH key value [value ...] / RPUSH key value [value ...] # 从左/右端插入一个或多个元素。
LPOP key / RPOP key # 移除并返回列表最左/右端的元素。
LRANGE key start stop # 获取列表指定范围内的元素。
LLEN key # 获取列表长度。
LREM key count value # 根据参数 count 的值移除列表中与参数 value 相等的元素。
BLPOP key [key ...] timeout / BRPOP key [key ...] timeout # 阻塞式弹出操作,等待直到有元素可用或超时。
四、集合(Set)
定义:无序且不重复的字符串集合,自动去重是它的显著特性。
应用场景
用于实现标签系统,给文章、图片打标签,每个标签存为集合元素;也可做社交关系中的共同好友、共同关注计算,利用集合的交集运算。
常用命令
SADD key member [member ...] # 添加一个或多个成员到集合。
SMEMBERS key # 获取集合中的所有成员。
SISMEMBER key member # 判断成员是否存在于集合。
SREM key member [member ...] # 移除一个或多个成员。
SCARD key # 获取集合的成员数。
SINTER key [key ...] / SUNION key [key ...] / SDIFF key [key ...] # 计算多个集合的交集/并集/差集。
SRANDMEMBER key [count] # 随机获取集合中的一个或多个成员。
五、有序集合(Sorted Set)
定义:与集合类似,但每个元素会关联一个分数(score),根据分数对元素排序。
应用场景
排行榜功能的首选,游戏排行榜、热门文章排名,依据点赞数、热度等分数指标来排列元素顺序。
常用命令
ZADD key score member [score member ...] # 添加一个或多个成员及其分数到有序集合。
ZRANGE key start stop [WITHSCORES] # 获取指定排名范围内的成员(可选带分数)。
ZREVRANGE key start stop [WITHSCORES] # 按分数降序获取成员。
ZCARD key # 获取有序集合的成员数。
ZCOUNT key min max # 统计分数在给定区间内的成员数量。
ZINCRBY key increment member # 递增成员的分数。
ZRANK key member / ZREVRANK key member # 获取成员的排名(升序/降序)。
ZREM key member [member ...] # 移除一个或多个成员。
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] # 计算多个有序集合的交集,并将结果存储在一个新的有序集合中。
六、流(Stream)
定义:是 Redis 5.0 引入的数据类型,用于处理日志、事件流等大规模的消息数据,以时间为序,支持消费者组,便于多消费者协同消费消息。
应用场景
系统监控中的事件记录与处理、分布式系统中的日志聚合,都能用流数据类型高效管理海量消息。
常用命令
XADD key ID field value [field value ...] # 向流中添加一条记录。
XRANGE key start stop [COUNT count] / XREVRANGE key start stop [COUNT count] # 读取流中的记录(正序/逆序)。
XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...] # 阻塞式读取多条流中的记录。
XGROUP CREATE key group name $ MKSTREAM # 创建消费者组。
XREADGROUP GROUP group consumer COUNT count STREAMS key [key ...] ID [ID ...] # 从消费者组中读取消息。
XACK key group ID [ID ...] # 确认消息已被处理。
XPENDING key group [IDLE min-idle-time] [START start END end COUNT count] [CONSUMER consumer-name]:查看未确认的消息。
七、地理空间(Geospatial)
定义:用来存储地理位置信息,支持计算两点间距离、获取指定范围内的地理位置等操作。
应用场景
在基于位置的服务中广泛使用,比如附近的人、查找附近的商家、计算行程距离。
常用命令
GEOADD key longitude latitude member [longitude latitude member ...] # 向指定键添加一个或多个地理位置。
GEODIST key member1 member2 [unit] # 计算两个成员之间的距离。
GEOHASH key member [member ...] # 获取一个或多个成员的 Geohash 表示。
GEOPOS key member [member ...] # 获取一个或多个成员的经度和纬度。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE|STOREDIST destination] # 查找给定坐标范围内符合条件的成员。
八、位图(Bitmap)
定义:通过位操作来存储和操作数据,把数据映射为二进制位,适用于海量数据的统计场景。
应用场景
比如统计网站每日活跃用户数,给每个用户分配一位,通过位运算快速得出活跃人数。
常用命令
SETBIT key offset value # 对字符串指定位置的位进行设置。
GETBIT key offset # 获取字符串指定位置的位。
BITCOUNT key [start end] # 统计字符串中被设置为 1 的位的数量。
BITPOS key bit [start] [end] # 查找第一个被设置为指定值的位的位置。
BITOP operation destkey key [key ...] # 对多个字符串执行位运算(如 AND, OR, XOR, NOT),并将结果保存到目标键。
九、基数统计(HyperLogLog)
定义:用于做基数估算,能用极小的内存空间近似计算海量集合中的不重复元素数量。
应用场景
大型网站估算每日独立 IP 访问量,无需精确统计时,HyperLogLog 能高效给出近似结果。
常用命令
pfadd key member1 member2 .... # 添加一个或者多个元素
pfcount key # 统计key集合中基数的个数
pfmerge newKey key1 key2 ... # 合并key1和key2中的元素,并且剔除其中重复的元素,产生新的集合newKey。
参考文章:
redis命令手册
Redis数据类型详解