当前位置: 首页 > news >正文

30天学会Go--第7天 GO语言 Redis 学习与实践

30天学会Go–第7天 GO语言 Redis 学习与实践

文章目录

  • 30天学会Go--第7天 GO语言 Redis 学习与实践
    • 前言
    • 一、Redis 基础知识
      • 1.1 Redis 的核心特性
      • 1.2 Redis 常见使用场景
    • 二、安装 Redis
      • 2.1 在 Linux 上安装
      • 2.2 在 Windows 上安装
      • 2.3 使用 Docker 安装 Redis
    • 三、Redis 常用命令
      • 3.1 基本操作
      • 3.2 数据结构操作
        • 字符串(String)
        • 哈希(Hash)
        • 列表(List)
        • 集合(Set)
        • 有序集合(Sorted Set)
    • 四、在 Go 中使用 Redis
      • 4.1 安装 go-redis
      • 4.2 使用示例
        • 代码示例
      • 4.3 代码解读
    • 五、Redis 高级功能
      • 5.1 发布/订阅(Pub/Sub)
        • 代码示例
      • 5.2 使用 Redis 实现分布式锁
        • 代码示例
    • 六、总结

前言

Redis 是一个高性能的开源内存数据库,常用于缓存、消息队列、会话存储等场景。它支持多种数据结构(如字符串、哈希、列表、集合、有序集合等)和丰富的操作命令,具有极高的性能和灵活性。

以下是 Redis 的基础知识、安装、常用命令,以及在 Go 中使用 Redis 的方法。

go语言官方编程指南:https://pkg.go.dev/stdopen in new window

go语言的官方文档学习笔记很全,推荐去官网学习

30天学会Go–第7天 GO语言 Redis 学习与实践(改):30天学会Go–第7天 GO语言 Redis 学习与实践(改)

本章讲redis有所欠缺,请移步新的blog

30天学会Go–第6天 GO语言 RESTful API 学习与实践:30天学会Go–第6天 GO语言 RESTful API 学习与实践-CSDN博客


一、Redis 基础知识

1.1 Redis 的核心特性

  • 内存存储:所有数据存储在内存中,读写速度极快。
  • 多种数据结构:支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。
  • 持久化:支持将内存数据持久化到磁盘(RDB 和 AOF 两种方式)。
  • 高可用:支持主从复制、哨兵模式和集群模式,提供高可用性和扩展性。
  • 丰富的功能:如发布/订阅(Pub/Sub)、事务、Lua 脚本等。

1.2 Redis 常见使用场景

  • 缓存:将经常访问的数据存储到 Redis 中,提高读取性能。
  • 会话存储:存储用户登录状态等会话信息。
  • 排行榜:利用有序集合(Sorted Set)实现排行榜功能。
  • 消息队列:使用列表(List)或发布/订阅功能实现消息队列。
  • 分布式锁:利用 Redis 的原子操作实现分布式锁。

二、安装 Redis

2.1 在 Linux 上安装

  1. 下载 Redis:
    wget http://download.redis.io/redis-stable.tar.gz
    
  2. 解压并编译:
    tar xzf redis-stable.tar.gz
    cd redis-stable
    make
    
  3. 启动 Redis:
    src/redis-server
    

2.2 在 Windows 上安装

  1. 下载 Redis for Windows:
    • Redis 官方不支持 Windows,但可以下载社区版:https://github.com/microsoftarchive/redis/releases
  2. 解压后运行 redis-server.exe 启动服务。

2.3 使用 Docker 安装 Redis

  1. 拉取 Redis 镜像:
    docker pull redis
    
  2. 启动 Redis 容器:
    docker run -d --name redis -p 6379:6379 redis
    

三、Redis 常用命令

