首页IT科技redis底层原理该如何回答(【Redis技术探索】「底层架构原理」探索分析服务核心数据结构介绍和案例)

redis底层原理该如何回答(【Redis技术探索】「底层架构原理」探索分析服务核心数据结构介绍和案例)

时间2025-06-20 20:59:54分类IT科技浏览4342
导读:Redis常用存储类型 Redis底层提供了5种数据结构:...

Redis常用存储类型

Redis底层提供了5种数据结构:字符串            、哈希                  、列表      、集合      、有序集合

下图非常形象的表示了数据结构:

字符串String

常用命令

EX seconds:设置失效时长            ,单位秒 PX milliseconds:设置失效时长                  ,单位毫秒 NX:key不存在时设置value      ,成功返回OK            ,失败返回(nil) XX:key存在时设置value                  ,成功返回OK      ,失败返回(nil)

SET key value [EX seconds] [PX milliseconds] [NX|XX]

批量存储字符串键值对 MSET key value [key value...] 设置一个不存在的key SETNX key value 获取key对应的value GET key 批量获取字符串键值 MGET key [key...] 删除一个键 DEL key [key...] 设置一个键的过期时间(秒) EXPIRE key seconds 原子操作 将key中储存的数字值加1 INCR key 将key中储存的数字值减1 DECR key 将key中储存的数字值加increment INCRBY key increment 将key中储存的数字值减decrement INCRBY key decrement

String应用场景

单值存储

SET sentinel:status 1 GET sentinel:status

对象存储

JSON格式 SET user:1001 {"userId":1001, "userName":"张三", "age":28} GET user:1001 MSET user:1001:name 张三 user:1001:age 28 MGET user:1001:name user:1001:age

分布式锁

返回1表示获取锁成功      ,返回0表示获取锁失败

SET lock:product:100001 1 EX 30 NX

处理成功后释放锁

DEL lock:product:100001

计数器

INCR article:readcount:18021 // 文章id为18021阅读数量+1 GET article:readcount:18021 // 查询文章id为18021阅读数量 DECR product:count:100001 // 产品id为100001库存-1 GET product:count:100001 // 查询产品id为100001库存

Web集群Session共享

SET sessionId {"userId":1001,"name":"张三","auth":""}

分布式全局主键id

INCRBY order:ids 1000 // 给订单服务生成1000个主键id

哈希Hash

存储一个哈希表key的键值

HSET key field value

存储一个不存在的哈希表key的键值

HSETNX key field value

存储多个哈希表key的键值

HMSET key field value [field value ...]

获取哈希表key对应的field键值

HGET key field

批量获取哈希表key中多个field键值

HMGET key field [field ...]

批量删除哈希表key中的field键值

HDEL key field [field ...]

返回哈希表key中field的数量

HLEN key

返回哈希表key中所有的键值

HGETALL key

删除key                  ,整个hash表全部删除

DEL key

为哈希表key中field键的值加上增量increment

HINCRBY key field increment

hash应用场景

存储对象 hmset userinfo id:1001:name 张三 id:1001:age 28 hmget userinfo id:1001:name id:1001:age hmset user:1001 id 1001 name 张三 age 28 expire user:1001 30 hgetall user:1001 电商购物车

用户id为key            ,商品id为field      ,商品数量为value

添加商品 hset cart:user:1001 10088 1 hset cart:user:1001 10072 1 hset cart:user:1001 10192 1 商品增加数量 hincrby cart:user:1001 10088 1 获取商品总数 hlen cart:user:1001 删除商品 hdel cart:user:1001 10072 查询商品列表 hgetall cart:user:1001 hash优缺点 优点

同类数据归类整合储存                  ,方便数据管理            ,相比string操作消耗内存与cpu更小,相比string储存更节省空间

缺点

过期功能只能设置在key上                  ,无法对field单独设置key                  ,一个key不能存太多的field

List集合

常用操作

