Redis 从入门到精通(二):数据类型详解

张开发
2026/6/10 21:47:29 15 分钟阅读
Redis 从入门到精通(二):数据类型详解
系列导读本篇将深入讲解 Redis 的 8 种数据类型包括 String、Hash、List、Set、ZSet、Bitmaps、HyperLogLog、Geospatial。文章目录一、数据类型概览1.1 数据类型对比二、String 字符串2.1 基本操作2.2 批量操作2.3 数值操作2.4 字符串操作2.5 应用场景三、Hash 哈希3.1 基本操作3.2 字段操作3.3 数值操作3.4 应用场景四、List 列表4.1 基本操作4.2 弹出操作4.3 索引操作4.4 修剪操作4.5 应用场景五、Set 集合5.1 基本操作5.2 集合运算5.3 随机操作5.4 应用场景六、ZSet 有序集合6.1 基本操作6.2 范围查询6.3 删除操作6.4 应用场景七、高级数据类型7.1 Bitmaps 位图7.2 HyperLogLog 基数统计7.3 Geospatial 地理位置总结一、数据类型概览1.1 数据类型对比数据类型说明底层实现典型场景String字符串、整数、浮点数SDS缓存、计数器Hash键值对集合ziplist/hashtable存储对象List有序字符串列表quicklist消息队列Set无序唯一集合intset/hashtable标签系统ZSet有序唯一集合skiplist排行榜Bitmaps位图String签到统计HyperLogLog基数估算StringUV统计Geospatial地理位置ZSet附近的人二、String 字符串2.1 基本操作# 设置值SET key value SET user:name张三# 获取值GET key GET user:name# 张三# 设置并返回旧值GETSET key newvalue# 仅当不存在时设置SETNX key value# 存在返回0不存在返回1# 设置带过期时间SETEX key seconds value SETEX session:token3600abc1232.2 批量操作# 批量设置MSET key1 value1 key2 value2 MSET user:1:name张三user:1:age25# 批量获取MGET key1 key2 MGET user:1:name user:1:age# 1) 张三# 2) 252.3 数值操作# 递增INCR counter# 1INCRBY counter10# 10# 递减DECR counter# -1DECRBY counter5# -5# 浮点递增INCRBYFLOAT price2.52.4 字符串操作# 获取长度STRLEN key# 追加内容APPEND keysuffix# 获取子串GETRANGE key start end GETRANGE greeting04# Hello# 设置子串SETRANGE key offset value2.5 应用场景场景实现方式缓存SET/GET计数器INCR/INCRBY分布式锁SETNXSessionSETEX三、Hash 哈希3.1 基本操作# 设置单个字段HSET user:1 name张三# 设置多个字段HMSET user:1 name张三age25city北京# 获取单个字段HGET user:1 name# 张三# 获取多个字段HMGET user:1 name age# 获取所有字段HGETALL user:1# 1) name# 2) 张三# 3) age# 4) 253.2 字段操作# 检查字段是否存在HEXISTS user:1 name# 1存在 0不存在# 删除字段HDEL user:1 city# 获取所有字段名HKEYS user:1# 获取所有字段值HVALS user:1# 获取字段数量HLEN user:13.3 数值操作# 字段递增HINCRBY user:1 age1HINCRBYFLOAT user:1 score0.53.4 应用场景# 存储用户信息HMSET user:1001 name李四age30emailli4example.com# 购物车HSET cart:user:1001 product:12# 商品ID:数量HSET cart:user:1001 product:21HINCRBY cart:user:1001 product:11# 增加数量四、List 列表4.1 基本操作# 左侧插入LPUSH mylistabc# 右侧插入RPUSH mylistde# 获取列表长度LLEN mylist# 获取范围内元素LRANGE mylist0-1# 获取全部LRANGE mylist02# 获取前3个4.2 弹出操作# 左侧弹出LPOP mylist# 右侧弹出RPOP mylist# 阻塞弹出用于消息队列BLPOP mylist30# 30秒超时BRPOP mylist304.3 索引操作# 按索引获取LINDEX mylist0# 按索引设置LSET mylist0newvalue# 获取长度LLEN mylist4.4 修剪操作# 只保留指定范围LTRIM mylist099# 只保留前100个4.5 应用场景# 消息队列LPUSH queue:ordersorder:1RPOP queue:orders# 最新列表LPUSH latest:newsnews:100LTRIM latest:news099# 只保留最新100条# 时间线LPUSH timeline:user:1post:1post:2五、Set 集合5.1 基本操作# 添加元素SADD mysetabc# 获取所有元素SMEMBERS myset# 检查元素是否存在SISMEMBER myseta# 1存在 0不存在# 获取元素数量SCARD myset# 删除元素SREM myseta5.2 集合运算# 交集SINTER set1 set2# 并集SUNION set1 set2# 差集SDIFF set1 set2# 存储运算结果SINTERSTORE result set1 set2 SUNIONSTORE result set1 set2 SDIFFSTORE result set1 set25.3 随机操作# 随机获取元素SRANDMEMBER myset# 随机弹出元素SPOP myset5.4 应用场景# 标签系统SADD user:1:tags科技互联网AISADD user:2:tags科技金融# 共同好友SINTER user:1:friends user:2:friends# 抽奖系统SADD lottery:usersuser1user2user3SPOP lottery:users# 随机抽取六、ZSet 有序集合6.1 基本操作# 添加元素带分数ZADD leaderboard100player1ZADD leaderboard200player2ZADD leaderboard150player3# 获取元素分数ZSCORE leaderboardplayer1# 获取元素排名从0开始ZRANK leaderboardplayer1# 获取元素数量ZCARD leaderboard6.2 范围查询# 按排名范围获取ZRANGE leaderboard09# 前10名ZRANGE leaderboard09WITHSCORES# 带分数# 按分数范围获取ZRANGEBYSCORE leaderboard100200ZRANGEBYSCORE leaderboard100200WITHSCORES# 倒序获取ZREVRANGE leaderboard09WITHSCORES ZREVRANGEBYSCORE leaderboard2001006.3 删除操作# 删除元素ZREM leaderboardplayer1# 按排名删除ZREMRANGEBYRANK leaderboard09# 按分数删除ZREMRANGEBYSCORE leaderboard01006.4 应用场景# 排行榜ZADD game:rank1000player1ZADD game:rank2000player2ZREVRANGE game:rank09WITHSCORES# Top 10# 延时队列ZADD delay:queue1712345678task1# 时间戳作为分数# 热搜榜ZINCRBY hot:search1Redis教程ZREVRANGE hot:search09WITHSCORES七、高级数据类型7.1 Bitmaps 位图# 设置位SETBIT user:sign:2024:101# 第1天签到SETBIT user:sign:2024:111# 第2天签到# 获取位GETBIT user:sign:2024:10# 统计签到天数BITCOUNT user:sign:2024:1# 查找第一个0或1BITPOS user:sign:2024:107.2 HyperLogLog 基数统计# 添加元素PFADD uv:20240101user1user2user3# 获取基数估算值PFCOUNT uv:20240101# 合并多个HyperLogLogPFMERGE uv:total uv:20240101 uv:202401027.3 Geospatial 地理位置# 添加位置GEOADD locations116.40439.915北京GEOADD locations121.47431.230上海# 获取位置坐标GEOPOS locations北京# 计算两地距离GEODIST locations北京上海km# 查找附近位置GEORADIUS locations116.40439.915100km GEORADIUSBYMEMBER locations北京500km总结本文我们学习了✅String字符串、数值操作、应用场景✅Hash对象存储、购物车✅List消息队列、最新列表✅Set标签系统、集合运算✅ZSet排行榜、延时队列✅高级类型Bitmaps、HyperLogLog、Geospatial下篇预告Redis 从入门到精通三键操作命令详解作者刘~浪地球系列Redis 从入门到精通二更新时间2026-04-02

更多文章