3.1 基本操作

  • 连接 Redis

    redis-cli
    
  • 设置键值对

    SET key value
    
  • 获取键值

    GET key
    
  • 删除键

    DEL key
    
  • 检查键是否存在

    EXISTS key
    
  • 设置过期时间(秒)

    EXPIRE key seconds
    
  • 查看剩余过期时间

    TTL key
    

3.2 数据结构操作

字符串(String)
  • 增加值(适用于数值类型)

    INCR key
    INCRBY key increment
    DECR key
    DECRBY key decrement
    
哈希(Hash)
  • 设置哈希字段
    HSET key field value
    
  • 获取哈希字段值
    HGET key field
    
  • 获取所有字段和值
    HGETALL key
    
列表(List)
  • 从左插入元素

    LPUSH key value1 value2
    
  • 从右插入元素

    RPUSH key value1 value2
    
  • 获取列表范围内的元素

    LRANGE key start stop
    
  • 弹出最左边的元素

    LPOP key
    
集合(Set)
  • 添加元素到集合
    SADD key member1 member2
    
  • 获取集合中的所有元素
    SMEMBERS key
    
  • 检查元素是否存在
    SISMEMBER key member
    
有序集合(Sorted Set)
  • 添加元素并设置分数
    ZADD key score1 member1 score2 member2
    
  • 获取有序集合中的元素
    ZRANGE key start stop WITHSCORES
    

四、在 Go 中使用 Redis

在 Go 中使用 Redis,通常使用第三方库 go-redis。

4.1 安装 go-redis

运行以下命令安装:

go get github.com/redis/go-redis/v9

4.2 使用示例

以下是一个简单的示例,展示如何在 Go 中使用 Redis。

代码示例
package mainimport ("context""fmt""github.com/redis/go-redis/v9"
)var ctx = context.Background()func main() {// 1. 连接到 Redisrdb := redis.NewClient(&redis.Options{Addr:     "localhost:6379", // Redis 地址Password: "",               // 如果没有设置密码,留空DB:       0,                // 使用默认数据库})// 2. 写入数据err := rdb.Set(ctx, "key", "value", 0).Err()if err != nil {panic(err)}// 3. 读取数据val, err := rdb.Get(ctx, "key").Result()if err != nil {panic(err)}fmt.Println("key:", val)// 4. 检查键是否存在exists, err := rdb.Exists(ctx, "key").Result()if err != nil {panic(err)}fmt.Println("key exists:", exists)// 5. 删除键err = rdb.Del(ctx, "key").Err()if err != nil {panic(err)}fmt.Println("key deleted")
}

4.3 代码解读

  1. 连接 Redis

    • 使用 redis.NewClient 创建 Redis 客户端。
    • 配置地址、密码和数据库编号。
  2. 写入数据

    • 使用 Set 方法写入键值对。
    • 第三个参数为过期时间,0 表示不过期。
  3. 读取数据

    • 使用 Get 方法读取键的值。
  4. 检查键是否存在

    • 使用 Exists 方法检查键是否存在。
  5. 删除键

    • 使用 Del 方法删除键。

五、Redis 高级功能

5.1 发布/订阅(Pub/Sub)

Redis 支持发布/订阅模式,可以实现消息广播。

代码示例
// 发布消息
rdb.Publish(ctx, "channel1", "Hello, Redis!").Err()// 订阅消息
sub := rdb.Subscribe(ctx, "channel1")
ch := sub.Channel()
for msg := range ch {fmt.Println("Received message:", msg.Payload)
}

5.2 使用 Redis 实现分布式锁

Redis 的原子操作可以用来实现分布式锁。

代码示例
// 加锁
ok, err := rdb.SetNX(ctx, "lock_key", "lock_value", 10*time.Second).Result()
if err != nil || !ok {fmt.Println("Failed to acquire lock")return
}// 执行业务逻辑
fmt.Println("Lock acquired, executing task...")// 解锁
rdb.Del(ctx, "lock_key")

六、总结

