结构体的应用:
Golang教程三(结构体、自定义数据类型,接口)_golang 自定义数据类型-CSDN博客
mysql 事务处理模式分析:
MySQL事务隔离级别:读未提交、读已提交、可重复读和串行-腾讯云开发者社区-腾讯云
【MySQL】脏读(Dirty Read)、不可重复读(Non-Repeatable Read)和幻读(Phantom Read)_mysql脏读幻读不可重复读-CSDN博客
用以处理脏读(Dirty Read)、不可重复读(Non-repeatable Read)和幻读(Phantom Read)等问题。
1. 脏读(Dirty Read)
脏读是指一个事务读取了另一个事务未提交的数据。这通常发生在事务A读取了事务B更新但还未提交的数据,如果事务B回滚,那么事务A读取到的数据就是无效的(不正确的)。
2. 不可重复读(Non-repeatable Read)
不可重复读是指在同一个事务内,多次读取同一数据集合时,由于其他事务的更新操作,后一次读取可能会得到不同的结果。例如,在事务A中,第一次和第二次读取同一行数据时,如果其他事务在这期间更新了该行数据并提交,那么两次读取的结果将不同。
3. 幻读(Phantom Read)
幻读是指在一个事务内多次执行相同的查询,但由于其他并发事务的插入操作,后一次查询可能会返回额外的行。幻读通常发生在针对范围查询的情况,例如,事务A在两次查询之间,其他事务插入了新的行到这个范围内。
MySQL 的事务隔离级别
MySQL 支持以下四种标准的事务隔离级别:
READ UNCOMMITTED(读未提交):这是最低的隔离级别,允许事务读取未被其他事务提交的数据。这会导致脏读、不可重复读和幻读的问题。
-
READ COMMITTED(读已提交):保证一个事务只能读取到已经提交的数据。这可以防止脏读,但仍然可能出现不可重复读和幻读的问题。
-
REPEATABLE READ(可重复读):这是 MySQL 的默认隔离级别。它确保在同一个事务内,多次读取同样记录的结果是一致的,从而防止了不可重复读。但在这个级别下,幻读仍然可能发生。
-
SERIALIZABLE(可串行化):这是最高的隔离级别,通过强制事务串行执行,从而避免脏读、不可重复读和幻读的问题。这可以通过锁定整个范围内的数据来实现,但可能会严重影响性能。
-
如何选择隔离级别
选择合适的隔离级别取决于应用程序的需求和对数据一致性的要求。例如,对于需要高数据一致性的系统,可以使用 SERIALIZABLE
隔离级别;而对于追求高并发性能的系统,则可能选择 READ COMMITTED
或 REPEATABLE READ
。
ZADD orders 100 order1
ZADD orders 200 order2
ZADD orders 300 order3
zadd myzset 100 nameorder // 添加一个有序集合 其中存储了用户的订单信息,每个订单用一个唯一的 ID 表示
ZSCORE myzset nameorder // myzset 是key nameorder 是成员,查找key的值
ZREM orders order2 || ZREM orders order1 order3 // 移除order 键一个或多个成员
ZRANGE myzset 0 -1 withscores // 查找 myzset 的所有成员集合
ZCOUNT key min max ZCOUNT myzset 0 5 // 统计范围
ZCARD myzset :统计有序集合的数量
下面是: c.param 与 c.Query 的区别
r.GET("/user/:name/:action/", func(c *gin.Context) {
name := c.Param("name") // c.param 是获取 / 后面的信息
}
c.Query // 是获取 ? 后面的值 /api/v1/posts2?page=1&size=10&order=time
sqlx 里面的 sqlin 应用到 args 必须要加三个点
sqlStr := `select post_id, title, content, author_id, community_id, create_time
from post
where post_id in (?)
order by FIND_IN_SET(post_id, ?)
`
// https: //www.liwenzhou.com/posts/Go/sqlx/
query, args, err := sqlx.In(sqlStr, ids, strings.Join(ids, ","))
if err != nil {
return nil, err
}
query = db.Rebind(query)
err = db.Select(&postList, query, args...) // !!!!!!
pipeline.ZInterStore(key, redis.ZStore{
Aggregate: "MAX",
}, cKey, orderKey) // zinterstore 计算 // ckey orderKey 的集合
redis zset 的应用:
2024.1.6 关于 Redis 数据类型 Zset 常用命令_redis zset-CSDN博客
Redis的ZSet底层数据结构,ZSet类型全面解析 - BJRA - 博客园
【redis】Redis数据类型(五)ZSet类型_redis zset-CSDN博客