0%

最近使用Spring-boot的cache做了系统的数据缓存,发现有时Cacheable注解不生效,调研了一下是可能是以下的情况

1、因为@Cacheable 由AOP 实现,所以,如果该方法被其它注解切入,当缓存命中的时候,则其它注解不能正常切入并执行,@Before 也不行,当缓存没有命中的时候,其它注解可以正常工作

2、@Cacheable 方法不能进行内部调用,否则缓存无法创建

发现是由于内部调用的问题,内部调用无法使用AOP,所以需要解决方法如下:

1.不使用注解的方式,直接取 Ehcache 的 CacheManger 对象,把需要缓存的数据放到里面,类似于使用 Map,缓存的逻辑自己控制;或者可以使用redis的缓存方式去添加缓存;

2.把方法A和方法B放到两个不同的类里面,例如:如果两个方法都在同一个service接口里,把方法B放到另一个service里面,这样在A方法里调B方法,就可以使用B方法的缓存。

3.通过((UserService)AopContext.currentProxy().xxx()的方法获取当前类的代理类;

4.通过ApplicationContext获取当前类的代理对象

最后使用的是方法4来解决的,通过Context对象来获取到上下文里生成的代理对象,即可

1
context.getBean(Class.class).method();

参考:https://bobey.site/archives/456546

pandas写excel文件,写入多个sheet

可以使用pandas的ExcelWriter,使用以下代码即可

1
2
3
with pda.ExcelWriter("xx.xlsx") as writer:
df1.to_excel(writer,sheet_name='df1')
df2.to_excel(writer,sheet_name='df2')

即可将df1和df2的内容写入到xx.xlsx下的df1和df2的sheet中。

配置git的ssh使用代理

同样是在 ~/.ssh/config 下配置

linux下

1
2
3
4
5
Host github.com
User git
Hostname github.com
ProxyCommand nc -X 5 -x 127.0.0.1:1089 %h %p
ServerAliveInterval 30

如果没有nc,则需要安装netcat

centos7 可以使用

1
yum -y install nc

但是这个版本的nc好像不能指定-X的参数
所以如果在centos7上,想要使用socks5代理的话,可以使用connect-proxy
可以直接使用

1
yum -y install connect-proxy

然后在.ssh/config下配置

1
2
3
4
5
Host github.com
User git
Hostname github.com
ProxyCommand connect-proxy -S 127.0.0.1:1089 %h %p
ServerAliveInterval 30

win10下

1
2
3
4
5
Host github.com
User git
Hostname github.com
ProxyCommand connect -S 127.0.0.1:1080 %h %p
ServerAliveInterval 30

其中connect也是一个代理软件,如果没有netcat 即可使用这个命令。(没搞清是那里带的,可能是mingw64带的?)

今天新买了一个switch,但是switch链接eshop非常慢,于是想到是否可以使用代理来加速,但是尝试了一下,因为服务器上是使用的sslocal来做的代理,使用的是socks5代理,直接在wifi那里写代理的话,是无法使用的,switch这里只能使用http代理,于是搜索了一圈,发现可以使用privoxy来做一层包装,将socks5代理转为http,

进而了解到privoxy其实是类似与shadowsocks的一种工具,用来管理linux的全局代理,通过设置可以完成指定网站使用指定的代理的行为。

安装

在ubuntu和centos上都可以直接使用yum或者apt-get直接安装

1
yum -y install privoxy

配置

其实配置也是相对简单的,privoxy本身是一个服务,需要配置一个监听的端口,另外就是规则,哪些url需要使用代理,而那些Url不需要,privoxy的配置文件在/etc/privoxy/config

配置监听端口

在配置文件中搜索 listen-address 如下图所示:

privoxy的使用_0

将其改为想要使用的端口

配置规则

其规则的配置也比较简单,利用以下的语法即可

1
forward  .google.com  127.0.0.1:8080 

上述语句的意思就是*.google.com下的所有网站都需要走本地8080的代理,这是针对比较简单的http转发

如果是socks5或者socks4,则按照以下的形式:

1
forward-socks5   target_pattern  socks_proxy:port  http_proxy:port

前三条的意思同上,只不过第三条代表转发到那个socks5地址,最后的那个http地址是用来设置经过socks之后还需要经过哪个http代理,

基于规则的配置可以直接写到config文件中,同时也可以写到.action文件中,同时在config中引入:

引入的语法为:

1
actionsfile **.action

同时在action中的语法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{{alias}}
direct = +forward-override{forward .}
ssh = +forward-override{forward-socks5 127.0.0.1:7000 .}
gae = +forward-override{forward 127.0.0.1:8000}
default = direct
#==========默认代理==========
{default}
/
#==========直接连接==========
{direct}
.edu.cn
202.117.255.
222.24.211.70
#==========SSH代理==========
{ssh}
.launchpad.net
#==========GAE代理==========
{gae}
.webupd8.org
222.24.211.70

通过声明别名,然后下面每个别名后对应的规则就会使用对应的代理。这样就能够配置好了

启动

如果通过依赖管理软件来安装,可以直接使用以下命令来启动

1
service privoxy start

最后

通过配置,即可达到win10上shadowsocks软件的效果,在linux下将privoxy监听的端口设置为本机的全局代理地址:

1
export http_proxy='http://0.0.0.0:8118' # 和config中对应

python的一些小技巧

之前一直想找的一个方法,就是希望能够获得python中声明的函数的参数名,但是没有找到对应的方法,今天偶然在知乎上看到的。
可以使用Inspect模块,来获取到声明的函数的参数名

1
2
3
4
5
6
import inspect

def test(a,b,c):
print(a,b,c)

print(inspect.getfullargspec(test).args) # ['a', 'b', 'c']

部分转载自 https://www.zhihu.com/question/431725755/answer/1592193887

经常会遇到比较两个Dataframe是否相同的问题,发现官方提供了一个方法用于比较是否相等,且能够输出不同的列

1
2
3
from pandas.testing import assert_frame_equal

assert_frame_equal(df1,df2)

该方法会比对Df的value和index,如果不想比较index,也可以直接使用reset_index(drop=True)将index重置,然后在进行比较

在mongodb中实现以下的sql效果,有两种实现方式

1
select * from db where db.a = db.b

使用$where关键字

1
db.col.find("$where":"this.field1==this.field2")

这个原理是使用where关键字来对每row进行一次js的运算,效率较低,当要查询的文档较多时,非常慢

使用aggregate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
db.test.aggregate([
{
$project:{
fields1: 1,
fields2: 1,
difference: { $eq: ["$fields1", "$fields2"]}
},
},
{
$match: {
difference: true
},
},
]);

该方法是使用pipeline中的project映射出一个字段来比对两个字段

边缘计算【重点】

边缘计算就是将网络中心的数据移到网络逻辑上的边缘点处理,这样可以缓解中心点的运算压力,同时边缘点离用户近,可以实时响应请求,减少延迟,同时也减少了边缘点向数据中心传输数据处理的请求时间;数据的处理在本地有效的保护了数据隐私。

云计算【重点】

云计算是分布式计算的一种,指通过网络云将极大地数据计算处理程序分解成无数的小程序交给由多个服务器组成的系统处理分析并将结果返回给用户。现阶段的云计算已不单纯是分布式运算,还包括效用计算、负载均衡、并行计算、网络存储、热备份冗杂和虚拟化等功能。

SDN(软件定义网络)【重点】

定义:

SDN是一种软件集中控制、网络开放的三层体系架构。

工作原理:

应用层实现对网络业务的呈现和对网络模型的抽象;

控制层实现操作系统功能,集中管理网络资源;

转发层实现分组转发功能;

步骤:

  1. 控制器和转发器建立控制协议
  2. 建立协议后,控制器从转发器收集网络资源信息,并通过拓扑收集协议收集网络拓扑信息
  3. 控制器利用网络资源信息和拓扑收集信息计算出网络内部交换路径,并通过传统路由协议学习业务路由并向外扩散
  4. 转发器收到控制器发送的内部交换路径转发表和业务路由转发表,并根据转发表转发报文
  5. 当网络状态发生变化时,控制器能实时感知,并更新网络内部交换路劲和业务路由,以确保网络能继续正常提供服务
阅读全文 »

设置git特定网站使用代理

1.命令行的方式

直接使用命令即可设置特定网站的使用特定代理,比如github

1
2
3
4
git config --global http.https://github.com.proxy http://127.0.0.1:1080

# 取消代理
git config --global --unset http.https://github.com.proxy

如果不想设置全局的,则可以设置repository特定的代理,如下

1
2
3
4
git config --local http.https://github.com.proxy http://127.0.0.1:1080

# 取消代理
git config --local --unset http.https://github.com.proxy

2. 编辑配置文件的方式

直接编辑git的配置文件,该文件的位置为~/.gitconfig

1
2
3
4
5
[http "https://github.com"] # 添加特定网站
proxy = http://127.0.0.1:1080

[http] # 设置全部http都使用某个代理
proxy = http://127.0.0.1:1080

本文环境

  • CentOS 7.6 64bit
  • root用户

目的

新买了一个华为的云服务器,安装一些python开发常用的软件和环境,包括

  • python环境
  • 安装最新的git
  • zsh(神器,必备,建议没有了解过的小伙伴了解一下)

前提

本文适用于Centos环境下,对Vim编辑器有一点了解能够完成简单的修改的操作的人群。

安装过程

准备

服务器中默认的ssh连接的过期时间有点短,可以设置长一点,省的在找一些资料的时候回去发现ssh连接断掉了

1
2
echo "ClientAliveCountMax 10" >> /etc/ssh/sshd_config
systemctl restart sshd

我这边设置的过期时间是10分钟,对应ClientAliveCountMax 10这里的10,可以根据自己的情况设置。

编译安装最新的git

本环节可跳过,直接使用yum -y install git安装git 即可

Centos使用yum -y install git安装的git是版本比较旧的,在后续使用时总会出现各种各样的问题,所以干脆我们一开始就安装一个比较新的git版本,省的后续再麻烦,虽说是编译安装,但是整体过程还是非常简单的,

首先使用yum来安装我们编译需要使用的依赖

1
yum -y install gcc gcc-c++ curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker autoconf

首先我们要先检查一些我们是否安装了git,

1
git --version

上面的命令可以查看当前是否安装了git,并可以查看git 的版本,我这边的结果是

1
git version 1.8.3.1
阅读全文 »