app使用者繫結多台裝置實現踢出功能

2021-10-09 11:39:03 字數 3355 閱讀 8864

需求

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 設定配...