redisRedis:remote dictorytion server 远程字典服务 是一种基于内存,亦可持久化的key-value数据库。实现高性能的3大原因基于单线程实现,避免多线程带来的线程切换开销,单线程中使用IO多路复用处理并发大部分操作基于内存,读写操作不需要磁盘IO采取简单的数据结构,例如跳表、哈希表redis数据结构字符串redis中字符串的实现为 :SDS 简单动态字符串其实现
转载
2023-07-04 18:06:15
41阅读
String类型 可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512M 实现方式: 一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。 常用命令:set key value :设置key对应的st
转载
2023-08-15 17:30:34
65阅读
Redis的字符串是如何实现的前言为什么不用char*传统设计操作复杂度高SDS的设计SDS的高效操作创建sds字符数组拼接长度获取预分配内存空间节省内存的设计 前言字符串在日常开发中应用得比较普遍,对于Redis来说,键值对中的键是字符串,值也是字符串。比如在Redis中写入一条客户信息记录姓名、性别、爱好等。 在Redis这种内存数据库中,由于字符串被广泛的应用,在设计字符串时基于以下几点来
转载
2023-09-18 23:12:10
29阅读
redis虽然是一个非关系型内存数据库, 但是它支持传统的关系型数据库的事务。redis事务提供了一种将多个命令请求打包,然后一次性、按照顺序地执行多个命令的机制,并且在事务执行的期间,服务器不会中断事务而去执行其他不在事务中的命令请求,它会把事务中所有的命令都执行完毕才会去执行其他的命令。事务实现命令Redis中提供了multi、discard、exec、watch、unwatch这几个命令来实
转载
2023-09-02 18:59:37
64阅读
最近研究了一下redis里面字典的实现,redis作为高效的内存存储而被广泛使用,内部实现的db结构以及多种高效的数据结构,其底层基本上就是靠字典来实现。而其字典数据结构是基于哈希表来实现的,其中一些特性的实现十分精妙。1.数据结构节点数据结构因为是基于开链法的哈希表实现,所以需要维护了一个next节点typedef struct dictEntry {
void *key;
un
转载
2023-07-04 15:43:25
57阅读
LRU算法LRU(Least Recently Used),即最近最少使用,是一种缓存置换算法。在使用内存作为缓存的时候,缓存的大小一般是固定的。当缓存被占满,这个时候继续往缓存里面添加数据,就需要淘汰一部分老的数据,释放内存空间用来存储新的数据。这个时候就可以使用LRU算法了。其核心思想是:如果一个数据在最近一段时间没有被用到,那么将来被使用到的可能性也很小,所以就可以被淘汰掉。LRU在Redi
转载
2023-08-14 16:43:38
65阅读
redis做了一个用作字符串的SDS,除了一些不需要修改的场景,都是用SDS
C字符串的底层实现总是一 个N+1个字符长的数组
转载
2023-08-03 09:13:31
46阅读
简述Redis事务实现 1、事务开始 MULTI命令的执行,标识着一个事务的开始。MULTI命令会将客户端状态的 flags 属性中打开 REDIS_MULTI 标识来完成的。 2、命令入队 当一个客户端切换到事务状态之后,服务器会根据这个客户端发送来的命令来执行不同的操作。如果客户端发送的命令为MULTI、EXEC、WATCH、DISCARD中的一个,立即执行这个命令,否则将命令放入一个事务队列
转载
2023-06-25 20:22:00
73阅读
redis高可用的几种实现方式阅读提示利用主从复制的方式实现高可用什么是主从复制主从复制的原理主从复制的几大优缺点主从复制的构建过程利用哨兵的方式实现高可用什么是哨兵哨兵的原理哨兵的几大优缺点哨兵的构建流程利用集群的方式实现高可用什么是集群集群的原理集群的几大优缺点集群的构建流程 阅读提示以下的文章都是我对redis高可用的理解,并不能保证理解正确,只是为了做笔记,来记录当前我对redis的理解
转载
2023-07-07 15:07:53
109阅读
1.Redis 字典 Hash算法根据key计算hash值hash = dict -> type -> hashFunction(key);根据sizemask属性和哈希值,计算出索引,ht[x]可以是ht[0]或ht[1]index = hash & dict -> ht[x].sizemask;Redis使用MurmurHash2算法计算键的哈希值,优点在于即使输入的
转载
2023-08-30 08:42:56
39阅读
我是通过后台管理页面创建红包的.具体步骤
1.小红包预先生成,插到数据库里,红包对应的用户ID是null,红包金额是在min-max的范围内的值.
2.再将红包在数据库中的id与对应的红包金额,以json的格式存入redis的list中。RedEnvelopePutDto redEnvelopePutDto = new RedEnvelopePutDto();
redEnvelopePutD
转载
2023-07-08 23:52:46
67阅读
LRU(Least Recently Used)最近最少使用算法是众多置换算法中的一种。 Redis中有一个maxmemory概念,主要是为了将使用的内存限定在一个固定的大小。Redis用到的LRU 算法,是一种近似的LRU算法。1 设置maxmemory上面已经说过maxmemory是为了限定Redis最大内存使用量。有多种方法设定它的大小。其中一种方法是通过CONFIG SET设定,如下:1
转载
2024-03-03 12:48:19
71阅读
延迟队列是指把当前要做的事情,往后推迟一段时间再做。延迟队列在实际工作中和面试中都比较常见,它的实现方式有很多种,然而每种实现方式也都有它的优缺点,接下来我们来看。延迟队列的使用场景延迟队列的常见使用场景有以下几种:超过 30 分钟未支付的订单,将会被取消外卖商家超过 5 分钟未接单的订单,将会被取消在平台注册但 30 天内未登录的用户,发短信提醒等类似的应用场景,都可以使用延迟队列来实现。常见实
转载
2023-07-07 16:37:52
47阅读
PHP Redis秒杀系统总结
今天,我在公司遇到一个同事,问我秒杀业务的流程,我索性整理了一下原来的资料,给大家分享一下。个人整理------仅供参考。 一,秒杀的基本流程 秒杀列表秒杀详情页 倒计时判断用户参加活动的状态 库存(判断)修改库存创建订单定时任务守护进程 二,流程详解首先,我们做秒杀,流程基本是以上8个步骤,当然这
转载
2023-09-01 23:10:28
152阅读
Redis秒杀场景Hi,我是阿昌,今天学习记录的是关于Redis秒杀场景的内容。秒杀是一个非常典型的活动场景,比如,在双 11、618 等电商促销活动中,都会有秒杀场景。秒杀场景的业务特点是限时限量,业务系统要处理瞬时的大量高并发请求,而 Redis 就经常被用来支撑秒杀活动。不过,秒杀场景包含了多个环节:秒杀前秒杀中秒杀后每个阶段的请求处理需求并不相同,Redis 并不能支撑秒杀场景的每一个环节
转载
2023-10-18 09:32:02
47阅读
前言redis的lru是近似lru算法,其实就是每个key里面都有存,最后一次访问这个key的时间戳24位1.因为lru需要很多内存,额外的内存,所以用近似lru2.那么我们就可以用随机采样法淘汰元素,而且处理方式是懒惰删除。3.一旦发现内存超过阈值,maxmermory,那么就随机采样出五个key,淘汰最久的key,如果淘汰后还是超过,那么久继续淘汰直到内存低于maxmemory;这个5可设置~
转载
2024-04-09 14:23:07
49阅读
1.概述1.1 StringStrings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字.常用命令: set,get,decr,incr,mget 等。应用场景:String是最常用的一种数据类型,普通的key/ value 存储都可以归为此类.即可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受Redis的定时持久化,操作日志及 Re
转载
2023-08-15 13:42:18
25阅读
前言这篇文章介绍下如何实现redis来实现分布式锁及原理简介
这篇文章介绍下如何实现redis来实现分布式锁及原理简介原理简介redis 获取分布式锁使用lua脚本的命令setnxpexpire(提供了毫秒的过期时间,expire提供了基于秒的过期时间)lua脚本(保证脚本中的命令被一起执行 不间断)redis删除锁使用lua脚本的命令先执行get判断获取的值是否是自己设置的如果是的话 则执行d
转载
2023-09-02 19:35:41
147阅读
今天介绍个基于redis实现自增流水号的一个案例 为什么使用redis来实现自增流水号呢? 因为现在的项目很多都整合redis,而且redis是单线程,且基于内存操作,速度快,实现自增流水号代码也简单小编实现的方式是Vue+springBoot,但是Vue就是做个页面按钮为了测试,你们可以写个测试类来测试,现在放上后端代码,亲测有效!!!首先先引入依赖,在pom文件加<!--redis--&
转载
2023-05-25 11:09:04
87阅读
Redis通信协议使用的是RESP协议,协议具有容易实现、解析快、人类可读等特点,协议的每部分都是以\r\n结尾。redis客户端与服务器端通信也是通过socket网络编程,我们先来模拟一个redis服务器端拦截请求,使用socketServer开启一个6379端口,接收打印信息@SpringBootApplication
public class RedisdemoApplication {
转载
2023-08-20 16:58:52
47阅读