redis
collective_lz
技术人员的目标不是拥有多么厉害的技术,而是用技术去促成一个产品的成功
展开
-
Redis分布式锁的正确实现方式(Java版)
本博客使用第三方开源组件Jedis实现Redis客户端,且只考虑Redis服务端单机部署的场景。前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客转载 2017-12-18 23:01:43 · 266 阅读 · 0 评论 -
redis配置文件讲解
# 守护进程模式# 默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes# 当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面daemonize yes# 当redis作为守护进程运行的时候,它会把 pid 默认写到 /var/run/redis.pid 文件里面,但是你转载 2017-12-13 21:06:53 · 368 阅读 · 0 评论 -
redis的事务和watch
redis的事务严格意义来讲,redis的事务和我们理解的传统数据库(如mysql)的事务是不一样的。 redis中的事务定义Redis中的事务(transaction)是一组命令的集合。 事务同命令一样都是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次执行这些命令。 Redis保证一转载 2017-11-24 09:00:30 · 645 阅读 · 0 评论 -
redis Lua脚本(二)
原创 2017-12-19 22:48:52 · 363 阅读 · 0 评论 -
redis Lua脚本(一)
Redis从2.6版本开始引入对Lua脚本的支持,通过在服务器中嵌入Lua环境,Redis客户端可以使用Lua脚本,直接在服务端原子的执行多个Redis命令。其中,使用EVAL命令可以直接对输入的脚本进行求值:redis>EVAL "return 'hello world'" 0"hello world"而使用EVALSHA命令则可以根据脚本的SHA1校验和来对脚本进行求值,但这个命原创 2017-12-19 20:52:04 · 5620 阅读 · 1 评论 -
redis设计与实现(13)客户端
redis服务器是典型的一对多服务器程序,一个服务器与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。通过使用由I/O多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式来处理命令请求,并与多个客户端进行网络通信。对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的redis.h原创 2017-11-15 21:21:16 · 283 阅读 · 0 评论 -
reids(9)数据库
数据库服务器中的数据库redisClient切换数据库redis客户端默认目标数据库为0号数据库,可以通过SELECT命令来切换目标数据库。客户端状态redisClient结构的db属性记录了客户端当前的目标数据库,这个属性是指向redisdb结构的指针。typedef struct redisClient{ //记录客户端当前正在使用的数据转载 2017-11-14 22:33:57 · 257 阅读 · 0 评论 -
redis设计与实现(七)压缩列表
压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使用压缩列表做列表键的底层实现。例如,执行以下命令将创建一个压缩列表实现的列表键:redis>RPUSH 1st 1 3 5 10086 "hello" "world"(integer)6redis>OBJECT EN转载 2017-11-14 21:08:47 · 276 阅读 · 0 评论 -
redis设计与实现(六)整数集合
整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就是使用整数集合作为集合键的底层实现。举个例子,如果我们创建一个只包含五个元素的集合键,并且集合中的所有元素都是整数,那么这个集合键的底层实现就会是整数集合:redis>SADD number 1 3 5 7 9(integer)5redis>OBJECT ENCOD转载 2017-11-05 19:00:43 · 236 阅读 · 0 评论 -
redis设计与实现(14)服务器
Redis服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理器来维持服务器自身的运转。命令请求的执行过程一个命令请求从发送到获得回复的过程中,客户端和服务器需要完成一系列操作。举个例子,如果我们使用客户端执行以下命令:redis>SET KEY VALUEOK那么客户端发送SET KEY VALUE命令到获得回原创 2017-11-17 21:06:45 · 311 阅读 · 0 评论 -
redis(五)跳跃表
一:基本概念 跳跃表是一种随机化的数据结构,在查找、插入和删除这些字典操作上,其效率可比拟于平衡二叉树(如红黑树),大多数操作只需要O(log n)平均时间,但它的代码以及原理更简单。跳跃表的定义如下: “Skip lists are data structures that use probabilistic balancing rather th转载 2017-10-31 22:23:20 · 17455 阅读 · 10 评论 -
redis设计与实现(四)字典
哈希表的扩展与收缩当以下条件中的任意一个被满足时,程序会自动开始对哈希表执行扩展操作:1)服务器目前没有在执行BGSAVE命令或者BGREWRITEAOF命令,并且哈希表的负载因子大于等于1.2)服务器目前正在执行BGSAVE命令或者BGREWRITEAOF命令,并且哈希表的负载因子大于等于5.其中哈惜败哦的负载因子可以通过公司:load_factor = ht[0].转载 2017-10-31 20:26:26 · 376 阅读 · 0 评论 -
redis设计与实现(三)字典
字典,又称为符号表(symbol table)、关联数组(associative array)或映射(map),是一种用于保存键值对(key-value)的抽象数据结构。在字典中,一个键(kley)转载 2017-10-29 23:29:23 · 1056 阅读 · 0 评论 -
redis设计与实现(二)链表
链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度,关于redis的链表此处不做过多介绍,将其结构理解成java中的LinkedList即可(两者数据结构一模一样)。原创 2017-10-29 23:14:18 · 404 阅读 · 1 评论 -
redis设计与实现(一)简单动态字符串
Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。例如:SET msg "hello world"是保存了msg和hello world的SDS。SDS的定义每个sds.h/sdshdr结构表示一个S转载 2017-10-27 22:17:45 · 340 阅读 · 0 评论