ISPT启航
  • 文章
  • 问答
  • 登录
邮箱登录
邮箱

密码
邮箱注册
邮箱

昵称

密码

确认
全部文章其他工具开源设计模式后端前端公告
Redis - GeoHash

Redis在3.2版本以后增加了地理位置GEO模块,意味着我们可以使用Redis来实现摩拜单车「附近的Mobike」、美团和饿了么「附近的餐馆」这样的功能了。 用数据库来算附近的人 地图元素的位置数据使用二维的经纬度表示,经度范围(-180,180],纬度范围(-90,90],纬度正负以赤道为界,北正南负,经度正负以本初子午线(英国格林尼治天文台)为界,东正西负。比如掘金办公室在望京SOHO,它的经纬度坐标是(116.48105,39.996794),都是正数,因为中国位于东北半球。 当两个元素的距离不是很远时,可以直接使用勾股定理就能算得元素之间的距离。我们平时使用的「附近的人」的功能...

  无为   2023年07月09日   664   0   0 redis
Redis - 漏斗限流

漏斗限流是最常用的限流方法之一,顾名思义,这个算法的灵感源于漏斗(funnel)的结构。 漏斗的容量是有限的,如果将漏嘴堵住,然后一直往里面灌水,它就会变满,直至再也装不进去。如果将漏嘴放开,水就会往下流,流走一部分之后,就又可以继续往里面灌水。如果漏嘴流水的速率大于灌水的速率,那么漏斗永远都装不满。如果漏嘴流水速率小于灌水的速率,那么一旦漏斗满了,灌水就需要暂停并等待漏斗腾空。 所以,漏斗的剩余空间就代表着当前行为可以持续进行的数量,漏嘴的流水速率代表着系统允许该行为的最大频率。下面我们使用代码来描述单机漏斗算法。 py coding:utf8 importtime classFu...

  无为   2023年07月09日   651   0   0 redis
Redis-实现简单限流

限流算法在分布式领域是一个经常被提起的话题,当系统的处理能力有限时,如何阻止计划外的请求继续对系统施压,这是一个需要重视的问题。 除了控制流量,限流还有一个应用目的是用于控制用户行为,避免垃圾请求。比如在UGC社区,用户的发帖、回复、点赞等行为都要严格受控,一般要严格限定某行为在规定时间内允许的次数,超过了次数那就是非法行为。对非法行为,业务必须规定适当的惩处策略。 如何使用Redis来实现简单限流策略? 首先我们来看一个常见的简单的限流策略。系统要限定用户的某个行为在指定的时间里只能允许发生N次,如何使用Redis的数据结构来实现这个限流的功能? 指定用户user_id的某个行为a...

  无为   2023年07月09日   638   0   0 redis
Redis-布隆过滤器

布隆过滤器是什么? 布隆过滤器可以理解为一个不怎么精确的set结构,当你使用它的contains方法判断某个对象是否存在时,它可能会误判。但是布隆过滤器也不是特别不精确,只要参数设置的合理,它的精确度可以控制的相对足够精确,只会有小小的误判概率。 当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存在。打个比方,当它说不认识你时,肯定就不认识;当它说见过你时,可能根本就没见过面,不过因为你的脸跟它认识的人中某脸比较相似(某些熟脸的系数组合),所以误判以前见过你。 套在上面的使用场景中,布隆过滤器能准确过滤掉那些已经看过的内容,那些没有看过的新内容,它也会过滤掉极小一...

  无为   2023年07月09日   647   0   0 redis
Redis - HyperLogLog

我们常见的业务问题:如果你负责开发维护一个大型的网站,有一天老板找产品经理要网站每个网页每天的UV数据,然后让你来开发这个统计模块,你会如何实现? 如果统计PV那非常好办,给每个网页一个独立的Redis计数器就可以了,这个计数器的key后缀加上当天的日期。这样来一个请求,incrby一次,最终就可以统计出所有的PV数据。 但是UV不一样,它要去重,同一个用户一天之内的多次访问请求只能计数一次。这就要求每一个网页请求都需要带上用户的ID,无论是登陆用户还是未登陆用户都需要一个唯一ID来标识。 你也许已经想到了一个简单的方案,那就是为每一个页面一个独立的set集合来存储所有当天访问过此页面的...

  无为   2023年06月30日   647   0   0 redis
