Files
sa-token/sa-token-doc/doc/up/search-session.md

50 lines
1.6 KiB
Markdown
Raw Normal View History

2021-01-07 22:03:44 +08:00
# 会话治理
2022-07-04 11:48:29 +08:00
尽管框架将大部分操作提供了简易的封装,但在一些特殊场景下,我们仍需要绕过框架,直达数据底层进行一些操作。
Sa-Token提供以下API助你直接操作会话列表
2021-01-07 22:03:44 +08:00
---
## 具体API
``` java
2021-01-31 23:28:42 +08:00
// 查询所有token
2022-08-11 01:52:28 +08:00
StpUtil.searchTokenValue(String keyword, int start, int size, boolean sortType);
2021-01-07 22:03:44 +08:00
2021-01-31 23:28:42 +08:00
// 查询所有账号Session会话
2022-08-11 01:52:28 +08:00
StpUtil.searchSessionId(String keyword, int start, int size, boolean sortType);
2021-01-07 22:03:44 +08:00
2021-01-31 23:28:42 +08:00
// 查询所有令牌Session会话
2022-08-11 01:52:28 +08:00
StpUtil.searchTokenSessionId(String keyword, int start, int size, boolean sortType);
2021-01-07 22:03:44 +08:00
```
#### 参数详解:
2022-07-04 11:48:29 +08:00
- `keyword`: 查询关键字,只有包括这个字符串的 token 值才会被查询出来。
- `start`: 数据开始处索引, 值为-1时代表一次性取出所有数据。
- `size`: 要获取的数据条数。
2022-08-11 01:52:28 +08:00
- `sortType`: 排序方式true=正序false=反序)。
2021-01-07 22:03:44 +08:00
使用示例:
``` java
2021-01-10 00:15:23 +08:00
// 查询value包括1000的所有token结果集从第0条开始返回10条
2022-08-11 01:52:28 +08:00
List<String> tokenList = StpUtil.searchTokenValue("1000", 0, 10, true);
2021-01-10 00:15:23 +08:00
for (String token : tokenList) {
System.out.println(token);
}
2021-01-07 22:03:44 +08:00
```
<br/>
#### 注意事项:
由于会话查询底层采用了遍历方式获取数据,当数据量过大时此操作将会比较耗时,有多耗时呢?这里提供一份参考数据:
2022-07-04 11:48:29 +08:00
- 单机模式下百万会话取出10条 Token 平均耗时 `0.255s`
- Redis模式下百万会话取出10条 Token 平均耗时 `3.322s`
2021-01-07 22:03:44 +08:00
2022-07-04 11:48:29 +08:00
请根据业务实际水平合理调用API。
2021-01-07 22:03:44 +08:00
2022-07-04 11:48:29 +08:00
> 如果需要实时获取当前登录人数或者需要在用户退出后自动触发某事件等, 建议采用websocket技术。