Rywen's Blog

生活不止眼前的苟且,还有诗和远方.

0%

为什么用MongoDB存储快照?

其实商品快照就是订单商品的当前信息,我们把该商品信息从 tb_goods 表中读取出来,然后存储到快照表中。你用MSQL中的数据表存储快照也是可以的,但是日积月累快照记录越来越多(2000万以上),MySQL数据表就显得很吃力了。因此我们可以选择适合存储海量数据(TB级别)的MongoDB数据库,而且它的读写速度比MySQL快多了。当然了,还有比MongoDB存储更多数据(PB级别)的HBase数据库,但是用在我们的项目上就显得大材小用了。

MongoDB的集合与文档

由于MongoDB没有数据表结构,也不支持SQL语句。它里面的数据是JSON格式的,被称作文档,然后保存在集合中。也就是说,集合相当于MySQL的数据表,文档相当于数据记录。

阅读全文 »

为什么要使用规则引擎?

往简单了说,规则引擎是用来执行条件判断的,符合什么规则就执行什么代码。既然是这样,为什么我们不直接写if-else语句,而要用规则引擎呢?答案很简单:可维护性。如果你在Java代码中写了一堆条件判断,将来判断依据变了,你要重新修改代码编译项目,还要重新发布项目,整个流程太繁琐了。如果采用规则引擎,我们可以把条件判断写成文本保存到配置文件或者数据库,日后维护也更加方便,修改配置文件或者数据记录就可以了,不需要修改程序代码。

阅读全文 »

开通微信支付

密钥和数字证书

把下载的 apiclient cert.p12 数字证书文件,放入后端Java项目的 resources 目录中。

在Java项目的 application.yml 文件中,填写微信支付接口的相关配置信息。

1
2
3
4
5
6
7
8
9
10
11
wechat:
app-id: APPID
app-secret: 密钥
pay: 微信支付3.0接口密钥
v3:
his-vue:
app-id: APPID
app-v3-secret: 微信支付3.0接口密钥
mch-id: 微信商户平台ID
domain: URL回调地址(暂时不用配置)
cert-path: apiclient_cert.p12
阅读全文 »

用户密码哈希加盐防御字典破解

数据库拖库攻击

拖库本来是数据库领域的术语,指的是从数据库中导出数据。到了黑客攻击泛滥的今天,它被用来指代系统遭到入侵后,黑客窃取数据库记录。从数据层面想要防御拖库攻击,我们可以对重要的数据加密,比如说用户的密码。毕竟加密是耗时的事情,所以加密仅仅针对重要的字段,我们不需要对所有的字段加密。如果是安全度要求很高的项目,还要采用多种算法加密。比如说用户表的某些字段用MD5加密,财务表的记录用AES加密等等

阅读全文 »

也许有的同学觉得前后端项目都部署在同一台服务器主机上面,前后端项目之间不需要使用HTTPS协议,其实不然。如果前后端项目都部署在同一台主机上面,该主机的负载会偏大,所以通常的做法是把前后端项目部署在不同主机上面。这种情况下,局域网之内的数据传输也应该加密,所以给后端项目配置HTTPS协议是必要的。

阅读全文 »

给后端Java项目添加线程池功能,将来有些复杂耗时的任务,我们可以交给线程池去做。比如说生成体检报告这种事情就非常耗时,如果用上了线程池,每天的体检报告用多线程去生成,速度肯定比单线程快很多。

阅读全文 »

自定义异常类

Java语言允许我们自己封装异常类,我们可以自定义各种异常类,比如每种业务一个异常类,或者每个模块一个异常类。我这里不想做的那么复杂,不如我们创建一个通用的异常类,用来封装与业务有关的异常信息。

阅读全文 »