Redis - 位图

在我们平时开发过程中,会有一些bool型数据需要存取,比如用户一年的签到记录,签了是1,没签是0,要记录365天。如果使用普通的key/value,每个用户要记录365个,当用户上亿的时候,需要的存储空间是惊人的。 为了解决这个问题,Redis提供了位图数据结构,这样每天的签到记录只占据一个位,365天就是365个位,46个字节(一个稍长一点的字符串)就可以完全容纳下,这就大大节约了存储空间。 位图不是特殊的数据结构,它的内容其实就是普通的字符串,也就是byte数组。我们可以使用普通的get/set直接获取和设置整个位图的内容,也可以使用位图操作getbit/setbit等将byte数组看...

  无为   2023年06月30日   689   0   0 redis
redis消息队列-延时队列

Redis的消息队列不是专业的消息队列,它没有非常多的高级特性,没有ack保证,如果对消息的可靠性有着极致的追求,那么它就不适合使用。 异步消息队列 -- Redis的list(列表)数据结构常用来作为异步消息队列使用,使用rpush/lpush操作入队列,使用lpop和rpop来出队列。 rpushnotify-queueapplebananapear (integer)3 llennotify-queue (integer)3 lpopnotify-queue "apple" llennotify-queue (integer)2 lpopnotify-queue "banana"...

  无为   2023年06月27日   285   0   0 redisjava
redis 分布式锁

redis分布式锁 分布式应用进行逻辑处理时经常会遇到并发问题。 比如一个操作要修改用户的状态,修改状态需要先读出用户的状态,在内存里进行修改,改完了再存回去。如果这样的操作同时进行了,就会出现并发问题,因为读取和保存状态这两个操作不是原子的。(Wiki解释:所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何contextswitch线程切换。) 这个时候就要使用到分布式锁来限制程序的并发执行。Redis分布式锁使用非常广泛,它是面试的重要考点之一,很多同学都知道这个知识,也大致知道分布式锁的原理,但是具体到细节的使用上往往并不完全正确。 ...

  无为   2023年06月26日   298   0   0 数据库redis
Redis 安装方式

