一.方案
1.调用外部接口查看今天是否节假日,优点:不需要每年更新。缺点:慢以及不免费。
2.通过调用redis每年定期添加相关节假日,然后再本地查询,优点:免费而且可以随时调整。缺点:需要每年手动更新。(因为每年调休不一样)
这里就说第二种方案吧,第一种方案调个外部接口就行。
1.能够用图形化操作/添加 解决方法:用阿里云的DMS 图形化直接管理redis数据库
2.能让不同产品设置 不同的节假日是否能使用 解决方法:redis里面添加相应产品id
二.主要代码逻辑:
year, month, day := now.Date()
// 今日日期
today := time.Date(year, month, day, 0, 0, 0, 0, time.Local).Format("2006-01-02")
valueStr, err = s.redisStore.Get(fmt.Sprintf("limit_产品_day_%v", today)).Result()
if err != nil && err != redis.Nil {
// 发生了不为空的错误
logrus.Errorf("[service/http/产品] Redis query error.")
return 0, false
} else if err == nil {
splittedStr := strings.Split(valueStr, "-")
for _, item := range splittedStr {
num, err := strconv.ParseInt(item, 10, 64)
if err != nil {
logrus.Errorf("[service/http/产品] Convert strings to numbers err: %v", err)
return 0, false
}
if num == 0 || order.产品ID == num {
return 0, false
}
}
}
首先获取当天时间 注意time.Local 注意一下你的时区
按照limit_产品_day_XXXX-XX-XX的格式去redis取数据
找不到键值对跳过表示今天没设置禁止登录
找得到不报错
将里面的键值字符串X-X-X-X 按照-分隔符分割
取出来的数字就是我对应要禁止的产品类型
比如0 就是表示所有的产品今天禁用
再比如1-2-3-4 就是把id为1到4的产品全禁止了
三.手动添加
可以直接访问redis 去根据格式来设置键值对
不过一般都是部署在某某云服务器上
这里以阿里云的DMS图形化界面为例子展示
1.点开阿里云的DMS
控制台搜索数据管理DMS 点开(注意需要相关权限 )
2.点开redis
在实例找到redis 进入DB0 点旁边的新增键值对按你的格式设置就行
记得每年年末可以点旁边的模糊搜索 来删除键值对