Go 之 redis 处理

news/2024/10/18 8:32:37/

Redis是一个开源的内存数据库,支持诸如字符串(string)、哈希(hashe)、列表(list)、集合(set)、带范围查询的排序集合(sorted set)、bitmap、hyperloglog、带半径查询的地理空间索引(geospatial index)和流(stream)等数据结构。 

package mainimport ("context""errors""fmt""github.com/go-redis/redis/v8""time"
)var rdb *redis.Clientfunc main() {rdb = redis.NewClient(&redis.Options{Addr:     "localhost:6379",Password: "", // 密码DB:       0,  // 数据库PoolSize: 20, // 连接池大小})doCommand()doDemo()val, err := getValueFromRedis("test", "value")fmt.Println(val, err)val, err = getValueFromRedis("key", "value")fmt.Println(val, err)scanKeysDemo()delKeysByMatch("key", 5*time.Second)pipelineDemo()
}// doCommand go-redis基本使用示例
func doCommand() {ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)defer cancel()// 执行命令获取结果val, err := rdb.Get(ctx, "key").Result()if err != nil {fmt.Println(err)return}fmt.Println(val)// 先获取到命令对象cmder := rdb.Get(ctx, "key")fmt.Println(cmder.Val(), cmder.Err()) // 获取值和错误// 直接执行命令获取错误err = rdb.Set(ctx, "key", 10, time.Hour).Err()if err != nil {fmt.Println(err)return}// 直接执行命令获取值value := rdb.Get(ctx, "key").Val()fmt.Println(value)
}// doDemo rdb.Do 方法使用示例
func doDemo() {ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)defer cancel()// 直接执行命令获取错误err := rdb.Do(ctx, "set", "key", 10, "EX", 3600).Err()fmt.Println(err)// 执行命令获取结果val, err := rdb.Do(ctx, "get", "key").Result()fmt.Println(val, err)
}// getValueFromRedis redis.Nil判断
func getValueFromRedis(key, defaultValue string) (string, error) {ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)defer cancel()val, err := rdb.Get(ctx, key).Result()if err != nil {if errors.Is(err, redis.Nil) {return defaultValue, nil}return "", err}return val, nil}// scanKeysDemo 按前缀扫描key示例
func scanKeysDemo() {ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)defer cancel()// 按前缀扫描keyiter := rdb.Scan(ctx, 0, "key*", 0).Iterator()for iter.Next(ctx) {fmt.Println("keys", iter.Val())}if err := iter.Err(); err != nil {panic(err)}
}// delKeysByMatch 按match格式扫描所有key并删除
func delKeysByMatch(match string, timeout time.Duration) {ctx, cancel := context.WithTimeout(context.Background(), timeout)defer cancel()iter := rdb.Scan(ctx, 0, match, 0).Iterator()for iter.Next(ctx) {fmt.Println("val", iter.Val())err := rdb.Del(ctx, iter.Val()).Err()if err != nil {panic(err)}}if err := iter.Err(); err != nil {panic(err)}
}// pipelineDemo Redis Pipeline 允许通过使用单个 client-server-client 往返执行多个命令来提高性能
func pipelineDemo() {ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)defer cancel()pipe := rdb.Pipeline()incr := pipe.Incr(ctx, "pipeline_counter")pipe.Expire(ctx, "pipeline_counter", time.Hour)cmds, err := pipe.Exec(ctx)if err != nil {panic(err)}fmt.Println(cmds) // [incr pipeline_counter: 3 expire pipeline_counter 3600: true]// 在执行pipe.Exec之后才能获取到结果fmt.Println(incr.Val())
}


http://www.ppmy.cn/news/1131997.html

相关文章

产品设计与用户体验 优漫动游

用户体验是指产品在运行过程中与用户产生的联系以及用户在使用过程中的主观感受;产品在设计并生产的过程中,哪些会影响用户的体验,以及如何围绕以用户为中心进行产品设计,在《用户体验要素》一书中提出了用户体验五要素的理念&…

300元以内最好的开放式耳机是哪款、百元开放式耳机推荐

如果你是一位运动用户,或者耳道比较敏感的用户,耳机一定要选开放式的。开放式耳机的优点是在听歌的能够兼顾环境音,避免户外运动时出现的安全问题。在耳机的佩戴上舒适性上也比入耳式耳机好,不会对耳朵造成压迫导致不适。不足是音…

(三) gitblit管理员手册

(一)gitblit安装教程 (二) gitblit用户使用教程 (三) gitblit管理员手册 目录 权限管理创建仓库时创建用户普通用户 管理员用户访问限制和访问权限仓库创建权限分配 Teams普通组管理员组 参考资料 权限管理 创建仓库时 选择指定的人员查看,克隆,推送 不允许fork 对应Anonymo…

【每日一题】1498. 满足条件的子序列数目

1498. 满足条件的子序列数目 - 力扣(LeetCode) 给你一个整数数组 nums 和一个整数 target 。 请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。 由于答案可能很大,请将结果对 109 7 取余后…

API接口数据流转常见安全机制

01 什么是API? 百度百科给出了API的定义: API(应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需…

SpringCloud Alibaba - Sentinel 微服务保护解决雪崩问题、Hystrix 区别、安装及使用

目录 一、Sentinel 1.1、背景:雪崩问题 1.2、雪崩问题的解决办法 1.2.1、超时处理 缺陷:为什么这里只是 “缓解” 雪崩问题,而不是百分之百解决了雪问题呢? 1.2.2、舱壁模式 缺陷:资源浪费 1.2.3、熔断降级 1.…

【图像分割】图像检测(分割、特征提取)、各种特征(面积等)的测量和过滤(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

js 实现删除数组指定元素

文章目录 需求分析1. 使用 splice() 方法2. 使用 filter() 方法3. 使用 splice 和展开运算符(ES6): 新的需求新的分析 需求 删除数组中的指定元素,阁下该如何应对 分析 有多种方法可以实现 JavaScript 数组删除指定元素。以下是其…