上一篇文章数据同步后数据总条数对不上的问题解决
文章结尾留下了一个小小的悬念,
问题是:如何批量删除redis中的用户信息?
这种问题最简单粗暴的方式是直接删除那个库或者那个类型前缀的keys,但是是生产环境,不是测试环境,测试环境的话可以随便搞,生产环境还是的小心,可以在凌晨用户不活跃的时候清楚reids的库,清除reids的相关的用户数据,登录的时候检测到access_token过期会重新去走登录流程获取access_token,登录是基于springSecurity+oauther2.0实现的一套搞所有的认证授权的功能,用户信息过期会被打回登录页重新去认证授权登录,那种简单粗暴的方式直接删库的方式会给用户带来不好的体验,所以还是得使用其它稳妥的方式来解决这个问题。
假设用户相关信息存入redis中的key是如下格式,%s拼接的是用户的uid
String USER_REDIS_KEY = "member:info:openid:%s:unionid:%s";
首先需要把需要删除的用户的uid对应的相关数据找出来,将对应的数据存入数据库或者是文件中
这种方式是将对应的数据存入数据库,写一个rest风格的接口,使用curl来触发接口执行批量删除redis的用户数据,这种方式就略过了。
这种方式把需要删除的用户的openid、unionid参数放在一个txt的文件中,通过shell读取这个文件,解析组装curl的接口参数进行后端接口的方法调用,进行批量删除用户信息的操作。
上面的两种方法的思路大致的讲解了下,也很简单的,具体的实现就不做过多的分享,so easy!
常用命令使用积累如下,还有很多丰富的参数可以加,可以上网参考学习,这个里只是记录工作中常见的用法使用分享记录
使用wget断点续传下载一个网络上的mp3文件到本地,命令如下:
sudo wget ":"http://xxxxxx:8080/download/record?id=eyJrZXkiOiJiSExIMkkybl9ERF9EWVRaIiwiYWxnIjoiSFMyNTYifQ.eyJyZWNvcmRpbmdVUkwiOiJodHRwOi8vMTIxLjMxLjI1NS4xNzoxMjMwMS9WMi8yMDIxMTAxOTE0MzgwOS9IV05ZXzQ0NjE2ZTY3ZDEwMmZiNTFfMTg4NDk4NTQ1OTZfMTU4ODc0MTAzMTdfMjAyMTEwMTkxNDM4MDkubXAzIiwicmVjb3JkaW5nSWQiOiI0NDYxNmU2N2QxMDJmYjUxIiwiZXhwIjoxNjM0ODg0ODI0fQ.X_pp0VA7lagk9z8uQS8VKSC6dWfqR4gbyaL0USKSZ6k -c -O 123.mp3
参数内容
-H 请求头
-d POST内容
-X 请求协议
curl -H "Content-Type: application/json" -X POST -d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }' "http://xxxxx:8001/test"
参数都是字符串:
curl -H "Content-Type: application/json" -X GET "http://xxxx:8080/wxpay/wechatPay/billQuery?billDate=20220208&appId=wx7a834121bd13a024&channelCode=WECHAT_MINI_PAY&businessId=6"
如下代码的一个参数是Long类型和BigDecimal类型的参数,只要不是字符串的参数,都需要如下处理,在参数的前面加上
--data-urlencode //url参数转义处理
这个也是很坑的点,我也是上网查了好久才知道要这种干的,所以记录,下次需要了直接这种梭哈了:
curl -X GET -G --data-urlencode "orderId=2222400000007" --data-urlencode "amount=5.00" --data-urlencode "remark=测试退款" --data-urlencode "operateName=zlf" -i http://xxxx:8080/park/order/pkRefund
下面三种都是错误的:
curl http://xxxx:8080/park/order/pkRefund?orderId=2222400000007&amount=5&remark=测试退款&operateName=zlf
curl “http://xxxx:8080/park/order/pkRefund?orderId=2222400000007&amount=5&remark=测试退款&operateName=zlf”
curl -X GET “http://xxxx:8080/park/order/pkRefund?orderId=2222400000007&amount=5&remark=测试退款&operateName=zlf”
a.txt的内容如下:
openid1 unionid1
openid2 unionid2
openid3 unionid3
.................
openidn unionidn
a.txt的每一行的openid和unionid的值中间用空格隔开,shell解析读取一行,根据这个空格来解析参数的,脚本文件名a.sh
#!/bin/bash
url=$1
while read line
do
#echo $line
OLD_IFS="$IFS"
array=($line)
a=${array[0]}
b=${array[1]}
echo "$a"
echo "$b"
echo "${url}/${a}/${b}"
curl "${url}/${a}/${b}" # 这里使用GET或POST都可以,关键就是传参、解析拼装请求参数,然后调用接口
#echo "successfully"
done<a.txt
给文件授权和执行:
chmod 777 a.txt a.sh
./a.sh http://127.0.0.1:8080/delRedisUserInfor/
从windows到linux的shell脚本编码和格式问题
异常问题 :set ff=unix
启动脚本在启动时报错比如执行sh start.sh,时会报Command not found等等的错误,因为我们在windows编写或修改后的脚本是dos编码,而正常的在Linux系统中执行的是unix编码,在写shell脚本的时候,在windows的上开发后,上传到服务器,可能会有文件格式不正确,通过:set ff unix可以将dos格式设置为unix下的文件格式.
解决方法:则在配置文件中非编辑模式中输入:
ff是fileencoding的简写,如下ff也可以写成fileencoding
#查看模式
:set ff
#修改模式
:set ff=unix
#保存
:wq
#查看模式,查看当前文本的模式类型,一般为dos,如果是dos需要修改为unix,否则linux运行文件错误
:set ff
#修改模式
:set ff=unix
#保存
:wq
#查询编码
:set fileencoding
#转换当前文本的编码为指定的编码,这里的“编码”常见为gbk utf-8 big5 cp936
#设置编码
:set fenc=编码 #比如下面的,注意要:w保存一下,
#设置UTF-8
:set fenc=utf-8
#保存
:wq!
#以指定的编码显示文本,但不保存到文件中。
#这里的“编码”常见为gbk utf-8 big5 cp936
:set enc=编码 #比如:
:set enc=utf-8
:%s/^M//g 这里是如果文本里面有^M结尾的话用此命令。
这也是一个总结做一个记录和分享,不然每次都得去现写和查,有点浪费时间的,所以我的分享希望对你有帮助,请一键三连,么么哒!