第十六:redis 的 zset 帖子投票要点,c.param,c.Query区别

结构体的应用:

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(读未提交):这是最低的隔离级别,允许事务读取未被其他事务提交的数据。这会导致脏读、不可重复读和幻读的问题。

  1. READ COMMITTED(读已提交):保证一个事务只能读取到已经提交的数据。这可以防止脏读,但仍然可能出现不可重复读和幻读的问题。

  2. REPEATABLE READ(可重复读):这是 MySQL 的默认隔离级别。它确保在同一个事务内,多次读取同样记录的结果是一致的,从而防止了不可重复读。但在这个级别下,幻读仍然可能发生。

  3. SERIALIZABLE(可串行化):这是最高的隔离级别,通过强制事务串行执行,从而避免脏读、不可重复读和幻读的问题。这可以通过锁定整个范围内的数据来实现,但可能会严重影响性能。

  4. 如何选择隔离级别

选择合适的隔离级别取决于应用程序的需求和对数据一致性的要求。例如,对于需要高数据一致性的系统,可以使用 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博客

Redis常见的5种不同的数据类型详解-腾讯云开发者社区-腾讯云

Redis 的五种数据类型及其底层原理_redis的五种数据类型-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值