有序集合为何能同时支持点查询和范围查询
有序集合为何能同时支持点查询和范围查询有序集合(Sorted Set)是Redis中一种重要的数据类型,它本身是集合类型,同时可以支持集合中元素带有权重,并按照权重进行排序。
而我们知道SortedSet中的两个方法
ZRANGEBYSCORE: 按照元素权重返回一个范围内的元素
ZSCORE: 返回某个元素的权重值
为什么这两个方法的时间复杂度一个为O(logN) + M 和 O(1)呢?
因为有序集合底层设计采用了两种数据结构,一种是大家都知道的SkipList(跳跃链表)另外一种就是HashMap(Hash表)
注意:
Redis对同一种数据结构会使用多种编码进行表示,当满足以下条件的时候,使用的是压缩链表代替了跳跃链表。
12#define REDIS_ZSET_MAX_ZIPLIST_ENTRIES 128 // 有序集合保存的元素数量小于等于128#define REDIS_ZSET_MAX_ZIPLIST_VALUE 64 // 有序集合保存的元素每个长度都小于64字节
跳跃表的设计与实现例图**跳跃链表是一种多层有序链表,**我们把跳表的层次从低到高称为Lev ...
单点登录
单点登录什么是单点登录?举个场景,假设我们的系统被切割为N个部分:商城、论坛、直播、社交…… 如果用户每访问一个模块都要登录一次,那么用户将会疯掉, 为了优化用户体验,我们急需一套机制将这N个系统的认证授权互通共享,让用户在一个系统登录之后,便可以畅通无阻的访问其它所有系统。
单点登录可以做到:**在多个互相信任的系统中,用户只需登录一次,就可以访问所有系统。**
三种单点登录模式1: 前端同域,后端同Redis
2: 前端不同域,后端同Redis
3: 前端不同域,后端不同Redis
前端同域,后端同Redis这种情况,多个前端部署的域名同域,后端可以访问同一个Redis。我们可以通过共享Cookie的方式进行单点登录。
1: 使用共享Cookie的方式来解决前端Token共享的问题
2: 使用Redis在不同的后端来解决Session共享的问题
所谓共享Cookie,就是主域名Cookie在二级域名下的共享,举个例子:写在父域名stp.com下的Cookie,在s1.stp.com、s2.stp.com等子域名都是可以共享访问的。
前端不同域,后端同Redis这种情况会导致我们共享 ...
HttpServletRequest#getParameter
HttpServletRequest#getParameter以Tomcat容器实现为例
实现类为org.apache.catalina.connector.Request
关键代码12345678@Overridepublic String getParameter(String name) { // 确保一个Request只会执行一次解析 if (!parametersParsed) { parseParameters(); } ····}
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113prot ...