您好,欢迎来到年旅网。
搜索
您的当前位置:首页【redis进阶】基础知识简要回顾

【redis进阶】基础知识简要回顾

来源:年旅网

1. 常见功能介绍

聚合统计

使用list集合的差集、并集来统计

排序统计

SortedSet(ZSet)统计,再利用分页列出权重高的元素

二值状态统计

BitMap存储,获取并统计

SETBIT uid:sign:3000:202008 2 1 


GETBIT uid:sign:3000:202008 2 

统计8月份签到情况

BITCOUNT uid:sign:3000:202008
基数统计

数据量小的时候可以用Set或hash

数据量大的时候可以HyperLogLog


PFADD page1:uv user1 user2 user3 user4 user5


PFCOUNT page1:uv

注意:HyperLogLog 的统计规则是基于概率完成的,所以它给出的统计结果是有一定误差的,标准误算率是 0.81%。这也就意味着,你使用 HyperLogLog 统计的 UV 是 100 万,但实际的 UV 可能是 101 万。虽然误差率不算大,但是,如果你需要精确统计结果的话,最好还是继续用 Set 或 Hash 类型。

2. 一个键值数据库应该包含什么?

Redis 主要通过网络框架进行访问,而不再是动态库了,这也使得 Redis 可以作为一个基础性的网络服务进行访问,扩大了 Redis 的应用范围。

Redis 的持久化模块能支持两种方式:日志(AOF)和快照(RDB),这两种持久化方式具有不同的优劣势,影响到 Redis 的访问性能和可靠性。

Redis 支持高可靠集群和高可扩展集群,因此,Redis 中包含了相应的集群功能支撑模块。

3. redis常见的数据结构

redis渐进式rehash

压缩列表

zlbytes、zltail 和 zllen,分别表示列表长度、列表尾的偏移量和列表中的 entry 个数

第一个元素和最后一个元素复杂度为O(1),其他为O(N)

跳表

在链表的基础上加了多级索引

查找复杂度为O(logN)

思考

整数数组和压缩列表在查找时间复杂度方面并没有很大的优势,那为什么 Redis 还会把它们作为底层数据结构呢?

1、内存利用率,数组和压缩列表都是非常紧凑的数据结构,它比链表占用的内存要更少。Redis是内存数据库,大量数据存到内存中,此时需要做尽可能的优化,提高内存的利用率。

2、数组对CPU高速缓存支持更友好,所以Redis在设计时,集合数据元素较少情况下,默认采用内存紧凑排列的方式存储,同时利用CPU高速缓存不会降低访问速度。当数据元素超过设定阈值后,避免查询时间复杂度太高,转为哈希和跳表数据结构存储,保证查询效率。

如果在数组上是随机访问,对CPU高速缓存还友好不?

如果在数组上是随机访问,会造成 CPU 高速缓存整个缓存行失效,命中率降低。(取决于数组的大小)

4. 高性能IO模型:为什么单线程Redis能那么快?

为什么使用单线程?

大部分线程也在等待获取

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务