java redis 实现用户签到功能(很普通简单的签到功能)
业务需求是用户每天只能签到一次,而且签到后用户增加积分,所以把用户每次签到时放到redis 缓存里面,然后每天凌晨时再清除缓存,大概简单思想是这样的
直接看代码吧如下
@Transactional
@Override
public void signIn(Integer memberId) throws BizException {
if(memberId==null){
throw new BizException(ErrorCode.BIZ_EXCEPTION.getErrcode(), "签到用户id 不能为null");
}
String day = DateFormatUtils.format(new Date(), "yyyyMMdd");
String key = "signin:"+day;
Boolean sismember = redisClient.sismember(key, memberId.toString());
if(sismember){
throw new BizException(ErrorCode.BIZ_EXCEPTION.getErrcode(), "今天已经签到了");
}else{
redisClient.sadd(key, memberId.toString());
redisClient.expire(key, getRefreshTime());
addPointsRecord(memberId,IntegralType.SIGN_IN);//给用户增加积分
} }
2:获取离凌晨 还有多久
/**
* 获取当前时间离明天凌晨还有多少小时
* @return
*/
public static int getRefreshTime(){
Calendar calendar = Calendar.getInstance();
int now = (int) (calendar.getTimeInMillis()/1000);
calendar.add(Calendar.DATE, 1);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY , 0);
return (int) (calendar.getTimeInMillis()/1000-now);
}
3:Controller
/**
* 签到
* @return
*/
@WeiXinLogin
@RequestMapping("/signIn")
public ResponseModel signIn(){
try {
Integer memberId = RequestContext.getContext().getUser().getMemberId();
memberApi.signIn(memberId);
return new ResponseModel();
} catch (BizException e) {
LOGGER.error("signIn error");
return new ResponseModel(e.getErrcode(), e.getErrm(), null);
}
}
java redis 实现用户签到功能(很普通简单的签到功能)的更多相关文章
- Java网络编程Demo,使用TCP 实现简单群聊功能Groupchat,创建一个服务端,使多个客户端都能收到消息
效果图: 开启服务端 客户端一 客户端二 客户端三 实现代码: 客户端类 import java.io.IOException; import java.net.ServerSocket; impor ...
- Java网络编程Demo,使用TCP 实现简单群聊功能GroupchatSimple,多个客户端输入消息,显示在服务端的控制台
效果: 服务端 客户端 实现代码: 服务端 import java.io.IOException; import java.net.ServerSocket; import java.net.Sock ...
- java redis面试专题(附答案)
1.什么是Redis?简述它的优缺点? Redis的全称是:Remote Dictionary.Server,本质上是一个Key-Value类型的内存数据库,很像 memcached,整个数据库统统加 ...
- Java Redis系列1 关系型数据库与非关系型数据库的优缺点及概念
Java Redis系列1 关系型数据库与非关系型数据库的优缺点及概念 在学习redis之前我们先来学习两个概念,即什么是关系型数据库什么是非关系型数据库,二者的区别是什么,二者的关系又是什么? ** ...
- java中Action层、Service层和Dao层的功能区分
Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只 ...
- springmvc 多数据源 SSM java redis shiro ehcache 头像裁剪
获取下载地址 QQ 313596790 A 调用摄像头拍照,自定义裁剪编辑头像 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单; 技术:31359679 ...
- springmvc 多数据源 SSM java redis
A集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单; freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,servic ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(九) 之 用 Redis 实现用户在线离线状态消息处理(一)
前言 上一篇中简单讲解了用Redis缓存在线用户逻辑.篇幅也比较小,本篇将详细实现用户的上线下线通知.图片效果转换功能.而且,代码和开发思路都会详细介绍. 效果展示 目前有三个用户,user1,use ...
- JAVA - Redis的连接
java连接linux Redis遇到的问题 昨天在Linux搭建了Redis服务,今天使用java连接测试了一下.要想使用java连接redis服务,就离不开jedis-2.6.1.jar.使用je ...
随机推荐
- GitBook相关使用以及配置笔记
本地安装 GitBook的安装非常简单.您的系统只需满足这两个要求: NodeJS(推荐使用v4.0.0及以上版本) Windows,Linux,Unix或Mac OS X gitbook-cli 是 ...
- js面向对象的程序设计 --- 中篇(创建对象) 之 工厂模式和 构造函数模式
创建对象 虽然Object构造函数或对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量重复代码. ·工厂模式 工厂模式是一种广为人知的设计模式,这种模式 ...
- 格式化输出_python
一.直接使用 +a='chen'b='xiao'c='zan'print(a+b+c) 二.利用占位符 %%s:占位符:%d:整数:%x:十六进制:%f:浮点数(默认6位小数)特别注意浮点数: 指定长 ...
- lighting
lighting lighting 是基于 nodejs 构建的一个命令行工具,使用 lighting 可以快速搭建 H5.APP.RestAPI 的开发工程环境(结合 VSCode 最佳).本地开发 ...
- 初识Docker:BusyBox容器后台运行失败
1.问题描述:我在进行Docker网络实验时,使用docker run -d busybox命令时,busybox无法保持后台长期运行. ============================ ...
- (c#)删除链表中的节点
题目 解: 解析: n1→n2→n3→n4删除n2即将n2更改成n3n1→n3(n2)→n4
- JavaScript对象之对象标签和对象序列化
对象标签有三种:proto.class和extensible. 一.proto标签 例如我新建了一个person对象,那么其__proto__则指向Person.prototype,然后Person. ...
- Hibernate第三天-Hibernate主配置信息
今天是学习Hibernate的第三天,主要分析一下Hibernate的配置文件中的信息 Hibernate中的配置文件有两种,第一种是主配置文件hibernate.cfg.xml,第二种是映射配置文件 ...
- OO完结篇-第四单元小结
OO第四单元小结 一.作业架构分析. 1.第一次作业 本次作业需要完成UML类图查询. 难点在于初次接触UML,需要对UML进行一定程度的学习和理解. 思路主要是根据每个传进来的element获取其t ...
- 多种方式实现平均分栏布局(有间距)div平分行宽
以下例子基于分四栏+栏间有间距的例子分析 效果图: html代码: <div class="buy-one-buy"> <h3>淘一淘</h3> ...