多客户端登录

但是无法像谷歌一样获取到计算机名和机器型号

多客户端登录流程

  1. 登录时带上本地设备信息,例如操作系统,分辨率等
  2. 每一个端登录后,会拿到自己独立的client_code,存入本地永久储存,每次续期和登录的时候带上
  3. client_code和token记录在数据表,有UA信息和js获取到的客户端信息
  4. 踢下线的话,就是把这个jwt token拉黑,迫使它重新用凭据登录
  5. 设置一个10分钟续期,用续期时间维护为最后活动时间,10分钟误差可以接受,而且上线后立即能更新状态
  6. 更新密码之类的,就是立即拉黑该用户所有jwt token

用途:

  1. 可以标记客户端是否为可信任设备,用来实现免密登录
  2. 可以看到在哪些设备上登录过
  3. 可以把某设备退出账号
  4. 可以实现“禁止新终端登录”功能
  5. 可以看到每个设备的最新活动时间

程序设计中的信息丢失

在程序设计中,我们可能没有注意到,一些可能很有用的数据被丢失

例如:

  1. 将采集而来的文章存入数据库时可能丢掉作者的信息仅存入作者名称
  2. 生成订单时没有冗余一份商品数据,优惠券数据等,导致后来商品信息产生变化,查不到订单中的价格从何而来
  3. 储存用户地址时,将省市区存成一个字符串,导致本来的省市区信息丢失,后面要统计某个省的购买量时无法做到
  4. 点赞只收集了点赞数而没有收集点赞人列表,导致无法实现“我点赞过的文章”功能
  5. 状态变化时没有记录状态变化历史,仅仅只是改变数据的status字段,导致数据的状态流转路线和时间节点丢失

一些很有用的数据,在我们当时可能用不到,但不要将它丢掉,尽量多的存下这些信息

云储存时代的业务文件储存

简单文件信息的弊端

文件上传和业务提交分开的架构中,如何标记有效文件和无效文件,指:“已上传,但未绑定到业务”,例如著名的 “微博图床”插件 就是利用这一特性吸血新浪微博导致储存被滥用

查看

为什么我不用redis

伪应用场景

redis 5种数据结构 及使用场景分析
中我看到一些redis的应用场景,在其他储存例如mysql中也能轻易做到
在这竟然可以拿出来当成最佳实践,这已经是redis滥用者能举出来的稍微体面一点的例子了

  1. 字符串

    1. 缓存:有过期时间
  2. list

    1. 消息队列
    2. 朋友圈的点赞列表、评论列表、排行榜:lpush命令和lrange命令能实现最新列表的功能,每次通过lpush命令往列表里插入新的元素,然后通过lrange命令读取最新的元素列表。

查看

Docker 的网络模式

6种driver介绍

  • bridge
  • overlay
  • host
  • container
  • macvlan
  • none

bridge:

这是容器默认的网络驱动

很多教程说这是相当于交换机,说这种话的人根本不懂网络。

dockerbridge 相当于一个路由器,使用 bridge 网络的容器,处于一个下级路由器里

查看

mysql数据恢复

记录一下基于docker-composer的mysql环境下进行误删除数据恢复的步骤
线上系统使用这样的cron规则

1
0 6 * * * cd /docker-compose/mysql && docker-compose exec -T mysql mysqldump -A -F --triggers --routines --events > backup/$(date '+\%u').sql

  • -F, --flush-logs切换到下一个binlog文件,这样全量备份的时候flush binlog,在要恢复数据的时候,start-time或者position不用找也不用填
  • --triggers --routines --events 不加的话会在导出的文件里第一行有一条警告信息
  • 0 6 * * * 每天凌晨6点
  • $(date '+\%u') 返回今天周几(1-7)(在crontab里面百分比符号%需要转义)

停机,停止业务

防止恢复期间产生新的数据,然后在数据恢复后丢失了这部分新数据

查看

mysql gtid模式 主从同步

gtid模式比传统的binlog file + pos 的方式,能避免在同步配置时期漏掉sql的问题,并且能简化配置,不用手动定义file和pos了。

先在主库开启binlog和gtid, 新建配置 /etc/mysql/mysql.conf.d/binlog.cnf

查看

Mysql 授权和用户管理

mysql的几个权限管理的命令,很不常用,要用的时候往往都想不起来,在此记录一下以便自己查阅。


授权

  • 增加权限

    1
    GRANT UPDATE ON database.table TO 'user'@'hostname';

所有数据库所有权限:GRANT ALL ON *.* TO ‘user’@'localhost'

一个数据库增删改查权限:GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO 'user''@'%'

  • 查询权限

    1
    SHOW GRANTS FOR 'user'@'hostname'

查询自己的权限SHOW GRANTS;

查看

docker-plex

最近又沉迷于docker,比较方便备份和迁移服务,因为每个服务依赖的路径和文件都是在容器启动参数中明确的。而不需要一个个去找,在需要迁移或者重装服务器的时候,也不用再去思考这个服务器上到底运行了哪些服务了。

刚完成了plex的docker化,在此记录一下。

plex有一个官方docker镜像:plexinc/pms-docker,但是不支持arm,于是找了一个替代:linuxserver/plex

然后启动文档还是可以使用官方镜像的README

理所应当的,我们使用桥接网络,让这个docker看起来像一个独立主机,这样我们不用映射端口,也不用占用宿主机上面的端口。

创建桥接网络可以参考我的上一篇博文: docker 桥接网络配置samba

查看

鄂ICP备14007840号-1