一、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)普通连接
![](https://img.haomeiwen.com/i6201627/26819ccb7e4a86d9.png)
![](https://img.haomeiwen.com/i6201627/c66039b9c2ea5c0a.png)
(2)、连接Redis哨兵模式
![](https://img.haomeiwen.com/i6201627/7c09338cf00f1a80.png)
(3)、连接Redis集群
![](https://img.haomeiwen.com/i6201627/264bd9bde7e9c1e7.png)
3、基本使用
![](https://img.haomeiwen.com/i6201627/042f13e4ca852a14.png)
输出如下,符合我们的预期。
![](https://img.haomeiwen.com/i6201627/134867bb03e72877.png)
三、Pipeline
Pipeline主要是一种网络优化。它本质上意味着客户端缓冲一堆命令并一次性将它们发送到服务器。这些命令不能保证在事务中执行。这么做的好处是节省了每个命令的网络往回时间(RTT)。
![](https://img.haomeiwen.com/i6201627/27ff25b049b4192e.png)
四、事务
Redis是单线程的,因此单个命令始终是原子的,但是来自不同客户端的两个给定命令可以依次执行,例如在它们之间交替执行。但是,Multi/exec能够确保在multi/exec两个语句之间的命令之间没有其他客户端正在执行命令。
在这种场景我们需要使用TxPipeline。TxPipeline总体上类似于上面的Pipeline,但是它内部会使用MULTI/EXEC包裹排队的命令。例如:
![](https://img.haomeiwen.com/i6201627/c1d0993e1743bcc0.png)
五、Watch
在某些场景下,我们除了要使用MULTI/EXEC命令外,还需要配合使用WATCH命令。在用户使用WATCH命令监视某个键之后,直到该用户执行EXEC命令的这段时间里,如果有其他用户抢先对被监视的键进行了替换、更新、删除等操作,那么当用户尝试执行EXEC的时候,事务将失败并返回一个错误,用户可以根据这个错误选择重试事务或者放弃事务。
Watch(fn func(*Tx) error, keys ...string) error
Watch方法接收一个函数和一个或多个key作为参数。基本使用示例如下:
![](https://img.haomeiwen.com/i6201627/240cc3e95dc4d9e4.png)
网友评论