GO实现Redis:GO实现Redis的AOF持久化(4)
将用户发来的指令以RESP协议的形式存储在本地的AOF文件,重启Redis后执行此文件恢复数据 https://github.com/csgopher/go-redis 本文涉及以下文件: redis.conf:配置文件 aof:实现aof redis.conf appendonly yes appendfilename appendonly.aof aof/aof.go type Cm
Redis 2023年07月11日 115
/www/wwwroot/xunjs.com/app/index/controller/Tags.php:34:string 'Redis' (length=5)
将用户发来的指令以RESP协议的形式存储在本地的AOF文件,重启Redis后执行此文件恢复数据 https://github.com/csgopher/go-redis 本文涉及以下文件: redis.conf:配置文件 aof:实现aof redis.conf appendonly yes appendfilename appendonly.aof aof/aof.go type Cm
Redis 2023年07月11日 115
哈希表是一种保存键值对(key-value)的数据结构 哈希表优点在于,它能以 O(1) 的复杂度快速查询数据。 怎么做到的呢? 将 key 通过 Hash 函数的计算,就能定位数据在表中的位置,因为哈希表实际上是数组,所以可以通过索引值快速查询到数据。 在哈希表大小固定的情况下,随着数据不断增多,那么哈希冲突的可能性也会越高。 Redis 采用了**「链式哈希」**来解决哈希冲突,在不
Redis 2023年07月11日 139
一、高可用 什么是高可用 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务( 如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失等。 Redis的高可用 Redis中,实现高可用的技术主要包括持久化
Redis 2023年07月11日 138
使用HashOperations操作redis 方法 c参数 s说明 Long delete(H key, Object... hashKeys); H
一、分布式锁基本原理 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁应该满足的条件: 可见性:多个线程都能看到相同的结果,注意:这个地方说的可见性并不是并发编程中指的内存可见性,只是说多个进程之间都能感知到变化的意思 互斥:互斥是分布式锁的最基本的条件,使得程序串行执行 高可用:程序不易崩溃,时时刻刻都保证较高的可用性 高性能:由于加锁本身
Redis 2023年07月11日 140
一、分布式锁是什么 分布式锁是 满足分布式系统或集群模式下多进程可见并且互斥的锁。 基于Redis实现分布式锁: 1、获取锁 互斥:确保只能有一个线程获取锁; 非阻塞:尝试获取锁,成功返回true,失败返回false; 添加锁过期时间,避免服务宕机引起死锁。 SET lock thread1 NX EX 10 2、释放锁 手动释放;DEL key1 超时释放,获取锁时添
Redis 2023年07月11日 191
序列化基本 默认使用的是jdk序列化 会使字符串转义 在实际开发中,当我们要往redis中存对象时,都要进行序列化的。 当然,如果我们把对象给转换json字符串,此时存储的相当于是字符串。不序列化并不影响正常运行 但是,通常我们都要把我们创建的对象给序列化。 假如我们不序列化,存储对象 在实际开发中我们可能使用json去转换,我们还不想使用jdk序列化(默认的是jdk序
Redis 2023年07月11日 156
前言 对redis的使用,想必做过后端开发的同学都不陌生,redis为key/value非关系型数据库,使用起来简单高效,支持的数据类型也比较丰富,几乎在日常开发中没有不涉及的; 但如果对redis使用比较深入的话,还需要综合考虑多方面的因素,比如使用redis时如何兼具高效与性能,如何设计合理的key以达到存取时最高效等等,这都是应该考虑的,下面结合redis中一个比较简单但也容易的问题,关
Redis 2023年07月11日 151
明明做了数据删除,数据量已经不大了,为什么使用 top 命令查看时,还会发现 Redis 占用了很多内存呢?实际上,这是因为,当数据删除后,Redis 释放的内存空间会由内存分配器管理,并不会立即返回给操作系统。 Redis 释放的内存空间可能并不是连续的,那么,这些不连续的内存空间很有可能处于一种闲置的状态。这就会导致一个问题:虽然有空闲空间,Redis 却无法用来保存数据,不仅会减少 Red
Redis 2023年07月11日 178
缓冲区(buffer),是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。 一、Redis缓冲区溢出影响 在Redis中,主要有三个场景用到了缓冲区的概念。 在客户端和服务器端之间进行通信时,用来暂存客户端发送的命令数据,或者是服务器端返回给客户端的数据结果 在主从节点间进行数据同步时,Redis使用缓冲区来
Redis 2023年07月11日 170
1 第一个坑:错误释放锁时机 1.1. 发现问题 分析以下代码存在什么问题: // 分布式锁服务 public interface RedisLockService { // 获取锁 public boolean getLock(String key); // 释放锁 public boolean releaseLock(String key)
Redis 2023年07月11日 149
1. 什么是Redis?它主要用来什么的? Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读
Redis 2023年07月11日 1476
一、前言 为什么需要分布式锁? 在我们的日常开发中,一个进程中当多线程的去竞争某一资源的时候,我们通常会用一把锁来保证只有一个线程获取到资源。如加上synchronize关键字或ReentrantLock锁等操作。 那么,如果是多个进程相互竞争一个资源,如何保证资源只会被一个操作者持有呢? 例如:微服务的架构下,多个应用服务要同时对同一条数据做修改,那么要确保数据的正确性,就只能有一个应
Redis 2023年07月10日 177
Redis 2023年07月09日 168