消息系统数据库设计

CREATE TABLE `user` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `LoginName` varchar(255) NOT NULL COMMENT '登录名',
  `LoginPWD` varchar(255) NOT NULL COMMENT '登录密码',
  `CreateUID` int(11) NOT NULL COMMENT '创建人ID 外键#sys_user#',
  `CreateDate` datetime NOT NULL COMMENT '创建时间',
  `UpdateDate` datetime DEFAULT NULL COMMENT '更新时间',
  `LoginIP` varchar(255) DEFAULT NULL COMMENT '登录IP',
  `LoginDate` datetime DEFAULT NULL COMMENT '登录时间',
  `LastLoginIP` varchar(255) DEFAULT NULL COMMENT '最后登陆IP',
  `LastLoginDate` datetime DEFAULT NULL COMMENT '最后登录时间',
  `UserType` int(255) DEFAULT NULL COMMENT '默认用户类型',
  `UserName` varchar(255) NOT NULL COMMENT '用户名称',
   PRIMARY KEY (`ID`)
)
用户分组表
CREATE TABLE `msg_group_user` (
  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '组ID',
  `GUID` char(36) DEFAULT NULL,
  `GroupName` varchar(255) DEFAULT NULL COMMENT '组名称',
  `CreateUID` int(11) DEFAULT NULL COMMENT '创建人ID 外键#sys_user#',
  `CreateDate` datetime DEFAULT NULL COMMENT '创建时间',
  `UpdateUID` int(11) DEFAULT NULL COMMENT '修改人 外键#sys_user#',
  `UpdateDate` datetime DEFAULT NULL COMMENT '修改时间',
  `DeleteUID` int(11) DEFAULT NULL COMMENT '删除人ID 外键#sys_user#',
  `DeleteDate` datetime DEFAULT NULL COMMENT '删除时间',
  `IsDelete` int(11) NOT NULL COMMENT '是否删除,数据字典#0003#',
  PRIMARY KEY (`ID`)
) 
用户与用户组关系表
 
CREATE TABLE `msg_user_relation` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `UserID` int(11) NOT NULL COMMENT '用户ID 外键#sys_user#',
  `GroupID` int(11) NOT NULL COMMENT '组ID 外键#msg_group_user#',
  PRIMARY KEY (`ID`)
) 
用户消息配置表
 
CREATE TABLE `msg_user_config` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `UserID` int(11) NOT NULL COMMENT '用户ID',
  `IsShowSystemMessage` int(11) DEFAULT NULL COMMENT '是否显示系统消息',
  PRIMARY KEY (`ID`)
) 
消息表
CREATE TABLE `msg_mail_box` (
  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '消息ID',
  `GUID` char(36) DEFAULT NULL,
  `Title` varchar(255) DEFAULT NULL COMMENT '标题',
  `Content` text COMMENT '正文',
  `IsMsgRemind` int(1) NOT NULL COMMENT '是否短信提醒,数据字典#0003#',
  `MailTiming` datetime DEFAULT NULL COMMENT '定时发送',
  `IsSend` int(11) DEFAULT NULL COMMENT '是否发送,数据字典#0003#',
  `SendDate` datetime DEFAULT NULL COMMENT '消息发送时间',
  `CreateUID` int(11) DEFAULT NULL COMMENT '创建人ID 外键#sys_user#',
  `CreateDate` datetime DEFAULT NULL COMMENT '创建时间',
  `UpdateUID` int(11) DEFAULT NULL COMMENT '修改人ID 外键#sys_user#',
  `UpdateDate` datetime DEFAULT NULL COMMENT '修改时间',
  `DeleteUID` int(11) DEFAULT NULL COMMENT '删除人ID 外键#sys_user#',
  `DeleteDate` datetime DEFAULT NULL COMMENT '删除时间',
  `IsDelete` int(11) NOT NULL COMMENT '是否删除,数据字典#0003#',
  `IsCompel` int(11) DEFAULT NULL COMMENT '是否是强制消息',
  PRIMARY KEY (`ID`),
  KEY `CreateUID` (`CreateUID`),
  KEY `IsSend` (`IsSend`),
  KEY `IsDelete` (`IsDelete`)
) 
消息与用户关系表
 
CREATE TABLE `msg_mail_relation` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `MailID` int(11) DEFAULT NULL COMMENT '消息ID 外键#msg_mail_box#',
  `UserID` int(11) DEFAULT NULL COMMENT '用户ID 外键#sys_user#',
  `IsRead` int(11) DEFAULT NULL COMMENT '是否阅读,数据字典#0003#',
  `ReadDate` datetime DEFAULT NULL COMMENT '阅读时间',
  PRIMARY KEY (`ID`),
  KEY `MailID` (`MailID`),
  KEY `IsRead` (`IsRead`),
  KEY `UserID` (`UserID`)
) 
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
消息聊天系统MySQL设计_聊天系统-数据库设计 //常⽤的redis命令 CONFIG SET requirepass "mypass" //Hashmap hset [key] [field] value] hget [key] [field] hgetall [key] //List LPUSH [key] [value] RPUSH [key] [value] LPOP [key] RPOP [key] //删除表头2个值为value的元素 LREM [key] [count > 0] [value] //删除表尾2个值为value的元素 LREM [key] [count < 0] [value] //删除所有值为value的元素 LREM [key] [count = 0] [value] LREM mylist 2 "hello" LREM mylist -2 "hello" //查询0~最后1个元素(不删除) LRANGE mylist 0 -1 BRPOP [key] [timeout] BLPOP [key] [timeout] //例:获取message_1最左的元素,如果没有,等待5秒,超时返回nil BLPOP message_1 5 采⽤Redis进⾏数据存储,主要包括频控、限流、⽤户表、在线⽤户表、聊天消息表(redis list实现消息队列)、好友表(TODO) 频控 CheckFrequency(userId uint64) bool 返回true检查通过,false触发频控 visited_{user_id} >3触发 //频控key前缀 const freqPre string = "visited_" /* Desc: 检查频控key Input: userId Output: False 触发频控/异常 True 正常请求 */ func CheckFrequency(userId uint64) bool { key := freqPre + strconv.FormatUint(userId, 10) resExists, err := Client.Exists(key).Result() if err != nil { return false } if resExists == 0 { //该key不存在 Client.Set(key, 0, 100 * time.Second) return true } res, err := Client.Get(key).Result() if err != nil { return false } resCnt, err := strconv.Atoi(res) if err != nil { return false } if resCnt > 2 {//10秒同⼀userid不能访问超过2次 fmt.Println("触发频控") //... return false } Client.Incr(key) return true } 频控测试 redis.CreateClient() var res bool = true for res { time.Sleep(time.Second * 1) res = redis.CheckFrequency(54508) fmt.Println(res) } 限流 /* 令牌桶算法API */ const LevelFast int = 1 const LevelMedium int = 2 const LevelSlow int = 3 var tokenBucket *ratelimit.Bucket func InitToken(speedLevel int) { var bucketFillDuring time.Duration if speedLevel == LevelFast { bucketFillDuring = 20 * time.Millisecond } else if speedLevel == LevelMedium { bucketFillDuring = 100 * time.Millisecond } else if speedLevel == LevelSlow { bucketFillDuring = 1000 * time.Millisecond } else { //⽇志 fmt.Println("speedLevel只能为Fast, Medium, Slow三个值!") return } var bucketMax int64 = 1//令牌桶最⼤容量,初始也会有这么多个令牌,此处为1是测试所⽤,⽅便看到限流效果,后期需增加⼤⼩ toke
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值