消息聊天系统MySQL表设计_消息系统数据库设计

1、新建platform_info表,此表存储调用消息平台方应用信息

CREATE TABLE IF NOT EXISTS `platform_info` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`platform_code` varchar(50) NOT NULL COMMENT '平台编码',

`platform_name` varchar(50) NOT NULL COMMENT '平台名称',

`busi_code` varchar(50) DEFAULT NULL COMMENT '业务编码',

`busi_name` varchar(50) DEFAULT NULL COMMENT '业务名称',

PRIMARY KEY (`id`),

UNIQUE KEY `platform_code` (`platform_code`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='平台信息';

2、新建app_user_client,用于存储下载了app用户的手机设备信息及绑定的第三方个推信息

CREATE TABLE IF NOT EXISTS `app_user_client` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`platform_code` varchar(50) NOT NULL COMMENT '平台ID',

`use

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
消息聊天系统MySQL设计_消息系统数据库设计 1、新建platform_info,此存储调⽤消息平台⽅应⽤信息 CREATE TABLE IF NOT EXISTS `platform_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `platform_code` varchar(50) NOT NULL COMMENT '平台编码', `platform_name` varchar(50) NOT NULL COMMENT '平台名称', `busi_code` varchar(50) DEFAULT NULL COMMENT '业务编码', `busi_name` varchar(50) DEFAULT NULL COMMENT '业务名称', PRIMARY KEY (`id`), UNIQUE KEY `platform_code` (`platform_code`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='平台信息'; 2、新建app_user_client,⽤于存储下载了app⽤户的⼿机设备信息及绑定的第三⽅个推信息 CREATE TABLE IF NOT EXISTS `app_user_client` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `platform_code` varchar(50) NOT NULL COMMENT '平台ID', `user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '⽤户ID', `client_id` varchar(50) NOT NULL COMMENT '客户端ID', `alias_id` varchar(50) NOT NULL COMMENT '别名ID', `device_type` enum('IOS','Android') DEFAULT NULL COMMENT '设备类型', `created_time` datetime NOT NULL COMMENT '创建时间', `updated_time` datetime NOT NULL COMMENT '修改时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='⽤户app客户端信息'; 3、新建sms_message,⽤于存储发送给⽤户的短信数据 CREATE TABLE IF NOT EXISTS `sms_message` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `platform_code` varchar(50) NOT NULL COMMENT '应⽤编码', `content_type` enum('Code','Text') NOT NULL DEFAULT 'Text' COMMENT '内容类型', `send_mobile` varchar(11) NOT NULL COMMENT '⼿机号', `message_content` varchar(200) NOT NULL COMMENT '发送内容', `client_ip` varchar(20) DEFAULT NULL COMMENT '客户端IP', `created_time` datetime DEFAULT NULL COMMENT '发送时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='发送短信⽇志'; 4、新建sys_message,⽤于存储设置发送给⽤户的消息 CREATE TABLE IF NOT EXISTS `sys_message` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `platform_code` varchar(50) NOT NULL COMMENT '平台编码', `message_id` varchar(50) NOT NULL COMMENT '消息ID', `message_title` varchar(50) NOT NULL COMMENT '消息标题', `message_content` varchar(50) NOT NULL COMMENT '消息内容', `message_category` varchar(50) NOT NULL COMMENT '消息分类', `message_
消息聊天系统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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值