首页 > 数据库 >解决方案(11) redis切面操作

解决方案(11) redis切面操作

时间:2022-11-22 23:37:40浏览次数:48  
标签:11 rediy redis 切面 reportErr com conn


前言

基于某些场景,我们需要对项目内redis操作,进行切面操作,他包括但不限于:

  • 高频同key熔断,防止组员死循环写蹦redis集群。
  • 错误收集,对​​conn.Do("set","uname","tommy","a wrong arg")​​类回避错误的写法,能够收集到错误信息。
  • 统计实时redis流量

总之,在某些时候,我们需要对redis操作,进行切面化运作。在实现这种场景时,我们必须保障:

  • 不侵入或极少侵入业务代码。
  • 拓展灵活。

声明

本次的解决方案,仅解决golang下github.com/garyburd/redigo包的切面拓展

解决方案

仓库: ​​github.com/fwhezfwhez/rediy​

最佳实践

2.1 高频熔断

  • rediy提供实现好的100w/10s 同key高频熔断
  • 如果需要自己订制,可以复制一份,自行修改
rediy.Use(rediy.FuseHighFrequency)

2.2 实时错误捕捉

  • 本类中间件适合放在最上面Use()
  • 即使写法无视错误,该中间件依旧能捕捉到
package main

import (
"fmt"
"github.com/fwhezfwhez/rediy"
)

func main() {
pool := rediy.NewPool("localhost:6379", "", 0)
rediy.Use(reportErr)

conn := pool.Get()
defer conn.Close()
conn.Do("set", "uname", "ft", "wrong-arg") // writing style will ignore error,but will captured in reportErr
}

func reportErr(c *rediy.Context) {
c.Next()

if c.Reply.Err() != nil {
fmt.Println("recv err", c.Reply.Err().Error())
return
}
}


标签:11,rediy,redis,切面,reportErr,com,conn
From: https://blog.51cto.com/u_11553781/5878732

相关文章

  • redis
    目录应用场景快速开始数据类型配置文件主从分片是一个开源的C语言编写的k-v数据库应用场景数据缓存session共享排行榜/计数器nginx+lua+redis计数自动封ip......
  • 11.22.5
    #include<stdio.h>#include<string.h>intmain(){ inti,len;chara[100];gets(a);len=strlen(a);for(i=0;i<len;i++){if(a[i]>='A'&&a[i]<='Z'){a[i]=a[i]+32;}......
  • 2022-11-22-4
    1packagecn.itsource._inputsteam;23importjava.io.FileNotFoundException;4importjava.io.FileWriter;5importjava.io.IOException;67publiccl......
  • 2022-11-22-5
    1packagecn.itsource._inputsteam;23importjava.io.FileNotFoundException;4importjava.io.FileReader;5importjava.io.IOException;67publiccl......
  • Redis 常用命令
    1.登入dockerexec-itredisredis-cliauth密码dockerexec-it redis redis-cli-a密码2.选择数据库(16个,需要需要选择一个)select24.操作返回类型......
  • docker下安装redis
    1.拉取redis镜像:dockerpullredis2.查看本地镜像:dockerimages  3.从redis官网下载redis.conf配置文件:打开链接 http://download.redis.io/redis-stable,找到......
  • 11.22.3
    #include<stdio.h>intmain(){ inti,k,l,sum1=0,sum2=0; for(i=1;i<=3000;i++) { for(k=1;k<=i/2;k++) {if(i%k==0) {sum1+=k; } } for(l=1;l<=sum1/2;l++) {i......
  • 2022-11-22学习内容-Client端代码编写-数据删除
    1.Client端代码编写1.1activity_content_write.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/androi......
  • 2022-11-22-2
    1packagecn.itsource._inputsteam;23importjava.io.UnsupportedEncodingException;45/**6*该类用于编译问题:7*编码转换方法及......
  • Could not connect to Redis at 127.0.0.1:6379: Connection refused
    [root@centoszang桌面]#redis-cliCouldnotconnecttoRedisat127.0.0.1:6379:ConnectionrefusedCouldnotconnecttoRedisat127.0.0.1:6379:Connectionref......