学习别人的知识,然后自己也分不清是记住了还是理解了,然后就写一写,发现看过的会了,和自己写一遍还是有差别的,希望自己这次可以坚持的好点,加油!思路:先查询redis中是否有缓存的数据,如果没有,就查询mysql数据库,查询到数据后,将查询到的数据写到redis中,设置expire超时时间。
注意点:从数据库中查询到的结果是结构体切片,所以需要先定义一个结构体,这个结构体和查询出的数据的字段对应,注
转载
2023-05-26 15:07:31
93阅读
先下载redis的包go get -u github.com/go-redis/redis/v8 代码实现//redis
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
"time"
)
var rdb *redis.Client
//初始化链接
func initClient() (err error) {
rdb
转载
2023-07-03 16:45:15
95阅读
最近遇到一个有意思的关于分布式锁的问题,期间产生了有很多有意思的问题和讨论,这里记录一下。在大多数场景下很多程序员都喜欢使用redis来做分布式锁,但是公司内最近缓存服务为了推行标准化禁用了lua脚本,使得原有的分布式锁实现都要另谋出路,最后选择了zk来做分布式锁,因为go-zookeeper只支持阻塞锁,做了一些改造使其支持非阻塞和待失效时间的锁,有类似需求的同学也可以参考下https://gi
转载
2023-08-15 18:09:32
59阅读
Redis的事务,Go+luaRedis 事务Redis的基本事务(basic transaction)需要用到MULTI命令和EXEC命令,这种事务可以让一个客户端在不被其他客户端打断的情况下执行多个命令。和关系数据库那种可以在执行的过程中进行回滚(rollback)的事务不同,在Redis里面,被MULTI命令和EXEC命令包围的所有命令会一个接一个地执行,直到所有命令都执行完毕为止。当一个事
转载
2023-09-10 21:50:06
74阅读
使用redis实现分布式令牌桶算法:团队接了个根据告警的进行处理的需求,需要限制这个处理的速度,比如说一个小时只能最多处理三个,防止在晚上出现大量不可控变更影响。令牌桶算法原理可以参照,k8s限速队列、令牌桶原理可以参照k8s限速队列。问题描述限速队列在单实例的环境下用go可以很方便实现,大概是使用一个定时任务来轮询。设定一个根据补充间隔设定定时任务要是bucket是满的就直接更新时间并返回,bu
转载
2023-07-06 23:06:02
52阅读
缓存缓存是我们开发过程中必不可少的一项提供接口性能的方式,但是,对项目引入缓存也会带来问题,比如缓存穿透,HotKey,缓存雪崩,缓存击穿,缓存一致性的问腿。所以,我们可能在缓存库中加入一些解决方案。设计的目标我们的目标是设计一个通用的缓存库。设计的目标如下基本操作提供基础操作,创建和删除缓存。// Cache ...
type Cache interface {
Set(ctx context
转载
2023-10-19 23:18:14
86阅读
最近翻阅了几本跟Redis相关的书籍,比如《Redis设计与实现 第二版》和钱老师的《Redis深度历险:核心原理与应用实践》,想着Redis的核心功能无非就是操作数据嘛,就像做一个Go语言版的Redis,不仅提升了对Redis源码的了解,也提高了Go语言的编码能力,说干就干。代码地址:JaricY/miniRedis (github.com)选用Go的原因是因为Go相对于C语言提供了更多的高级
Redis Cluster架构优化在《全面剖析Redis Cluster原理和应用》中,我们已经详细剖析了现阶段Redis Cluster的缺点:无中心化架构Gossip消息的开销不停机升级困难无法根据统计区分冷热数据客户端的挑战Cluster协议支持连接和路由表的维护开销MultiOp和Pipeline支持有限Redis实现问题不能自动发现不能自动Resharding无监控管理UI最终一致性和“
一、CacheCloud介绍该项目由搜狐开源,源代码托管至github上,地址为:https://github.com/sohutv/cachecloud。 CacheCloud提供一个Redis云管理平台:实现多种类型(Redis Standalone、Redis Sentinel、Redis Cluster)自动部署、解决Redis实例碎片化现象、提供完善统计、监控、运维功
转载
2023-09-15 14:36:35
63阅读
为啥要使用连接池:因为TCP的三只握手等等原因,建立一个连接是一件成本比较高的行为。所以在一个需要多次与特定实体交互的程序中,就需要维持一个连接池,里面有可以复用的连接可供重复使用 mysql下载依赖包 go get -u github.com/go-sql-driver/mysql func ConnectMysql() *sql.DB {
dataSour
转载
2023-07-11 22:49:05
266阅读
一、节点间的内部通信机制1、基础通信原理(1)redis cluster节点间采取gossip协议进行通信跟集中式不同,不是将集群元数据(节点信息,故障,等等)集中存储在某个节点上,而是互相之间不断通信,保持整个集群所有节点的数据是完整的维护集群的元数据用得,集中式,一种叫做gossip集中式:好处在于,元数据的更新和读取,时效性非常好,一旦元数据出现了变更,立即就更新到集中式的存储中,其他节点读
redis是目前流行的高性能key/value缓存,基本上在各种项目都经常出现,后续教程针对golang如何操作redis进行展开。本教程是使用的是go-redis/redis包操作redis。 github: GitHub - go-redis/redis: Type-safe Redis client for Golang1.安装依赖包 go get -u github.c
转载
2023-08-15 17:02:57
242阅读
go连接并简单操作redis 文章目录go连接并简单操作redis一、下载依赖库一、redis数据库的链接?二、简单的使用1.string类型数据的插入查询2.struct类型数据的插入查询3. map类型数据的插入查询4.List 数据的插入删除5.操作set6.操作zset7.设置过期时间8.自定义命令参考总结 一、下载依赖库go get github.com/go-redis/redis/v
转载
2023-07-13 14:01:15
132阅读
今天随手写了一个go测试程序 观察使用pipeline与不使用性能差异先看结论耗时差距 测试代码如下var global_con redis.Conn
const access_count = 100
func connect_redis(adress string) bool {
con, err := redis.Dial("tcp", adress, redis.DialPasswor
转载
2023-05-30 15:50:55
256阅读
Redis简介NoSQL(Not Only SQL),指的是非关系型的数据库。随着Web2.0的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。redis是一个key-value存储系统,类似还有Memcached。它支持存储的value类型
转载
2023-07-11 22:49:53
113阅读
一、Redis概述Redis是一个内存数据结构存储系统。它主要有以下特点:与其他数据库不同,它的数据主要存储在内存中,当然为了数据安全它也有磁盘存储备份。由于内存存储,所以它性能非常高。与其他K-V缓存系统不同,它提供多种数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) ,甚至提供Sub/Pub机制,你可
转载
2023-09-04 14:03:52
87阅读
一、pipeline出现的背景redis客户端执行一条命令分4个过程:发送命令 -> 命令排队 -> 命令执行 -> 返回结果这个过程称为Round trip time(简称RTT, 往返时间),mget、mset有效节约了RTT,但大部分命令不支持批量操作,需要消耗N次RTT ,这个时候需要pipeline来解决这个问题。Pipeline 主要是一种网络优化,它本质上意味着客户
转载
2023-06-13 19:25:10
271阅读
最近订阅号被RedisJSON的性能测试报告刷屏,好像甩了MongoDB,ES几条街的样子。ps:我就是个菜鸟,只是之前学习了MongoDB,看到RedisJSON就想也学习一下。(RedisJSON纯内存,快是必然的。RedisJSON纯内存,可靠性是否会存在一些问题呢?大公司用MongoDB存储EB级别的数据,如果用RedisJSON存储会不会成本大增? -----
验证下映射到分片的hash算法--------------------0.原子操作,要么都成功,要么都失败,集群不支持TxPipeli用连接池...
原创
2023-02-23 08:57:24
43阅读
使用docker安装redis搜索redis镜像$ docker search redis复制代码拉取最新镜像$ docker pull redis:latest复制代码查看本地镜像$ docker images复制代码运行redis容器, 默认使用6379端口$ docker run -itd --name redis-test -p 6379:6379 redis复制代码查看容器运行消息$ d
转载
2021-01-31 12:55:29
627阅读
2评论