
Redis
Jackyzhe
公众号:代码洁癖患者
展开
-
走近源码:Redis如何清除过期key
“叮……”,美好的周六就这么被一阵钉钉消息吵醒了。业务组的同学告诉我说很多用户的帐号今天被强制下线。我们的帐号系统正常的逻辑是用户登录一次后,token的有效期可以维持一天的时间。现在的问题是用户大概每10分钟左右就需要重新登录一次。这种情况一般有两种原因:1、token生成时出问题。2、验证token时出现问题。通过检查日志,我发现是验证token时,Redis中已经没有对应的token了。...原创 2020-04-01 22:51:18 · 1338 阅读 · 0 评论 -
antirez:Redis6真的来了
12月20号,Redis发布了Redis6-rc1版本,作者antirez也在自己的博客中宣布了这一消息,并对Redis6版本做了一些介绍,以下是译文。翻译 2019-12-24 22:51:12 · 947 阅读 · 0 评论 -
走近源码:神奇的HyperLogLog
HyperLogLog是Redis的高级数据结构,是统计基数的利器。前文我们已经介绍过HyperLogLog的基本用法,如果只求会用,只需要掌握HyperLogLog的三个命令即可,如果想要更进一步了解HyperLogLog的原理以及源码实现,相信这篇文章会给你带来一些启发。基数在数学上,基数或势,即集合中包含的元素的“个数”(参见势的比较),是日常交流中基数的概念在数学上的精确化(并使之不...原创 2019-03-06 23:10:08 · 883 阅读 · 0 评论 -
【译】Redis喜提新数据结构:Redis Streams
本文是Redis作者antirez的一篇博客原文地址:http://antirez.com/news/128翻译 2019-03-29 21:14:26 · 393 阅读 · 0 评论 -
走近源码:压缩列表是怎样炼成的
经过前面对Redis源码的了解,令人印象深刻的也许就是Redis各种节约内存手段。而Redis对于内存的节约可以说是费尽心思,今天我就再来介绍一种Redis为了节约内存而创造的存储结构——压缩列表(ziplist)。原创 2019-03-27 21:21:06 · 361 阅读 · 0 评论 -
走近源码:Redis跳跃列表究竟怎么跳
看完不信你还不懂skiplist原创 2019-04-18 22:07:27 · 235 阅读 · 0 评论 -
速度不够,管道来凑——Redis管道技术
Redis客户端与服务器之间使用TCP协议进行通信,并且很早就支持管道(pipelining)技术了。在某些高并发的场景下,网络开销成了Redis速度的瓶颈,所以需要使用管道技术来实现突破。原创 2019-04-30 23:22:23 · 290 阅读 · 0 评论 -
Redis Lua脚本小学教程
Redis提供了丰富的指令集,但是仍然不能满足所有场景,在一些特定场景下,需要自定义一些指定来完成某些功能。因此,Redis提供了Lua脚本支持,用户可以自己编写脚本来实现想要的功能。原创 2019-05-18 14:14:02 · 303 阅读 · 0 评论 -
Redis Lua脚本中学教程(下)
Lua速成手册原创 2019-06-20 21:40:40 · 341 阅读 · 0 评论 -
Redis Lua脚本中学教程(上)
Redis Lua相关命令原创 2019-06-17 22:03:38 · 509 阅读 · 0 评论 -
Redis Lua脚本大学教程
Redis Lua课程结业原创 2019-06-24 21:35:43 · 549 阅读 · 0 评论 -
【译】antirez:Redis6将支持客户端缓存
本文翻译自Redis作者antirez的一篇博客,原文地址是:http://antirez.com/news/130纽约Redis日已经结束了,我仍然与意大利时区同步,早上5点30起床,并立即走上了曼哈顿的街道,我很喜欢这里的风景,并且享受着成为这里的一部分。当时我正在考虑发布Redis 6的release版本,这是在未来一段时间最重要的事了。新版本的Redis协议(RESP3)推进得还很慢,如...翻译 2019-09-12 23:21:33 · 623 阅读 · 0 评论 -
Redis命令详解:HyperLogLog
HyperLogLog是Redis的高级数据结构,它在做基数统计的时候非常有用,每个HyperLogLog的键可以计算接近264不同元素的基数,而大小只需要12KB。HyperLogLog目前只支持3个命令,PFADD、PFCOUNT、PFMERGE。我们先来逐一介绍一下。PFADD最早可用版本:2.8.9时间复杂度:O(1)将参数中的元素都加入指定的HyperLogLog数据结构中,这...原创 2019-03-05 23:20:54 · 351 阅读 · 0 评论 -
Redis命令详解:Sorted Sets
Sorted Set(也称ZSET)和Set一样也是string类型的集合,你可以将它理解为Java中SortedSet和HashMap的集合体,一方面它是一个set,保证了元素的唯一性,另一方面它给每个value赋予了一个权重score,用来进行排序。集合中成员的最大个数为232-1个。BZPOPMAX最早可用版本:5.0.0时间复杂度:O(log(N)),N是元素个数用法:BZPOPM...原创 2019-01-22 23:45:44 · 463 阅读 · 0 评论 -
Redis命令详解:Connection
最近在学习Redis的相关知识,上一篇我们也介绍了Redis的安装方法和基本数据结构,后面就打算开一个新的系列文章:Redis命令详解。既是对基础的巩固,也是为了以后查询起来更方便。整个系列会分为以下几个部分:ConnectionKeysStringsHashsListsSetsSorted SetsHyperLogLogTransactionsServerStreams...原创 2018-09-21 00:00:43 · 3197 阅读 · 0 评论 -
Redis命令详解:Keys
介绍完Redis连接相关命令后,再来介绍一下与Key相关的命令,Redis作为一个key-value数据库,对Key进行操作是无法避免的。DEL最早可用版本1.0.0删除指定的键值对,如果指定的key不存在,则忽略。DEL命令的时间复杂度是O(N),对于除字符串外的其他数据类型,命令的时间复杂度为O(M),M是值的元素的个数。所以,在生产环境尽量避免一次性删除过多复杂数据类型的操作。127...原创 2018-10-06 15:51:40 · 749 阅读 · 0 评论 -
深入理解Redis的scan命令
熟悉Redis的人都知道,它是单线程的。因此在使用一些时间复杂度为O(N)的命令时要非常谨慎。可能一不小心就会阻塞进程,导致Redis出现卡顿。有时,我们需要针对符合条件的一部分命令进行操作,比如删除以test_开头的key。那么怎么获取到这些key呢?在Redis2.8版本之前,我们可以使用keys命令按照正则匹配得到我们需要的key。但是这个命令有两个缺点:没有limit,我们只能一次性...原创 2018-10-09 23:20:17 · 2087 阅读 · 1 评论 -
玩转Redis集群之Sentinel
Redis作为内存数据库,需要具备高可用的特点,不然如果服务器宕机,还在内存里的数据就会丢失。我们最常用的高可用方法就是搭建集群,master机器挂了,可以让slave机器顶上,继续提供服务。但是Redis集群是不会自动进行主从切换的,也就是说,如果主节点非常不争气的在凌晨3点挂了,那么运维同学就要马上起床,把从节点改成主节点,这样的操作是非常繁琐低效的。为此,Redis官方提供了一种解决方案:R...原创 2018-11-07 23:29:58 · 284 阅读 · 0 评论 -
Redis命令详解:Strings
String类型是Redis中比较常用的类型,因此,和String相关的命令也比较多APPEND最早可用版本2.0.0当指定的key存在,并且value是字符串时,APPEND命令会在字符串末尾追加指定的字符串,如果指定的key不存在,则会创建一个空的字符串,并且追加上指定的value,效果类似于SET命令。该命令的返回值是执行后字符串的长度。127.0.0.1:6379> EXI...原创 2018-11-20 22:38:31 · 211 阅读 · 0 评论 -
玩转Redis集群之Codis
近几年,随着互联网的飞速发展,作为程序员,我们需要处理的数据规模也在不断扩大。如果你使用Redis作为数据库时,面临大数据高并发的场景时,单个Redis实例就会显得力不从心。这时Redis的集群方案应运而生,他将众多Redis实例综合起来,共同应对大数据高并发的场景。Codis是Redis集群方案的一种。它是由豌豆荚的中间件团队开发的,所以,它有一套详细的中文版README,方便大家学习。它...原创 2018-11-23 23:06:48 · 472 阅读 · 0 评论 -
Redis命令详解:Hashs
Hash是一种String类型的field、value的映射表,因此,它非常适合存储对象。下面我们来一一介绍与Hash相关的命令。HDEL最早可用版本:2.0.0时间复杂度:O(N),其中N为要删除的field的个数HDEL命令用于删除指定key的指定的一个或多个field。如果指定的field不存在于指定的key中则会被忽略,如果指定的key不存在,会当做空的hash进行处理,向客户端返...原创 2018-11-26 23:33:39 · 287 阅读 · 0 评论 -
玩转Redis集群之Cluster
前面我们介绍了国人自己开发的Redis集群方案——Codis,Codis友好的管理界面以及强大的自动平衡槽位的功能深受广大开发者的喜爱。今天我们一起来聊一聊Redis作者自己提供的集群方案——Cluster。希望读完这篇文章,你能够充分了解Codis和Cluster各自的优缺点,面对不同的应用场景可以从容的做出选择。Redis Cluster是去中心化的,这点与Codis有着本质的不同,Redi...原创 2018-12-20 23:17:36 · 439 阅读 · 0 评论 -
Redis命令详解:Lists
List是Redis的基础数据类型之一,类似于Java中的LinkedList。一个列表最多包含232个元素,常被用作模拟队列操作,接下来我们具体介绍一下List相关的命令。BLPOP最早可用版本:2.0.0时间复杂度:O(1)用法:BLPOP key [key ...] timeoutBLPOP是LPOP的阻塞版本,当列表没有元素可以被弹出时,连接将被阻塞。当给定多个key,会按参...原创 2018-12-11 23:10:09 · 328 阅读 · 0 评论 -
走近源码:Redis的启动过程
当我们对不断加深对某一项技术的了解时,一定会在一个特定的时间对它的实现方式产生兴趣。没错,这就是我现在的状态,所以,多年没有读/写C语言的我,决定要啃一下Redis的源码。Redis大体上可以分为两部分:服务器和客户端(读者吐槽:你这分的也太大体了吧)。在使用时,我们先启动服务器,然后再启动客户端。由客户端向服务器发送命令,服务器处理后将结果返回给客户端。我们从“头”开始,一起来了解一下Redi...原创 2019-01-07 22:21:38 · 379 阅读 · 0 评论 -
走近源码:Redis如何执行命令
前文我们了解了Redis的启动过程。在initServer()函数中创建了一些循环事件来监听TCP端口和Unix的Sockets,从而使Redis服务器可以接收新的连接。今天我们再一起来看一下Redis究竟是如何处理命令并返回结果的。处理新连接Redis在initServer()函数中创建循环事件调用了acceptTcpHandler和acceptUnixHandler函数(都在network...原创 2019-01-15 21:39:56 · 2277 阅读 · 0 评论 -
走近源码:Redis命令执行过程(客户端)
前面我们了解过了当Redis执行一个命令时,服务端做了哪些事情,不了解的同学可以看一下这篇文章走近源码:Redis如何执行命令。今天就一起来看看Redis的命令执行过程中客户端都做了什么事情。启动客户端首先看redis-cli.c文件的main函数,也就是我们输入redis-cli命令时所要执行的函数。main函数主要是给config变量的各个属性设置默认值。比如:hostip:要连接的服...原创 2019-01-21 21:57:18 · 794 阅读 · 0 评论 -
Redis基础数据结构
Redis是一款完全免费的,高性能的key-value数据库,目前被大多数公司用来做缓存。Redis作为一个内存数据库,它的读写速度非常快:读速度可以达到110000次/s,写的速度是81000次/s 。相比于其他key-value数据库,Redis的另一大特性就是支持多种数据类型。今天我们来一起聊一聊Redis的5种基础数据类型。安装Redis在学习之前,我们要先自己安装一个Redis环境用...原创 2018-09-19 22:54:24 · 232 阅读 · 0 评论