体验Redis需要使⽤Linux或者Mac环境,如果是Windows可以 考虑使⽤虚拟机。主要⽅式有四种: 1.使⽤Docker安装。 2.通过Github源码编译。 3.直接安装apt-getinstall(Ubuntu)、yuminstall(RedHat)或者brewinstall(Mac)。 4.如果读者懒于安装操作,也可以使⽤⽹⻚版的WebRedis([https://try.redis.io/](https://try.redis.io/))直接体验。 具体操作如下: Docker⽅式 docker 拉取redis镜像 dockerpullredis 运⾏redis容器 dock...

  无为   2023年06月25日   282   1   0 redis
Java8新特性-Optional 类

到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到GoogleGuava的启发,Optional类已经成为Java8类库的一部分。 Optional<T类(java.util.Optional)是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用null表示一个值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常。 Optional类的J...

  无为   2023年06月14日   274   0   0 java-eejarjava
Java8新特性-Stream API

StreamAPI说明 Java8中有两大最为重要的改变。第一个是Lambda表达式;另外一个则是StreamAPI。 StreamAPI(java.util.stream)把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充,因为StreamAPI可以极大提供Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。 Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用StreamAPI对集合数据进行操作,就类似于使用SQL执行的数据库查询。也可以使用StreamAPI来并行执行操...

  无为   2023年06月12日   425   3   1 java-eejava
Java8新特性-方法引用与构造器引用

方法引用(MethodReferences) 当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用! 方法引用可以看做是Lambda表达式深层次的表达。换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖。 要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致! 格式:使用操作符“::”将类(或对象)与方法名分隔开来。 如下三种主要使用情况: 1. 对象::实例方法名 2. 类::静态方法名 3. 类::实例方法名 例如: Consumer...

  无为   2023年06月09日   290   0   0 java-eejarjava
Java8新特性-函数式接口

什么是函数式(Functional)接口 只包含一个抽象方法的接口,称为函数式接口。 你可以通过Lambda表达式来创建该接口的对象。(若Lambda表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。 我们可以在一个接口上使用@FunctionalInterface注解,这样做可以检查它是否是一个函数式接口。同时javadoc也会包含一条声明,说明这个接口是一个函数式接口。 在java.util.function包下定义了Java8的丰富的函数式接口 ...

  无为   2023年06月08日   293   0   0 java-eejava
Java8新特性-Lambda 表达式

Java8新特性简介 速度更快 代码更少(增加了新的语法:Lambda表达式) 强大的StreamAPI 便于并行 最大化减少空指针异常:Optional Nashorn引擎,允许在JVM上运行JS应用 为什么使用Lambda表达式 Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升 从匿名类到Lambda的转换举例1 ![image...

  无为   2023年06月06日   291   2   0 java-eejava
mysql常用时间函数

1,NOW():返回当前日期和时间 SELECTNOW(); //这将返回当前日期和时间的值,例如:2023-03-1115:32:45。 2,DATE():从日期时间值中提取日期部分: SELECTDATE('2023-03-1115:32:45'); //这将返回日期部分的值,即:2023-03-11。 3,TIME():从日期时间值中提取时间部分: SELECTTIME('2023-03-1115:32:45'); //这将返回时间部分的值,即:15:32:45。 4,YEAR():从日期时间值中提取年份部分: SELECTYEAR('2023-03-1115:32:45'...

  无为   2023年06月06日   272   0   0 mysqlsql
mysql客户端错误代码大全

客户端错误信息来自下述源文件: 圆括号中的错误值和符号与include/errmsg.hMySQL源文件中的定义对应。 消息值与libmysql/errmsg.c文件中列出的错误消息对应。%d和%s分别代表数值和字符串,显示时,它们将被消息值取代。 由于更新很频繁,这些文件中可能包含这里未列出的额外错误消息。 错误:2000(CR_UNKNOWN_ERROR) 消息:未知MySQL错误。 错误:2001(CR_SOCKET_CREATE_ERROR) 消息:不能创建UNIX套接字(%d) 错误:2002(CR_CONNECTION_ERROR) 消息:不能通过套接字'%s'(...

  管理员-0   2023年05月31日   303   0   0 mysql
mysql服务端错误代码大全

服务器错误代码和消息 服务器错误信息来自下述源文件: 错误消息信息列在share/errmsg.txt文件中。“%d”和“%s”分别代表编号和字符串,显示时,它们将被消息值取代。 错误值列在share/errmsg.txt文件中,用于生成include/mysqld_error.h和include/mysqld_ername.hMySQL源文件中的定义。 SQLSTATE值列在share/errmsg.txt文件中,用于生成include/sql_state.hMySQL源文件中的定义。 由于更新很频繁,这些文件中可能包含这里未列出的额外错误消息。 错误:1000SQLSTATE:H...

  管理员-0   2023年05月31日   292   0   0 mysql
  • «
  • 1
  • »
写文章 提问题
常见问题 更多
不使用border画出1px线,在不同浏览器的标准模式与怪异模式都能保持一致效果

2023-06-15

Truncated incorrect DECIMAL value: ''

2023-07-14

如何在页面上实现一个圆形的可点击区域?

2023-06-15

HTML5的form如何关闭自动完成功能?

2023-06-14

webSocket如何兼容低浏览器?

2023-06-14

cookies,sessionStorage和localStorage的区别?

2023-06-14

java.io.IOException: Broken pipe

2023-07-07

Error: cloud.callFunction:fail -404012

2023-09-01

联系我 - 作者微信
常用标签
javajavascriptnode.jshtmlhtml5csscss3jsonajax正则表达式angular.jsvue.jsreact.js小程序微信小程序微信开发者工具mysql数据库sqlredisgitdockercijava-eejarspringtomcat搜索引擎中文分词全文检索luceneelasticsearch微信微信开放平台linuxubuntuwindows-servercentos读书nettyspring bootddosjvm其他rabbitmq
  • 鄂ICP备2023008505号-1 © 2025-2024 ISPT