Debian下彻底删除mysql

参考文章:https://wangye.org/blog/archives/862/

  1. dpkg --get-selections | grep mysql 查看安装的与mysql相关的所有包
  2. sudo apt-get --purge remove mysql... 用上一步查询出来的结果 替换mysql… 依次删除每一个安装
  3. apt-get autoremove && apt-get autoclean
  4. rm /etc/mysql/ -R
  5. rm /var/lib/mysql/ -R

注意!!
以上, 会删除数据

postgres时间戳转换工具

postgres时间戳转换工具, 记录一下方便使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-- from unixtimestamp, convert to timestamp
create function from_us(ts bigint)
returns timestamp as $$
begin
return abstime(ts::int);
end;
$$ language plpgsql;


-- from unixtimestamp, convert to timestamp
create function from_us(ts integer)
returns timestamp as $$
begin
return abstime(ts);
end;
$$ language plpgsql;


-- to unix timestamp, from a string, convert to int4
create function to_uts(date varchar)
returns int4 as $$
begin
return extract(epoch from to_timestamp(date, 'yyyy-MM-dd'));
end;
$$ language plpgsql

shell下使用脚本自动填充密码

一般,当需要ssh到一个服务器时, 会输入

1
2
ssh xxx@xxx
#enter password

当使用脚本自动化时,往往不想要输入密码,此时选择可以使用ssh的public key authentication,或者使用sshpass工具, 再或者,使用下面这段脚本

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/expect

set timeout 20

set cmd [lrange $argv 1 end]
set password [lindex $argv 0]

eval spawn $cmd
expect "assword:"
send "$password\r";
interact

将其放在/usr/bin/exp文件中,添加权限,然后使用

1
2
3
exp <password> ssh <anything>
exp <password> scp <anysrc> <anydst>
exp <password> zssh <anything>

选自stackoverflow Automatically enter SSH password with script

一波简单的订单优化

背景

系统中,下单流程较长,业务逻辑复杂,再加上分布式锁的使用,导致下单效率很低,耗时较长,但由于对接的OTA要求500ms以内

而我负责的目的地系统下单只是其中的一个环节,所以必须控制在300ms以内,于是有了这一波优化

系统使用hibernate jpa

开始

要优化,自然先找出耗时较长的函数调用,简单的方法是使用System.currentMilliseconds()函数打印时间。

更进一步,使用切面,对Service层的方法调用做切面,在切面里打印每一个函数调用时间

实际时两种方法混用

redis源码阅读3-AOF(Append Only File)

redis虽然是一个内存数据库,但是也存在着数据的持久化. 这一次就准备好好看看,一直以为神秘而又复杂的文件存储在redis中是如何高效实现的

在redis中,存在着两种与持久化相关的方案

  • RDB 存储某个时间点的完整备份
  • AOF(Append only file) 存储修改数据的命令, 可以认为是增量日志, 存储格式即redis命令协议的格式

RDB还没怎么看,所以先从AOF开始

git-cheat-sheet

HEAD

将 HEAD 想象为当前分支的别名

git log

git log -p 显示差异
git log –stat
git log -2
git log –graph 图形显示
git log -Ssearchtext 搜索
git log –grep=text in commit comment 搜索提交信息
git log –since=2016-07-01
git log –author
git log –pretty=online 格式,有很多

git reset

git reset HEAD file1 file2… 移除通过git add添加到暂存区中的修改

git checkout

git checkout – file1 file2… 恢复修改
git checkout -b branchname tagname 检出标签到新建的branchname分支上
git checkout branch_name 检出分支

git fetch & git pull

git fetch 拉取,不和并
git pull 拉取,并尝试合并

git push

git push origin tag_name 推送一个标签
git push origin –tags 推送所有标签
git push origin branch_name 推送分支到远程分支
git push origin local_branch_name:remote_branch_name 推送分支到远程分支
git push origin –delete serverfix 删除远程分支

git remote

git remote
git remote add shortname url
git remote remove name
git remote rename oriname newname

git tag

git tag
git tag -l ‘vx.x.x*’
git tag -a vx.x.y -m ‘comment’
git tag vx.x.z
git tag -a vx.x.a commit_check_sum
git show vx.x.y

alias

git config –global alias.new_command git_command(eg:checkout, branch, reset HEAD –…)
git config –global alias.last ‘log -1 HEAD’

git branch

git branch
git branch new_branch_name 创建分支
git branch -d branch_name 删除分支
git branch -v
git branch –merged/–no-merged 已经合并或未合并到当前分支的分支
git branch -u origin/serverfix 使当前分支跟踪上游分支

git merge

git merge branch_name
git merge origin/branch_name
冲突时:

1
2
3
1. git status查看冲突文件
2. 手动修改冲突文件
3. git add filename标记为冲突已解决

git mergetool –tool vimdiff filename 使用vimdiff合并

git rebase

订单锁

业务情况如下:
订单大致存在三处修改的地方,分别为

  • 下单
  • 分车
  • 订单状态流转

前两处都涉及到车辆的分配,即库存
第三处,当订单失效时,涉及到已分配库存的回收

所以,针对同一产品(线路) 的库存修改,必须保证原子性。原子性可用队列单线程,也可对产品库存加锁实现

而因为一些原因,直接选择加锁。由于可能存在部署多个实例的情况,所以采用分布式锁

本文的重点在于,锁的使用(即,在哪里,什么时候加锁),而非分布式锁的实现。

由于资源的复杂度远小于线路,所以后面只讨论购买一个线路的情况

,