diff --git a/source.html b/source.html index 287e33546..827f43cc7 100644 --- a/source.html +++ b/source.html @@ -146,10 +146,38 @@
如上@FilterGroup 的value 必须是[OR]或者[AND]开头,没有标记@FilterGroup的字段等价于标记了@FilterGroup(value = "[AND]")。[AND]、[OR]后面的字符串为GROUP_NAME,默认的GROUP_NAME为空字符串。如上"[OR]a"可以直接使用"[OR]",有多个[OR]或者[AND]则需要加上不同的NAME。
-未完待续……
-
CacheSource同Memcached类似,像一个带有过期功能地Map容器,存放key-value数据。常见的使用场景就是存放HTTP的Session信息。RedKale把用户会话信息数据当做业务数据处理,而不是接入层的数据。WebSocket的连接态数据也是用CacheSource存储。key为WebSocket的groupid,value为WebSocket服务端节点的IP地址列表。
+public class UserService implements Service {
+
+ //用户简单信息缓存
+ private final Map<Integer, UserInfo> users = new ConcurrentHashMap<>();
+
+ //使用CacheSource必须要指明泛型
+ @Resource(name = "usersessions")
+ protected CacheSource<String, Integer> sessions;
+
+ //登录
+ public RetResult<UserInfo> login(LoginBean bean) { //bean.sessionid 在接入层进行赋值
+ UserInfo user = null;
+ // 登陆逻辑 user = ...
+ users.put(user.getUserid(), user);
+ sessions.set(600, bean.getSessionid(), user.getUserid()); //session过期时间设置为10分钟
+ return new RetResult<>(user);
+ }
+
+ //获取当前用户信息
+ public UserInfo current(String sessionid) { //给HTTP的BaseServlet用
+ Integer userid = sessions.getAndRefresh(sessionid);
+ return userid == null ? null : users.get(userid);
+ }
+
+ //注销
+ public void logout(String sessionid) {
+ sessions.remove(sessionid);
+ }
+}以上是个简单的范例,用于用户模块存放sessionid。
<!-- 其配置算是标准的JPA配置文件的缩略版 -->