list列表左边依次插入一个或多个value LPUSH list value [value ...] list列表右边依次插入一个或多个value RPUSH list value [value ...] 移除list列表最左边的元素并返回 LPOP list 移除list列表最右边的元素并返回 RPOP list 返回列表list中指定区间内的元素,区间以偏移量start和stop指定 LRANGE list start stop 从list列表中弹出最左边的元素            ,如果list为空则阻塞timeout秒 BLPOP list [timeout] 从list列表中弹出最右边的元素                  ,如果list为空则阻塞timeout秒 BRPOP list [timeout]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9UYjlSrn-1671096099930)(null)]

list实现数据结构

栈(FILO):LPUSH + LPOP 或 RPUSH + RPOP 队列(FIFO):LPUSH + RPOP 或 RPUSH + LPOP 阻塞队列:LPUSH + BRPOPRPUSH+BLPOP

list应用场景

消息队列

利用list的LPUSH + BRPOP实现一个消息队列      ,故而可以实现一个简单的点对点消息队列

点赞用户列表

利用RPUSH + LRANGE组合实现点赞用户列表功能

消息推送

利用LPUSH + LRANGE组合实现消息推送功能

Set集合

常用操作

往集合key中存入一个或多个元素            ,元素存在则忽略                  ,元素不存在则存入 SADD key [member] [member...] 从集合key中移除一个或多个元素      ,不存在的元素则忽略 SREM key [member] [member...] 获取集合key中所有元素 SMEMBERS key 获取集合key总个数 SCARD key 判断member元素在key集合中是否存在 SISMEMBER key member 从集合key中随机选择出count个元素      ,元素不从集合key中删除 SRANDMEMBER key [count] 从集合key中移除随机count个元素 SPOP key [count] 多个集合求交集 SINTER key [key...] 将交集结果存入destination集合中 SINTERSTORE destination key1 [key2] 将交集结果存入destination集合中 SUNION key1 [key2] 将并集结果存入destination集合中 SUNIONSTORE destination key1 [key2] 差集运算 SDIFF key1 [key2] 将差果存入destination集合中 SDIFFSTORE destination key1 [key2]

应用场景

抽奖小程序 奖品id为1001的抽奖添加10293用户 SADD draw:prizes:1001 10293 查看所有参与抽奖用户 SMEMBERS draw:prizes:1001 抽奖 SPOP draw:prizes:1001 SPOP draw:prizes:1001 N 点赞                  、收藏功能 收藏 用户id为29102收藏了文章id为1001 SADD collect:article:1001 29102 取消收藏 用户id为29102取消收藏文章id为1001 SREM collect:article:1001 29102 检查用户是否收藏 SISMEMBER collect:article:1001 29102 获取收藏的用户列表 SMEMBERS collect:article:1001 获取收藏用户数 SCARD collect:article:1001

ZSet有序集合

常用操作

向有序集合添加一个或多个成员                  ,或者更新已存在成员的分数 ZADD key score1 member1 [score2 member2] 从有序集合key中删除key ZREM key member [member...] 返回有序集合key中元素member的分值 ZSCORE key member 为有序集合key中元素member的分值加上increment ZINCRBY key increment member 返回有序集合key中元素个数 ZCARD key 正序获取有序集合key从start下标到stop下标的元素 ZRANGE key start stop [WITHSCORES] 倒序获取有序集合key从start下标到stop下标的元素 ZREVRANGE key start stop [WITHSCORES] 并集计算 ZUNIONSTORE destkey numkeys key [key ...] 交集计算 ZINTERSTORE destkey numkeys key [key ...]

应用场景

排行榜功能 文章id10001在20210426日被点击一次 ZINCRBY hotnews:20210426 1 10001 展示当天热点前十新闻 ZREVRANGE hotnews:20210426 0 10 WITHSCORES 七日搜索榜单计算 ZUNIONSTORE hotnews:20210426-20210502 hotnews:20210426 hotnews:20210427 ... hotnews:20210502 展示七日排行前十 ZREVRANGE hotnews:20210426-20210502 0 10 WITHSCORES

Redis为什么每秒支持10w并发

单线程设计            ,避免线程上下文切换 基于内存操作运算 使用IO多路复用技术实现对多个并发请求的响应

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
光纤测速的优缺点(在线光纤网速测试怎么弄?)