Redis 是一个功能强大且灵活的内存数据库,在 Go 中使用 Redis 非常简单。通过学习 Redis 的基本命令和在 Go 中的集成,你可以轻松实现缓存、消息队列、分布式锁等功能。

相关文章:

30天学会Go--第7天 GO语言 Redis 学习与实践

30天学会Go–第7天 GO语言 Redis 学习与实践 文章目录 30天学会Go--第7天 GO语言 Redis 学习与实践前言一、Redis 基础知识1.1 Redis 的核心特性1.2 Redis 常见使用场景 二、安装 Redis2.1 在 Linux 上安装2.2 在 Windows 上安装2.3 使用 Docker 安装 Redis 三、Redis 常用命令…...

java 使用JSqlParser和CCJSqlParser 解析sql

maven <dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>4.9</version> </dependency>解析SQL String sql "select aa,bb from b"; Statement statementCCJSq…...

基于spring boot的高校专业实习管理系统的设计与实现

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 设计题目&#xff1a;基于spring boot的高校专业实习管理系统的设计与实现 摘 要 随着国内市场经济这几十年来的蓬勃发展&#xff0c;突然遇到了从国外传入国内的互联网技术&#xff0c;互联网产业从开…...

OpenCV相机标定与3D重建(11)机器人世界手眼标定函数calibrateRobotWorldHandEye()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算机器人世界/手眼标定&#xff1a; w T b _{}^{w}\textrm{T}_b w​Tb​ 和 c T g _{}^{c}\textrm{T}_g c​Tg​。 cv::calibrateRobotWorldHa…...

计算机网络ENSP课设--三层架构企业网络

本课程设计搭建一个小型互联网&#xff0c;并模拟Internet的典型Web服务过程。通过此次课程设计&#xff0c;可以进一步理解Internet的工作原理和协议过程&#xff0c;并提高综合知识的运用能力和分析能力。具体目标包括&#xff1a; &#xff08;1&#xff09;掌握网络拓扑的…...

【openwrt】openwrt-21.02 基于IP地址使用ipset实现策略路由操作说明

openwrt版本信息 DISTRIB_ID=OpenWrt DISTRIB_RELEASE=21.02-SNAPSHOT DISTRIB_REVISION=r0-6bf6af1d5 DISTRIB_TARGET=mediatek/mt7981 DISTRIB_ARCH=aarch64_cortex-a53 DISTRIB_DESCRIPTION=OpenWrt 21.02-SNAPSHOT r0-6bf6af1d5 DISTRIB_TAINTS=no-all busybox override …...

Git:常用命令

一、查看当前分支 git branch 二、查看所有分支 git branch -a 三、切换到远程分支 git checkout origin/分支名 示例&#xff1a;git checkout origin/dev 四、拉取远程分支代码 git pull origin 分支名 示例&#xff1a;git pull origin dev 五、常用指令 查看暂存区…...

【2025最新版】搭建个人博客教程

【2025最新版】搭建个人博客教程 –小记&#xff1a; 在搭建我的这个博客之前我在CSDN也发布过一些文章&#xff0c;目前应该也是几千粉丝了&#xff0c;但是看到别人都是用自己博客写的就感觉自己很LOW&#xff0c;所以就想自己来搭建一个属于自己的个人博客。当然搭建博客的…...

微信小程序实现联动删除输入验证码框

以下是json代码 {"component": true,"usingComponents": {} }以下是wxml代码 <van-popup show"{{ show }}" bind:close"onClose" custom-class"extract"><image src"../../images/extract/icon1.png"…...

数据库中decimal、float 和 double区别

在计算机科学中&#xff0c;decimal、float 和 double 是用于表示和处理数值的不同数据类型。 - decimal 是一种精确的十进制浮点数表示&#xff0c;通常用于需要高精度计算的场景&#xff0c;比如财务应用。它能够精确表示小数&#xff0c;并且不会出现浮点数运算误差。 - flo…...

网络编程01

