redis实践及思考

本文探讨了Redis在实际应用中的性能优化,包括时延分析、数据规模考量、需求特点分析,以及HGETALL、pipeline的使用。文章揭示了Pipeline优化的原理,并对比了redis cluster和codis两种分布式解决方案,强调技术方案选择需基于数据和逻辑分析。
摘要由CSDN通过智能技术生成

640?wx_fmt=gif

导语:当面临存储选型时是选择关系型还是非关系型数据库?如果选择了非关系型的redis,redis常用数据类型占用内存大小如何估算的?redis的性能瓶颈又在哪里?


背景

前段时间接手了一个业务,响应时间达到10s左右。阅读源码后发现,每一次请求都是查询多个分表数据(task1,task2….),然后再join其他表(course,teacher..),时间全部花在了大量磁盘I/O上。脑袋一拍,重构,上redis!


为什么选择redis

拍脑袋做技术方案肯定是不行的,得用数据和逻辑说服别人才可以。


时延

时延=后端发起请求db(用户态拷贝请求到内核态)+ 网络时延 + 数据库寻址和读取


如果想要降低时延,只能减少请求数(合并多个后端请求)和减少数据库寻址和读取得时间。从降低时延的角度,基于单线程和内存的redis,每秒10万次得读写性能肯定远远胜过磁盘读写性能。


数据规模

以redis一组K-V为例(”hello” -> “world”),一个简单的set命令最终会产生4个消耗内存的结构。

640

关于Redis数据存储的细节,又要涉及到内存分配器(如jemalloc),简单说就是存储170字节,其实内存分配器会分配192字节存储。

640

那么总的花费就是

  • 一个dictEntry,24字节,jemalloc会分配32字节的内存块

  • 一个redisObject,16字节,jemalloc会分配16字节的内存块

  • 一个key,5字节,所以SDS(key)需要5+9=14个字节,jemalloc会分配16字节的内存块

  • 一个value,5字节,所以SDS(value)需要5+9=14个字节,jemalloc会分配16字节的内存块

综上&#x

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值