Redis应用场景以及案例代码
2023-12-13 20:09:52
Redis应用场景以及案例代码
1、基本数据类型
1.1、String类型
# 场景1: 缓存数据
# 设置缓存
SETEX user:12345:profile 3600 '{"username": "Alice", "email": "alice@example.com"}'
# 获取缓存
GET user:12345:profile
# 删除缓存
DEL user:12345:profile
# 场景2: 计数器
# 增加计数器
INCR user:12345:login_count
# 获取计数器值
GET user:12345:login_count
# 重置计数器
DEL user:12345:login_count
# 场景3: 会话管理
# 存储会话信息
SETEX session:abcd1234 1800 '{"user_id": 12345, "expiration": "2023-12-31 23:59:59"}'
# 获取会话信息
GET session:abcd1234
# 删除会话信息
DEL session:abcd1234
1.2、List类型
# 场景1: 消息队列
# 添加消息到队列末尾
RPUSH message_queue "Message 1"
RPUSH message_queue "Message 2"
# 获取队列头部的消息(消费消息)
LPOP message_queue
# 场景2: 实时日志
# 记录日志消息到列表开头
LPUSH log_messages "2023-12-09 15:30: Error: Server crashed"
LPUSH log_messages "2023-12-09 16:15: Warning: High CPU usage"
# 获取最近的日志消息
LRANGE log_messages 0 9
# 场景3: 任务队列
# 添加任务到队列末尾
RPUSH task_queue "Task ID: 123"
RPUSH task_queue "Task ID: 124"
# 获取队列头部的任务(执行任务)
LPOP task_queue
1.3、Set类型
# 场景1: 用户标签
# 添加标签到用户的集合中
SADD user:123:tags "Tag1" "Tag2" "Tag3"
# 获取用户的所有标签
SMEMBERS user:123:tags
# 删除用户的某个标签
SREM user:123:tags "Tag2"
# 场景2: 社交网络好友
# 添加好友关系到用户的集合中
SADD user:123:friends 456 789 101
# 获取用户的所有好友
SMEMBERS user:123:friends
# 删除某个好友关系
SREM user:123:friends 789
# 场景3: 喜好爱好
# 添加喜好项目到用户的集合中
SADD user:123:hobbies "Reading" "Cooking" "Hiking"
# 获取用户的所有喜好项目
SMEMBERS user:123:hobbies
# 删除某个喜好项目
SREM user:123:hobbies "Cooking"
1.4、ZSet(Sorted Set)类型
# 场景1: 积分排行榜
# 添加用户及其分数到排行榜
ZADD leaderboard 1000 "PlayerA" 900 "PlayerB" 1200 "PlayerC" 800 "PlayerD"
# 获取排行榜前3名
ZRANGE leaderboard 0 2 WITHSCORES
# 从排行榜中移除某个玩家
ZREM leaderboard "PlayerD"
# 场景2: 待办任务列表(按截止日期排序)
# 添加待办任务及其截止日期到有序集合
ZADD todo_list 1639515600 "TaskA" 1639708400 "TaskB" 1639224000 "TaskC"
# 获取最近截止日期的任务
ZRANGE todo_list 0 2
# 删除已完成任务或过期任务
ZREMRANGEBYRANK todo_list 0 0
# 场景3: 股票排名(按股价排序)
# 添加股票及其股价到排名列表
ZADD stock_ranking 150 "StockA" 130 "StockB" 160 "StockC" 120 "StockD"
# 获取股价排名前5名
ZRANGE stock_ranking 0 4 WITHSCORES
# 移除退市或不感兴趣的股票
ZREMRANGEBYRANK stock_ranking 4 -1
1.5、Hash类型
# 场景1: 用户信息存储
# 存储用户详细信息
HMSET user_info:12345 username "Alice" email "alice@example.com" age 30
# 获取用户信息字段
HGET user_info:12345 username
# 删除用户信息的邮箱字段
HDEL user_info:12345 email
# 场景2: 产品属性存储
# 存储产品的属性信息
HMSET product:1001 name "Laptop" price 999 brand "BrandX"
# 获取产品的价格
HGET product:1001 price
# 删除产品的名称字段
HDEL product:1001 name
# 场景3: 配置管理
# 存储应用程序的配置参数
HMSET app_config cache_enabled true max_connections 100 log_level "info"
# 获取日志级别配置
HGET app_config log_level
# 删除缓存开关配置
HDEL app_config cache_enabled
2、特殊数据类型
2.1、HyperLogLog(HLL)基数
# 场景1: 统计独立访问用户数
# 添加用户访问记录到 HyperLogLog 数据结构
PFADD daily_visitors "user1" "user2" "user3" "user4"
# 统计独立访问用户数
PFCOUNT daily_visitors
# 场景2: 统计在线用户数
# 添加在线用户到 HyperLogLog 数据结构
PFADD online_users "userA" "userB" "userC" "userD"
# 统计在线用户数
PFCOUNT online_users
# 场景3: 统计唯一搜索查询
# 添加搜索查询到 HyperLogLog 数据结构
PFADD unique_searches "query1" "query2" "query3" "query4"
# 统计唯一搜索查询数
PFCOUNT unique_searches
2.2、BitMap类型
# Bitmaps(位图)场景示例
# 场景1: 用户在线状态跟踪
# 使用位图记录用户的在线状态,每一位表示一分钟的在线状态。
SETBIT user:123:online 0 1 # 用户在第1分钟在线
SETBIT user:123:online 30 1 # 用户在第31分钟在线
SETBIT user:123:online 59 1 # 用户在第60分钟在线
# 获取用户在某一分钟的在线状态。
GETBIT user:123:online 30 # 检查用户是否在第31分钟在线
# 场景2: 用户签到记录
# 使用位图记录用户的签到情况,每一位表示一天,位的值表示用户是否签到。
SETBIT user:456:checkins 0 1 # 用户在第1天签到
SETBIT user:456:checkins 7 1 # 用户在第8天签到
SETBIT user:456:checkins 15 1 # 用户在第16天签到
# 统计用户连续签到的天数。
BITCOUNT user:456:checkins
2.3、Geospatial类型
# Geospatial(地理空间)场景示例
# 场景1: 商店位置查询
# 存储商店的地理位置信息。
GEOADD stores -73.9806 40.7648 "StoreA"
GEOADD stores -74.0089 40.7128 "StoreB"
GEOADD stores -73.9897 40.7394 "StoreC"
# 查询附近的商店。
GEORADIUS stores -73.9840 40.7591 5 km
# 场景2: 飞机航班距离计算
# 存储飞机航班的起始和终点坐标。
GEOADD flights -73.8734 40.7736 "JFK" -87.9047 41.9786 "ORD"
GEOADD flights -118.4075 33.9434 "LAX" -71.2760 42.3631 "BOS"
# 计算航班的距离。
GEODIST flights "JFK" "ORD" km
文章来源:https://blog.csdn.net/weixin_52236586/article/details/134896193
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!