采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
1、老师在课程里面讲string类型的,如果需要存储的数据超过现有的容量会1MB 1MB的扩容,那如果来的是很大的值,这样会不会太费时间了呀。 2、还有个问题就是老师说redis还是单线程进行存取数据,那后来新加的多线程是用在哪里了呢?
1、string类型的扩容机制,它其实是节省了存储空间,在一定程度上反而会提高性能2、多线程主要是解决两个问题,一个是提高CPU的利用率(以前单线程只能用1核);二是提高网络的IO处理能力,任务可以分摊 Redis 同步 IO 读写负荷
非常感谢!
看了老师的答案后依然有些懵懵懂懂,所以后来又查阅了《Redis设计与实现》一书。 String用到的是SDS结构,该结构除了保存数据data外还额外保存了当前数据长度length和空闲空间free。 传统程序中的字符串是不包含length和free的,每次修改支付串会同时让底层的数组进行空间重分配,会耗费很多性能。 而我们的redis的sds结构可以根据预空间分配策略减少空间多次重分配: 当扩容后大小小于1M,free会额外开出当前length的大小,以供下次扩容; 当扩容后大小大于1M,free会额外开除1M的大小(老师课程里讲的),以供下次扩容。 所以说这是一种空间换时间的方法: 1、减少每次统计length时O(n)的计算量,只生成或扩缩容时统计一次 2、采用预空间分配、惰性空间释放(缩容用)的优化机制,使传统的加长N次String就扩容N次变成了redis的加长N次最多扩容N次。
把刚学的消化后码一下,老师麻烦确认下,我码的是否有问题,不然消化错了也是麻烦事
登录后可查看更多问答,登录/注册
以项目整合Redis各种场景,从此轻松应对各类Redis难题
1.2k 11
2.2k 9
1.0k 8
743 7
1.0k 7