一、 spring-data-redis序列化策略 spring-data-redis提供了多种serializer策略,这对使用jedis的开发者而言,实在是非常便捷。sdr提供了4种内置的serializer: JdkSerializationRedisSerializer:使用JDK的序列化手段(serializable接口,ObjectInputStrean,ObjectOutputStream),数据以字节流存储,jdk序列化和反序列化数据 StringRedisSerializer:字符串编码,数据以s…

2021年10月26日 0条评论 3点热度 阅读全文

一、Redis 事务的实现原理 一个事务从开始到结束通常会经历以下三个阶段: 1、事务开始 客户端发送 MULTI 命令,服务器执行 MULTI 命令逻辑。 服务器会在客户端状态(redisClient)的 flags 属性打开 REDIS_MULTI 标识,将客户端从非事务状态切换到事务状态。 void multiCommand(redisClient *c) { // 不能在事务中嵌套事务 if (c->flags & REDIS_MULTI) { addReplyError(c,"MULTI c…

2021年10月7日 0条评论 12点热度 阅读全文

前言 上一篇已经介绍了优雅的操作Redis: 【小家Spring】Spring Boot中使用RedisTemplate优雅的操作Redis,并且解决RedisTemplate泛型注入的问题。本篇着重介绍一 下几种常用的序列化方式 最近在做一个项目,由于并发量大,大量使用到了RedisTemplate来操作Redis。但使用过程中,遇到了不少的坑,各种翻看源码 来跟踪,也总结出了不少的经验。 因此今天专门做一篇专文来记录这些坑,也具体说说RedisTemplate的各种序列化方式的差异性。希望对大家也能有所帮助,帮…

2021年9月26日 0条评论 7点热度 阅读全文

文章目录 一、有序集合介绍 二、常用命令介绍 三、有序集合数据结构 为什么有序集合需要同时使用跳跃表和字典来实现? 采用哪种编码由什么决定? 压缩列表 压缩列表节点的构成 跳跃表 一、有序集合介绍 有序集合,顾名思义,元素有序且唯一的集合,满足有序性、唯一性、确定性,sorted set、zset都是指的有序集合。 二、常用命令介绍 有序集合共有25个相关命令,这里只介绍常用的命令,其他的可以去官方文档查看。 添加元素 ZADD key [NX|XX] [CH] [INCR]score member [score …

2021年9月15日 0条评论 15点热度 阅读全文

首先,我们一起来看看这个问题的背景? 前段时间有个朋友在外面面试,然后有一天找我聊说:有一个国内不错的电商公司,面试官给他出了一个场景题: 假如下单时,用分布式锁来防止库存超卖,但是是每秒上千订单的高并发场景,如何对分布式锁进行高并发优化来应对这个场景? 他说他当时没答上来,因为没做过没什么思路。其实我当时听到这个面试题心里也觉得有点意思,因为如果是我来面试候选人的话,应该会给的范围更大一些 比如,让面试的同学聊一聊电商高并发秒杀场景下的库存超卖解决方案,各种方案的优缺点以及实践,进而聊到分布式锁这个话题。 因为库…

2021年8月20日 0条评论 7点热度 阅读全文

一、为什么需要分布式锁 加入你是一个人买东西的服务,你那你时刻要考虑的是物品会不会买超用户的钱扣除的有没有问题,在单机器部署的情况下你可能只需要加Synchronize就能实现临界区的安全访问,但是现在服务都是集群部署所以这种方式就不适用,我们需要一种方式来锁住所有的实例来实现在不同机器之间的临界区安全访问,分布式锁就是来干这个的。 二、上分布式 1、上 Redis里面有两个命令SETNX,EXPIRE SETNX: 当key不存在的时候把这个键值对set进去返回成功,如果命令执行之前key就已经存在了那就返回失败…

2021年7月18日 0条评论 17点热度 阅读全文

全局唯一的id生成的技术方案有很多,业界比较有名的是UUID、redis、Twitter的snowflake算法、美团Leaf算法。   我们重点来讲解redis生成id算法。 全局唯一id必须具备什么特点?1. 全局唯一性:不能出现重复的ID,最基本的要求。2. 单调递增:保证下一个ID一定大于上一个ID。3. 趋势递增:在一段时间内,生成的ID是递增的趋势。如:在一段时间内生成的ID在【0,1000】之间,过段时间生成的ID在【1000,2000】之间。    但在【0-1000】…

2021年6月2日 0条评论 26点热度 阅读全文

背景 如果面试中被问到电商系统怎么避免商品超卖,大家很容易就会回答用redis实现分布式锁,来避免这个问题,但是引用了分布式锁保证了数据的准确性,但却是牺牲了部分的并发性能,那么有没有优化的方案,可以优化redis分布式锁呢? reids分布式锁 上面这个是 使用redis分布式锁的基本逻辑,在一个请求获取锁之后,后面一个请求需要等前一个 请求释放掉锁之后才能获取锁,会基于分布式锁的串性化处理。 优化 JDK7中ConcurrentHashMap时基于分段锁实现并发线程安全的,所以可以参考这个思路进行优化,例如总库…

2021年5月24日 0条评论 29点热度 阅读全文

简介 Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以收到该消息(频道没有”创建“的概念,可以直接订阅、亦可直接发布消息)。 命令 发布消息 PUBLISH 自2.0.0可用。 **时间复杂度:**O(N+M),其中 N 是频道 channel 的订阅者数量,而 M 则是使用模式订阅(subscribed patterns)的客户端的数量。 语法:PUBLISH channel messa…

2021年5月22日 0条评论 4点热度 阅读全文

目录   Redis对于key通用操作命令 Redis字符串类型的操作 link 链表结构 集合 set 相关命令 order set 有序集合 Hash 哈希数据类型相关命令 Redis对于key通用操作命令 del key1 key2 ... Keyn 作用: 删除1个或多个键 返回值: 不存在的key忽略掉,返回真正删除的key的数量   rename key newkey 作用: 给key赋一个新的key名 注:如果newkey已存在,则newkey的原值被覆盖   renam…

2021年5月10日 0条评论 7点热度 阅读全文