需求實現技術方案1、登入有效期固定7天
2、活體驗證成功有效期通過字典配置,預設為7天
3、活體驗證失敗次數通過字典配置,預設為3次,超過3次,賬戶鎖定
24小時有效期,使用者啟用後,刪除快取;
一旦驗證成功,刪除快取;
4、使用者裝置繫結數量通過字典配置,預設2臺
1、利用redis的sortedset有序集合,繫結多台裝置,以及踢出功能
2、利用redis的hash實現登入狀態快取
一、封裝sortedset api
@override
public boolean exists(string key, string member)
@override
public boolean zadd(string key, string value, double score)
@override
public long zsize(string key)
@override
public double zscore(string key, string member)
@override
public long remove(string key, string... members)
@override
public long removerange(string key, long start, long end)
2、踢出邏輯//超出指定繫結數量且未繫結當前裝置
long bindingsize = cacheservice.zsize(devicebindingkey);
if (bindingsize >= maxdevicebindingcount)
setset = redistemplate.opsforzset().range(devicebindingkey, startindex, -1);
listmemberlist = set.stream().collect(collectors.tolist());
cacheservice.removerange(devicebindingkey, startindex, -1);
tokenservice.disabletoken(userid, memberlist);
cacheservice.zadd(devicebindingkey, deviceid, double.valueof(tokenservice.getdeviceexpiretime()));
} else if (bindingsize > 0) else if (bindingsize == 0) else
// 加入快取
targetuserbinddevicelist.stream().foreach(userbinddevice -> cacheservice.zadd(devicebindingkey, userbinddevice.getdeviceid(), double.valueof(userbinddevice.getexpiretime().gettime())));
}// 繫結當前裝置,覆蓋超時時間
cacheservice.zadd(devicebindingkey, deviceid, double.valueof(tokenservice.getdeviceexpiretime()));
}
單機測試sortedset/**
* zset有序集合和set集合都是string型別元素的集合,且不允許重複的元素。
* 不同的是zset的每個元素都會關聯乙個double型別的分數,用於從小到大進行排序。
* 集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是o(1)。
* 集合中最大的成員數為 2^32 - 1 (4294967295, 每個集合可儲存40多億個元素)。
*/public static void operatezset()
//按照分數[起,止]倒序遍歷元素
log.info("jedis.zrevrangebyscore(): " + jedis.zrevrangebyscore("salary", 1000, 4000));
//獲取元素[起,止]分數區間的元素數量
log.info("jedis.zcount(): " + jedis.zcount("salary", 1000, 4000));
//獲取元素score值:薪資
log.info("jedis.zscore(): " + jedis.zscore("salary", "u01"));
//獲取元素的下標
log.info("jedis.zrank(u01): " + jedis.zrank("salary", "u01"));
//倒序獲取元素的下標
log.info("jedis.zrevrank(u01): " + jedis.zrevrank("salary", "u01"));
//刪除元素
log.info("jedis.zrem(): " + jedis.zrem("salary", "u01", "u02"));
//刪除元素,通過下標範圍
log.info("jedis.zremrangebyrank(): " + jedis.zremrangebyrank("salary", 0, 1));
//刪除元素,通過分數範圍
log.info("jedis.zremrangebyscore(): "
+ jedis.zremrangebyscore("salary", 20000, 30000));
//按照下標[起,止]遍歷元素
log.info("jedis.zrange(): " + jedis.zrange("salary", 0, -1));
mapmembers2 = new hashmap();
members2.put("u11", 1136.0);
members2.put("u12", 2212.0);
members2.put("u13", 3324.0);
//批量新增元素
jedis.zadd("salary", members2);
//增加指定分數
log.info("jedis.zincrby(10000): " + jedis.zincrby("salary", 10000, "u13"));
//按照下標[起,止]遍歷元素
log.info("jedis.zrange(): " + jedis.zrange("salary", 0, -1));
jedis.close();
}
openapi 使用者繫結(passport
支援所有外部平台的使用者介面功能 主要就是使用者繫結和使用者解綁等功能。設計的難點和重點 1 安全性 2 整合性 開放平台,是乙個支援外部環境介面的開發空間,本人原來狹窄的認為那只是乙個提供資料來源的平台。自從使用者繫結專案之後,對開放平台有了新的認識。開放平台不能只有資料,還要展示。所以在這些的o...
app 使用者體驗三
快體驗 有多重因素組成,包括外部環境的網路速度,產品本身的技術能力,互動策略制定,快體驗的感知設計等。我們分解使用者乙個事件的操作過程 發出操作指令前 執行過程 結果呈現 並針對每個環節總結的幾個方法。一 發出操作指令前提前載入資料 提前載入資料是在 使用者即將發出操作指令前,後台預先快取到本地資料...
給批量使用者設磁碟配額
1 先給乙個已存在的使用者建好配額 a 修改 etc fstab檔案 如 label ext3 defaults,usrquota,grquota 1 1 b 重新啟動系統使設定生效 reboot c 建立配額檔案 quotacheck cmug 檢視已建立的配額檔案 ls aquota.d 設定配...