上海注册建网站,网站创意设计方案,做网站先做母版页,网站如何吸引人Redis 支持的主要数据结构及其对应操作命令的详细解释#xff0c;结合具体使用场景和示例#xff1a; 1. 字符串#xff08;String#xff09; 用途#xff1a;存储文本、数值或二进制数据#xff0c;适用于缓存、计数器等。 常用命令#xff1a; SET key value#x…Redis 支持的主要数据结构及其对应操作命令的详细解释结合具体使用场景和示例 1. 字符串String 用途存储文本、数值或二进制数据适用于缓存、计数器等。 常用命令 SET key value设置键值对。GET key获取键对应的值。INCR key将键的值递增1原子操作。EXPIRE key seconds设置键的过期时间。 示例 SET user:1001:name Alice # 存储用户名
GET user:1001:name # 返回 Alice
INCR article:123:views # 文章阅读量1场景 1缓存用户 Token # 存储 Token有效期 1 小时
SET user:1001:token abc123 EX 3600
# 返回OK# 获取 Token
GET user:1001:token
# 返回abc123# 检查剩余过期时间
TTL user:1001:token
# 返回3590剩余秒数场景 2计数器文章阅读量 # 初始化阅读量
SET article:2001:views 0
# 返回OK# 阅读量 1
INCR article:2001:views
# 返回1递增后的值# 批量递增5
INCRBY article:2001:views 5
# 返回6场景 3分布式锁 # 尝试获取锁有效期 10 秒
SET order:lock process123 NX PX 10000
# 返回OK获取成功或 nil失败# 释放锁需值匹配
EVAL if redis.call(get, KEYS[1]) ARGV[1] then return redis.call(del, KEYS[1]) else return 0 end 1 order:lock process123
# 返回1删除成功或 0失败2. 哈希Hash 用途存储对象字段适合保存用户信息、商品属性等结构化数据。 常用命令 HSET key field value设置哈希字段值。HGET key field获取哈希字段值。HGETALL key获取所有字段和值。 示例 HSET user:1001 age 30 email aliceexample.com # 存储用户信息
HGET user:1001 age # 返回 30
HGETALL user:1001 # 返回所有字段和值场景 1存储用户信息 # 添加用户字段
HSET user:1001 name Alice age 30 email aliceexample.com
# 返回3添加的字段数# 获取单个字段
HGET user:1001 name
# 返回Alice# 获取所有字段
HGETALL user:1001
# 返回
# 1) name
# 2) Alice
# 3) age
# 4) 30
# 5) email
# 6) aliceexample.com场景 2商品库存管理 # 设置商品库存
HSET product:5001 stock 100 price 2999
# 返回2# 扣减库存原子操作
HINCRBY product:5001 stock -1
# 返回99# 获取价格
HGET product:5001 price
# 返回2999场景 3配置中心 # 存储服务配置
HSET service:config timeout 5000 retry 3 enable_cache true
# 返回3# 修改配置
HSET service:config timeout 10000
# 返回0字段已存在仅更新# 删除配置字段
HDEL service:config retry
# 返回13. 列表List 用途实现消息队列、最新消息列表如微博时间线。 常用命令 LPUSH key value从列表左侧插入元素。RPOP key从列表右侧弹出元素。LRANGE key start end获取列表范围内的元素。 示例 LPUSH news:latest Article 1 # 插入最新新闻
LPUSH news:latest Article 2
LRANGE news:latest 0 4 # 获取前5条新闻场景 1消息队列 # 生产者推送任务
LPUSH task:queue send_email:user1 generate_report:user2
# 返回2队列长度# 消费者获取任务
RPOP task:queue
# 返回send_email:user1# 查看队列剩余任务
LRANGE task:queue 0 -1
# 返回1) generate_report:user2场景 2最新消息列表 # 插入最新新闻
LPUSH news:latest Article 3 Article 2 Article 1
# 返回3# 获取前 2 条新闻
LRANGE news:latest 0 1
# 返回
# 1) Article 1
# 2) Article 2场景 3阻塞队列 # 消费者阻塞等待任务超时 10 秒
BRPOP task:queue 10
# 返回如果有任务
# 1) task:queue
# 2) generate_report:user24. 集合Set 用途存储唯一元素支持交集、并集操作如共同好友、标签系统。 常用命令 SADD key member添加元素到集合。SMEMBERS key获取集合所有元素。SINTER key1 key2计算多个集合的交集。 示例 SADD user:1001:follows 2001 2002 # 用户1001关注2001和2002
SADD user:1002:follows 2001 2003
SINTER user:1001:follows user:1002:follows # 返回共同关注用户2001场景 1标签系统 # 添加文章标签
SADD article:3001:tags tech redis database
# 返回3# 查找共同标签
SINTER article:3001:tags article:3002:tags
# 返回假设 article:3002 有 tech 和 cloud
# 1) tech场景 2抽奖活动 # 添加参与者
SADD lottery:2023 user100 user200 user300
# 返回3# 随机抽取 1 名中奖者
SRANDMEMBER lottery:2023
# 返回user200随机结果# 移除并返回中奖者
SPOP lottery:2023
# 返回user100场景 3黑白名单 # 添加黑名单用户
SADD blacklist:ip 192.168.1.1 192.168.1.2
# 返回2# 检查 IP 是否在黑名单
SISMEMBER blacklist:ip 192.168.1.1
# 返回1存在5. 有序集合Sorted Set 用途排行榜、优先级队列按分数排序。 常用命令 ZADD key score member添加带分数的成员。ZRANGE key start end [WITHSCORES]按分数升序返回成员。ZREVRANGE key start end按分数降序返回成员。 示例 ZADD game:leaderboard 1500 PlayerA # 添加玩家分数
ZADD game:leaderboard 2000 PlayerB
ZREVRANGE game:leaderboard 0 9 WITHSCORES # 返回前10名玩家场景 1游戏排行榜 # 添加玩家分数
ZADD game:leaderboard 1500 PlayerA 2000 PlayerB 1800 PlayerC
# 返回3# 获取前 3 名降序
ZREVRANGE game:leaderboard 0 2 WITHSCORES
# 返回
# 1) PlayerB
# 2) 2000
# 3) PlayerC
# 4) 1800
# 5) PlayerA
# 6) 1500场景 2延时任务 # 添加任务时间戳为分数
ZADD tasks:delayed 1672531200 task1 1672617600 task2
# 返回2# 获取当前需处理的任务分数 当前时间戳
ZRANGEBYSCORE tasks:delayed -inf 1672531200
# 返回1) task1场景 3热搜榜单 # 更新关键词热度
ZINCRBY hot:keywords 1 redis
# 返回1当前分数ZINCRBY hot:keywords 1 java
# 返回1# 获取 Top 10 热搜词
ZREVRANGE hot:keywords 0 9 WITHSCORES
# 返回
# 1) redis
# 2) 1
# 3) java
# 4) 16. 地理位置GEO 用途存储和查询地理位置附近的人、商家。 常用命令 GEOADD key longitude latitude member添加地理坐标。GEODIST key member1 member2 [unit]计算两地距离。GEORADIUS key longitude latitude radius unit查找范围内的成员。 示例 GEOADD restaurants 116.404269 39.913818 RestaurantA # 添加餐厅坐标
GEORADIUS restaurants 116.405 39.914 2 km WITHDIST # 查找2公里内的餐厅场景 1附近餐厅查询 # 添加餐厅坐标
GEOADD restaurants 116.404269 39.913818 RestaurantA 116.407531 39.915264 RestaurantB
# 返回2# 查找 1 公里内的餐厅
GEORADIUS restaurants 116.405285 39.912987 1 km WITHDIST
# 返回
# 1) 1) RestaurantA
# 2) 0.8923场景 2计算距离 # 计算两餐厅距离
GEODIST restaurants RestaurantA RestaurantB km
# 返回0.312公里场景 3获取坐标 # 获取餐厅坐标
GEOPOS restaurants RestaurantA
# 返回
# 1) 1) 116.404269
# 2) 39.9138187. 位图Bitmap 用途位操作如用户签到、活跃统计。 常用命令 SETBIT key offset value设置位的值0或1。GETBIT key offset获取位的值。BITCOUNT key统计值为1的位数。 示例 SETBIT user:1001:sign:202310 5 1 # 用户1001在10月6日签到
BITCOUNT user:1001:sign:202310 # 统计本月签到天数场景 1用户签到 # 用户 1001 在 10 月 1 日签到偏移量 0
SETBIT user:1001:sign:202310 0 1
# 返回0之前位的值# 检查 10 月 1 日是否签到
GETBIT user:1001:sign:202310 0
# 返回1场景 2活跃用户统计 # 统计 10 月累计签到天数
BITCOUNT user:1001:sign:202310
# 返回3假设签到 3 天场景 3权限控制 # 设置权限位位 0: 读位 1: 写
SETBIT user:1001:permissions 0 1
SETBIT user:1001:permissions 1 0
# 检查写权限
GETBIT user:1001:permissions 1
# 返回0无权限8. HyperLogLog 用途近似去重计数如统计UV。 常用命令 PFADD key element添加元素。PFCOUNT key统计唯一元素数量。 示例 PFADD daily_uv:20231001 user1 user2 # 记录当日访问用户
PFCOUNT daily_uv:20231001 # 返回近似UV数场景 1UV 统计 # 记录用户访问
PFADD daily_uv:20231001 user1 user2 user1
# 返回1新增唯一用户数# 获取当日 UV
PFCOUNT daily_uv:20231001
# 返回2场景 2合并多日 UV # 合并 10 月 1 日和 2 日的 UV
PFMERGE weekly_uv:20231001-07 daily_uv:20231001 daily_uv:20231002
# 返回OK# 获取周 UV
PFCOUNT weekly_uv:20231001-07
# 返回5假设两日共有 5 个唯一用户9. 流Stream 用途消息队列支持消费者组、消息持久化。 常用命令 XADD key * field1 value1添加消息。XREAD COUNT num STREAMS key $读取消息。XGROUP CREATE key groupname $创建消费者组。 示例 XADD order:stream * user Alice product Phone # 发布订单消息
XREAD COUNT 10 STREAMS order:stream 0 # 读取消息场景 1订单消息队列 # 发布订单消息
XADD orders:* user_id 1001 product_id 2001 status created
# 返回1672531200000-0消息 ID# 读取最新消息
XREAD COUNT 1 STREAMS orders:*
# 返回
# 1) 1) orders:*
# 2) 1) 1) 1672531200000-0
# 2) 1) user_id
# 2) 1001
# 3) product_id
# 4) 2001
# 5) status
# 6) created场景 2消费者组 # 创建消费者组
XGROUP CREATE orders:stream order_group $
# 返回OK# 消费者读取消息
XREADGROUP GROUP order_group consumer1 COUNT 1 STREAMS orders:stream
# 返回同上消息内容10. 发布/订阅Pub/Sub 用途消息广播如实时通知、聊天室。 常用命令 PUBLISH channel message发布消息到频道。SUBSCRIBE channel订阅频道。 示例 SUBSCRIBE news_updates # 订阅新闻频道
PUBLISH news_updates Redis 7.0 released! # 发布新闻场景 1实时通知 # 订阅新闻频道
SUBSCRIBE news
# 返回
# 1) subscribe
# 2) news
# 3) (integer) 1# 发布新闻
PUBLISH news Redis 7.0 released!
# 订阅者接收
# 1) message
# 2) news
# 3) Redis 7.0 released!场景 2多频道订阅 # 订阅多个频道
PSUBSCRIBE news.*
# 发布到 news.tech
PUBLISH news.tech New Redis features
# 订阅者接收
# 1) pmessage
# 2) news.*
# 3) news.tech
# 4) New Redis features总结
通过以上示例可以得出如下总结
数据结构典型场景核心命令String缓存、计数器SET, GET, INCRHash对象存储HSET, HGET, HGETALLList消息队列、最新列表LPUSH, RPOP, LRANGESet标签、共同好友SADD, SMEMBERS, SINTERSorted Set排行榜、优先级任务ZADD, ZRANGE, ZREVRANGEGEO地理位置查询GEOADD, GEORADIUSBitmap用户签到、布尔统计SETBIT, GETBIT, BITCOUNTHyperLogLog大数据去重计数PFADD, PFCOUNTStream消息队列支持消费者组XADD, XREAD, XGROUPPub/Sub实时消息广播PUBLISH, SUBSCRIBE
通过合理选择数据结构和命令可以高效解决缓存、实时统计、消息通信等多样化需求。