基于redis有序集合,实现简单的延时任务 延时任务的场景很多,开发过程中我们经常会遇到,比如说: 1.订单未付款,5分钟后自动取消,这是电商网站非常普遍的需求: 2.用户创建订单不付款,3分钟后自动发短信.微信消息提醒: 3.会员到期提醒 等等,这些都算延时任务提醒. 实现延时任务功能的方式很多,我们公司的业务不大,没打算用中间件,所以,我干脆直接用redis实现. redis实现延时任务有2种方式,一种是根据有序集合去实现,还有种是根据键的过期,去触发延时任务,两个方式都可以,今天我主要说的…
滑动窗口算法用于应对请求在时间周期中分布不均匀的情况,能够更精确的应对流量变化,比较著名的应用场景就是TCP协议的流量控制,不过今天要说的是服务限流场景中的应用. 算法原理 这里假设业务需要每秒钟限流100次,先来看固定窗口算法的两个问题: 漏检 如下图所示,单看第1秒和第2秒,其请求次数都没有超过100,所以使用固定窗口算法时不会触发限流.但是第1秒的后500ms的请求数加上第2秒的前500毫秒的请求数就超过了100,这时候可能会给系统带来伤害,使用固定窗口算法时不能检测到这种情况. 太刚 针…
限流是大家开发之路上一定会遇到的需求.比如:限制一定时间内,接口请求请求频率:一定时间内用户发言.评论次数等等,类似于滑动窗口算法.这里分享一份拿来即用的代码,一起看看如何利用常见的 Redis 实现一个实用并且原理简单的限流器. 限流核心原理以及代码 这个限流器的原理是使用 Redis 的incr命令来累计次数,key 的过期时间作为时间滑动窗口来实现.比如限制每5秒最多请求10次,那么就将 key 的过期时间设置为5秒,每次执行前对这个 key 自增,5秒内的次数将累计到这一个 key 上,…
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.redis正是通过分数来为集合中的成员进行从小到大的排序. 有序集合的成员是唯一的,但分数(score)却可以重复. 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1). 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员). 实例 redis 127.0.0.1:6379> ZADD w3ckey 1 r…
redis 有序集合(zset)函数 zAdd 命令/方法/函数 Adds the specified member with a given score to the sorted set stored at key. 增加一个或多个元素,如果该元素已经存在,更新它的socre值 虽然有序集合有序,但它也是集合,不能重复元素,添加重复元素只会 更新原有元素的score值 Parameters key score : double value: string Return value Long…
Redis有序集合类似Redis集合存储在设定值唯一性.不同的是,一个有序集合的每个成员带有分数,用于以便采取有序set命令,从最小的到最大的分数有关. Redis 有序set添加,删除和测试中的O(1)的存在成员(固定时间,无论里面包含的元素集合的数量).列表的最大长度为232- 1元素(4294967295,超过4十亿每个元素的集合). 例子 redis 127.0.0.1:6379> ZADD tutorials 1 redis (integer) 1 redis 127.0.0.1:63…
Redis 有序集合(sorted set) Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.redis正是通过分数来为集合中的成员进行从小到大的排序. 有序集合的成员是唯一的,但分数(score)却可以重复. 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1). 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员). 实例 redis 127.0.0.…
Redis 有序集合(sorted set) Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.redis正是通过分数来为集合中的成员进行从小到大的排序. 有序集合的成员是唯一的,但分数(score)却可以重复. 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1). 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员). 实例 redis 127.0.0.…
一.概述 redis有序集合和集合一样,也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数. redis正式通过分数来为集合中的重圆进行从小到大的排序. 有序集合的成员是唯一的,但分数(score)却可以重复. 集合中最大的成员数为2^32-1. 二.sortedset键的设置 命令名称:zadd 语法:zadd key [NX|XX] [CH] [INCR] score member [score member ...] 功能: 将一个或多…
跳表 定义 为一个值有序的链表建立多级索引,比如每2个节点提取一个节点到上一级,我们把抽出来的那一级叫做索引或索引层.如下图所示,其中down表示down指针,指向下一级节点.以此类推,对于节点数为n的链表,大约可以建立log2n-1级索引.像这种为链表建立多级索引的数据结构就称为跳表. 时间复杂度 插入,查询,删除均为O(logn) 平衡性 插入时使用随机函数确定插入位置来保持平衡以避免复杂度退化 通过一个随机函数,来决定将这个结点插入到哪几级索引中,比如随机函数生成了值 K,那我们就将这个结…