1. 概念 通过网络&#xff0c;让两个主机之间能够进行通信&#xff0c;基于这样的通信完成一定的功能 只要满足进程不同即可&#xff0c;即使是同一个主机&#xff0c;只要是不同的进程&#xff0c;基于网络完成编程 进行网络编程时&#xff0c;需要操作系统提供一组API&…...

el-dialog修改其样式不生效加deep也没用

场景 el-dialog标签直接写在了template下。 解决方法 在template中先写一层div&#xff0c;包裹住el-dialog。...

三天精通一算法之快速排序

力扣链接912. 排序数组 - 力扣&#xff08;LeetCode&#xff09;注意这题快排不能用递归&#xff0c;否则堆会爆 快速排序&#xff08;Quicksort&#xff09;是一种高效的排序算法&#xff0c;通常使用分治法来将一个列表分成较小的子列表&#xff0c;然后递归地排序这些子列表…...

互联网、物联网的相关标准

互联网的相关标准 网络通信协议&#xff1a; HTTP&#xff08;Hypertext Transfer Protocol&#xff09;&#xff1a;用于在网络中传输文本、图像、音频和视频等数据的协议。它基于请求-响应模型&#xff0c;客户端发送请求给服务器&#xff0c;服务器返回响应。HTTPS&a…...

Linux题库及答案

填空题 1. 建立用户账号的命令是__useradd________。 2. 修改账号密码的命令是__passwd________。 3. 更改用户密码过期信息的命令是__chage________。 4. 创建一个新组的命令是___groupadd_______。 5. 用于在不注销的情况下切换到系统中的另一个用户的命令是___su_…...

Android 镜像模式和扩展模式区别探讨-Android14

Android 镜像模式和扩展模式区别探讨 1、区分镜像模式和扩展模式1.1 扩展屏是否有显示内容1.2 镜像模式显示条件 2、镜像模式界面 同屏显示和异屏显示探讨DisplayManagerService启动及主屏添加-Android13 Android主副屏显示-Android14 1、区分镜像模式和扩展模式 LogicalDispla…...

深度学习笔记之BERT(五)TinyBERT

深度学习笔记之TinyBERT 引言回顾&#xff1a;DistilBERT模型TinyBERT模型结构TinyBERT模型策略Transformer层蒸馏嵌入层蒸馏预测层蒸馏 TinyBERT模型的训练效果展示 引言 上一节介绍了 DistilBERT \text{DistilBERT} DistilBERT模型&#xff0c;本节将继续介绍优化性更强的知…...

【时间序列预测】基于PyTorch实现CNN_BiLSTM算法

文章目录 1. CNN与BiLSTM2. 完整代码实现3. 代码结构解读3.1 CNN Layer3.2 BiLSTM Layer3.3 Output Layer3.4 forward Layer 4. 应用场景5. 总结 本文将详细介绍如何使用Pytorch实现一个结合卷积神经网络&#xff08;CNN&#xff09;和双向长短期记忆网络&#xff08;BiLSTM&am…...

联想Y7000 2024版本笔记本 RTX4060安装ubuntu22.04双系统及深度学习环境配置

目录 1..制作启动盘 2.Windows 磁盘分区,删除原来ubuntu的启动项 3.四个设置 4.安装ubuntu 5.ubuntu系统配置 1..制作启动盘 先下载镜像文件,注意版本对应。Rufus - 轻松创建 USB 启动盘 用rufus制作时,需要注意选择正确的分区类型和系统类型。不然安装的系统会有问题…...

VuePress学习

1.介绍 VuePress 由两部分组成&#xff1a;第一部分是一个极简静态网站生成器 (opens new window)&#xff0c;它包含由 Vue 驱动的主题系统和插件 API&#xff0c;另一个部分是为书写技术文档而优化的默认主题&#xff0c;它的诞生初衷是为了支持 Vue 及其子项目的文档需求。…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...