go语言操作Redis

2021-04-04  本文已影响0人  梁帆

一、Redis简介

Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据结构,很多业务场景下的问题都可以很自然地映射到这些数据结构上。除此之外,通过复制、持久化和客户端分片等特性,我们可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。

1、Redis支持的数据结构

Redis支持诸如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、带范围查询的排序集合(sorted sets)、位图(bitmaps)、hyperloglogs、带半径查询和流的地理空间索引等数据结构(geospatial indexes)。

2、Redis应用场景

(1)缓存系统,减轻主数据库(MySQL)的压力。

(2)计数场景,比如微博、抖音中的关注数和粉丝数。

(3)热门排行榜,需要排序的场景特别适合使用ZSET。

(4)利用LIST可以实现队列的功能。

二、go-redis库

1、安装

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

2、连接

(1)普通连接

全局变量 普通连接

(2)、连接Redis哨兵模式

哨兵模式连接

(3)、连接Redis集群

连接Redis集群

3、基本使用

set/get

输出如下,符合我们的预期。

输出

三、Pipeline

Pipeline主要是一种网络优化。它本质上意味着客户端缓冲一堆命令并一次性将它们发送到服务器。这些命令不能保证在事务中执行。这么做的好处是节省了每个命令的网络往回时间(RTT)

pipelineDemo

四、事务

Redis是单线程的,因此单个命令始终是原子的,但是来自不同客户端的两个给定命令可以依次执行,例如在它们之间交替执行。但是,Multi/exec能够确保在multi/exec两个语句之间的命令之间没有其他客户端正在执行命令。

在这种场景我们需要使用TxPipeline。TxPipeline总体上类似于上面的Pipeline,但是它内部会使用MULTI/EXEC包裹排队的命令。例如:

TxPipeline用法

五、Watch

在某些场景下,我们除了要使用MULTI/EXEC命令外,还需要配合使用WATCH命令。在用户使用WATCH命令监视某个键之后,直到该用户执行EXEC命令的这段时间里,如果有其他用户抢先对被监视的键进行了替换、更新、删除等操作,那么当用户尝试执行EXEC的时候,事务将失败并返回一个错误,用户可以根据这个错误选择重试事务或者放弃事务。

Watch(fn func(*Tx) error, keys ...string) error

Watch方法接收一个函数和一个或多个key作为参数。基本使用示例如下:

示例
上一篇 下一篇

猜你喜欢

热点阅读