![a5966fcae8b37fdcf7039180b52d202e.png](https://i-blog.csdnimg.cn/blog_migrate/e5d5a4d8ccd00ba65101c92b34426f4a.jpeg)
一、Redis有哪些常用的应用场景
![819d5f46eead8fa62b5db8cad767bcfb.png](https://i-blog.csdnimg.cn/blog_migrate/53705c2455ff989b4779531059cd40dd.jpeg)
二、Redis选型思考
时延
时延=后端发起请求db(用户态拷贝请求到内核态)+ 网络时延 + 数据库寻址和读取
如果想要降低时延,只能减少请求数(合并多个后端请求)和减少数据库寻址和读取得时间。从降低时延的角度,基于单线程和内存的redis,每秒10万次得读写性能肯定远远胜过磁盘读写性能。
数据规模
以redis一组K-V为例(”hello” -> “world”),一个简单的set命令最终会产生4个消耗内存的结构。
![e44fa87f6f7038cd906dd268dba3e61b.png](https://i-blog.csdnimg.cn/blog_migrate/d638ff68a3436a70c723e3e439d0f801.jpeg)
关于Redis数据存储的细节,又要涉及到内存分配器(如jemalloc),简单说就是存储170字节,其实内存分配器会分配192字节存储。
![004afc3b2f9415827fb4893af5423016.png](https://i-blog.csdnimg.cn/blog_migrate/c43693b64e141d7ebdf6e2967c7b7f52.jpeg)
那么总的花费就是
- 一个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字节的内存块
综上,一个dictEntry需要32+16+16+16=80个字节。
03