MySQL 悲观锁、乐观锁的使用场景及应用
定义
乐观锁:顾名思义,对每次的数据操作都保持乐观的态度,不担心数据会被修改,所以不会对数据进行上锁。由于数据没有上锁,这就存在数据会被多人读写的情况。所以每次修改数据的时候需要对数据进行判断是否被修改过。
悲观锁:与乐观锁相反,对每次的数据操作都保存悲观的态度,总是担心数据会被修改,所以在自己操作的时候会对数据上锁,防止在自己操作的时候被他人同时操作导致更新丢失。
使用场景
乐观锁:由于乐观锁的不上锁特性,所以在性能方面要比悲观锁好,比较适合用在 DB 的读大于写的业务场景。
悲观锁:对于每一次数据修改都要上锁,如果在 DB 读取需要比较大的情况下有线程在执行数据修改操作会导致读操作全部被挂载起来,等修改线程释放了锁才能读到数据,体验极差。所以比较适合用在 DB 写大于读的情况。
实现
乐观锁:使用版本号或者时间戳。在表中加个 version 或 updateTime 字段,在每次更新操作时对此一下该字段,如果一致则更新数据,数据不等则放弃本次修改,根据实际业务需求做相应的处理。
悲观锁:使用数据库的读锁、写锁、行锁等实现进程的悬挂阻塞等当前操作完成后才能进行下一个操作 ...
修改 Centos 系统时间
查看当前系统时间12[root@iZ2ze8qtvejt7fnrilbnz6Z ~]# date2021年 10月 12日 星期二 14:35:00 CST
查看当前时区12345678910111213141516[root@iZ2ze8qtvejt7fnrilbnz6Z ~]# timedatectl status Local time: 二 2021-10-12 14:35:34 CST Universal time: 二 2021-10-12 06:35:34 UTC RTC time: 二 2021-10-12 14:35:33 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: noNTP synchronized: yes RTC in local TZ: yes DST active: n/aWarning: The system is configured to read the RTC time in the local time zone. ...
PHP 迭代生成器 yield
迭代生成器生成器的核心是一个 yield 关键字,一个生成器函数看起来像是一个普通的函数,不同的是:普通函数返回一个值,而一个生成器可以 yield 生成许多他需要的值。生成器函数被调用时,返回的是一个可以遍历的对象。
yield 和 return 有点类似,不过不同的是,return 会返回值并且终止代码的运行,而 yield 会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。
12345678910111213141516171819function gen_one_tow_three(){ for ($i = 1; $i <=3; $i++) { // 注意:变量 $i 的值在不同的 yield 之间是保持传递的。 yield $i; }}$generator = gen_one_tow_three();var_dump($generator);echo "<br>";var_dump($generator instanceof Iterator); ...
(转载)什么是拜占庭将军问题
什么是拜占庭将军问题在很久很久以前,拜占庭是东罗马帝国的首都,那个时候罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信使传递消息。
在打仗的时候,拜占庭军队内所有将军必须达成一致性的共识,才能更好的赢得胜利。但是,在军队内有可能存在叛徒,扰乱将军们的决定。
这时候,在已知有成员不可靠的情况下,其余忠诚的将军需要在不受叛徒或间谍的影响下达成一致的协议。
莱斯利·兰伯特( Leslie Lamport )通过这个比喻,表达了计算机网络中所存在的一致性问题。这个问题被称为拜占庭将军问题。
什么是 Raft 算法?Raft 算法是一种简单易懂的共识算法。它依靠状态机和主从同步的方式,在各个节点之间实现数据的一致性。
在学习Raft算法的时候,大家需要了解Raft的两个核心要点:
选取主节点
同步数据
不难理解,使用主从同步的方式,可以让集群各个节点的数据更新以主节点为准,从而保证了一致性。那么,如何选取主节点呢?
我们的出生,离不开无数小蝌蚪之间的激烈竞争。在竞争的过程中,某个速度最快运气最好的小蝌蚪最终胜出,让我们诞生到了这个世界。
同样道理,Raft ...
SpringBoot 使用 Redis Geo
Redis GEO 的说明Redis 官方对 Geo 的描述
Redis 3.2 contains significant changes to the API and implementation of Redis. A new set of commands for Geo indexing was added (GEOADD, GEORADIUS and related commands).
关于 Geo,需要知道
Redis 的 Geo 是在 3.2 版本才有的
使用 geohash 保存地理位置的坐标
使用有序集合(zset)保存地理位置的集合
6个操作命令
GEOADD:增加某个地理位置的坐标
GEOPOS:获取某个地理位置的坐标
GEODIST:获取两个地理位置的距离
GEORADIUS:根据给定地理位置坐标获取指定范围内的地理位置集合
GEORADIUSBYMEMBER:根据给定地理位置获取指定范围内的地理位置集合
GEOHASH:获取某个地理位置的 geohash 值
命令的使用方法
官网
黄健宏的文章
Sprin ...
免费的编程中文书籍
目录
语言无关类
操作系统
智能系统
分布式系统
编译原理
函数式概念
计算机图形学
WEB服务器
版本控制
编辑器
NoSQL
PostgreSQL
MySQL
管理和监控
项目相关
设计模式
Web
大数据
编程艺术
其它
语言相关类
Android
APP
AWK
C/C++
C#
Clojure
CSS/HTML
Dart
Elixir
Erlang
Fortran
Go
Groovy
Haskell
iOS
Java
JavaScript
Kotlin
LaTeX
LISP
Lua
OCaml
Perl
PHP
Prolog
Python
R
Ruby
Rust
Scala
Shell
Swift
读书笔记及其它
测试相关
置顶
[笔记]前端工程师的入门与进阶 :100:
[全文]如何正确的学习 Node.js :100:
操作系统
开源世界旅行手册
鸟哥的Linux私房菜
The Linux Command Line (中英文版)
Linux 设备驱动 (第三版)
深入分析Linux内核源码
UNIX TOOLBOX
Docker中文指南
Docker ...
Android 获取 APK 的 SHA1
什么时候需要获取当申请微信登录、高德地图、穿山甲广告时或其他场景
获取 SHA1我们每个工程都会有个 keystore 文件,通过以下命令就指定 keystore 就可以获取到 SHA1
123456789keytool -list -keystore xxx.keystore输入密钥库口令: # 此处输入创建 keystore 时候的密码密钥库类型: PKCS12密钥库提供方: SUN您的密钥库包含 1 个条目xxx.keystore, 2021-9-15, PrivateKeyEntry, 证书指纹 (SHA1): AB:FA:1E:8C:2A:17:57:E5:98:27:5F:82:71:3D:45:0C:4D:8C:B2:
Android 获取 APK 的 MD5
什么时候需要获取当申请微信登录时或其他场景
如何使用下载下来 AppSignGet 后打开输入需要获取 MD5 的包名即可
AppSignGet.apk 下载链接AppSignGet.apk
计算 1-100 的素数
什么是素数曾称质数。一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数。如2,3,5,7,11,13,17…
计算 1-100 的素数1234567891011121314151617181920// 首先得出最小的素数是 2// 下面定义一个 x 为 2 循环 至 x 小于等于 100,每次循环 x+1for ($x = 2; $x <= 100; $x++) { // 定义 y 为 2,循环至 y 小于 x,每次 y+1 for ($y = 2; $y < $x; $y++) { // 判断如果当前循环 x 整除 y 通过 if ($x % $y == 0) { // 则跳出循环 break; } } // 判断当前循环整除通过的 x 必须等于 y,才认为是素数,如果不等于,则不符合素数的定义(只能被它本身和1整除) if ($x == $y) { $this ...
Charles 手机抓包记录
Charles 很早之前用过,后来一直不用都忘记怎么使用了。近期公司叫我去测试一个小程序的安全性,第一时间想到了用 Charles 抓包分析,这里记录一下过程方便后续查阅
安装这里有一个 Charles 4.2 的版本 下载后将 .jar 文件拷贝到 Contents/Java 里面。
简介Charles 是在 Mac 下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。
Charles 界面介绍
不过我个人更喜欢这种模式查看,这样会按照域名分类归档,更方便我看网络请求
代理设置打开 Charles 后将它设置成代理服务器,这样手机上访问 app 的时候就可以监听网络请求。
想要解决手机上面的网络抓包还需要一些设置,在 Charles ...