cacheKey := r.CacheKey(req.Id) _ = r.data.cache.Del(ctx, cacheKey) err = r.data.setCache(ctx, cacheKey, result) if err != nil { _ = tx.Rollback() return nil, biz.ErrRecordAlreadyExists使用RPUSH把缓存塞到redis尾部
时间: 2024-04-15 10:27:25 浏览: 175
根据你的要求,将缓存添加到 Redis 列表的尾部可以使用 RPUSH 命令。下面是修改后的代码示例:
```go
cacheKey := r.CacheKey(req.Id)
_ = r.data.cache.Del(ctx, cacheKey)
err = r.data.setCache(ctx, cacheKey, result)
if err != nil {
_ = tx.Rollback()
return nil, biz.ErrRecordAlreadyExists
}
// 将缓存添加到 Redis 列表的尾部
err = r.data.cache.RPush(ctx, "mylist", cacheKey).Err()
if err != nil {
_ = tx.Rollback()
return nil, biz.ErrRecordAlreadyExists
}
```
在这段代码中,使用 `r.data.cache.RPush(ctx, "mylist", cacheKey)` 将 `cacheKey` 添加到名为 "mylist" 的 Redis 列表的尾部。如果出现错误,会进行事务回滚,并返回 `ErrRecordAlreadyExists` 错误。
请注意,这只是一个示例,你需要根据你的实际情况进行相应的修改。确保已正确配置和初始化 Redis 客户端,并根据你的需求选择正确的列表名称和参数。
相关问题
cacheKey := r.CacheKey(req.Id) err = r.data.setCache(ctx, cacheKey, result) if err != nil { _ = tx.Rollback() return nil, biz.ErrRecordAlreadyExists } // 执行事务 err = tx.Commit() if err != nil { // 事务回滚 _ = tx.Rollback() return nil, biz.ErrRecordAlreadyExists } return r.composes(result, err)创建缓存并使用RPUSH方法把添加到缓存的数据加到队列尾部
根据你的代码,你需要在创建缓存并提交事后,将添加到缓存的数据使用RPUSH方法加到队列的尾部。以下是一个示例代码:
```go
cacheKey := r.CacheKey(req.Id)
err = r.data.setCache(ctx, cacheKey, result)
if err != nil {
_ = tx.Rollback()
return nil, biz.ErrRecordAlreadyExists
***
func (r *ewalletRepo) Update(ctx context.Context, req *biz.Ewallet) (*biz.Ewallet, error) { // 开启事务 tx, err := r.data.db.Tx(ctx) if err != nil { return nil, biz.ErrRecordAlreadyExists } // 修改 sum, err := tx.Ewallet.Update().SetBalance(req.Balance).SetFrozenAmount(req.Frozen_Amount).Where(ewallet.HasCustomerWith(customer.ID(req.Id))).Save(ctx) if err != nil { _ = tx.Rollback() return nil, v1.ErrorUniversalError(err.Error()) } else if sum != 1 { _ = tx.Rollback() return nil, v1.ErrorUniversalError(err.Error()) } // 查询 result, err := tx.Ewallet.Query().Where(ewallet.HasCustomerWith(customer.ID(req.Id))).Only(ctx) if err != nil { _ = tx.Rollback() return nil, v1.ErrorUniversalError(err.Error()) } cacheKey := r.CacheKey(req.Id) _ = r.data.cache.Del(ctx, cacheKey) err = r.data.setCache(ctx, cacheKey, result) if err != nil { _ = tx.Rollback() return nil, biz.ErrRecordAlreadyExists } // 执行事务 err = tx.Commit() if err != nil { // 事务回滚 _ = tx.Rollback() return nil, biz.ErrRecordAlreadyExists } return r.composes(result, err) } 改成不是直接修改数据库,而是修改缓存 添加到缓存 从底部存 头部取 使用LPOP 移出并获取列表的第一个元素 RPUSH 在列表中添加一个或多个值到列表尾部
func (r *ewalletRepo) Update(ctx context.Context, req *biz.Ewallet) (*biz.Ewallet, error) {
// 修改缓存
cacheKey := r.CacheKey(req.Id)
err := r.data.setCache(ctx, cacheKey, req)
if err != nil {
return nil, biz.ErrRecordAlreadyExists
}
// 添加到缓存底部
err = r.data.cache.RPush(ctx, cacheKey, req)
if err != nil {
return nil, biz.ErrRecordAlreadyExists
}
// 从缓存头部取
result, err := r.data.cache.LPop(ctx, cacheKey)
if err != nil {
return nil, biz.ErrRecordAlreadyExists
}
return r.composes(result, err)
}
阅读全文