Redis
diweikang
心如止水
展开
-
Redis 和 Memcached 的区别
Redis 的作者 Salvatore Sanfilippo 曾经对这两种基于内存的数据存储系统进行过比较:Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET...原创 2016-07-12 10:11:21 · 511 阅读 · 0 评论 -
分布式锁的三种实现方式
一、为什么要使用分布式锁为了保证一个方法或属性在高并发情况下同一时间只能被同一个线程执行,在传统单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLock或Synchronized)进行互斥控制。但是,随着业务发展的需要,原单机部署的系统被演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的Jav...原创 2019-07-15 23:13:42 · 618 阅读 · 1 评论 -
Redis与数据库一致性问题分析
缓存已经在项目中被广泛使用,在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。所以参考了网上一些资料对这块进行讲解。先做一个说明,从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写...转载 2019-07-01 20:35:58 · 31281 阅读 · 7 评论 -
Redis主从同步(复制)
一、概述在现有企业中80%公司大部分使用的是redis单机服务,在实际的场景当中单一节点的redis容易面临风险。面临问题 机器故障。我们部署到一台 Redis 服务器,当发生机器故障时,需要迁移到另外一台服务器并且要保证数据是同步的。而数据是最重要的,如果你不在乎,基本上也就不会使用 Redis 了。 容量瓶颈。当我们有需求需要扩容 Redis 内存时,从 16G 的内存...转载 2019-06-03 18:14:08 · 1885 阅读 · 0 评论 -
Redis事务讲解
一、引言为了确保连续多个操作的原子性,一个成熟的数据库通常都会有事务支持,Redis 也不例外。Redis 的事务使用非常简单,不同于关系数据库,我们无须理解那么多复杂的事务模型,就可以直接使用。不过也正是因为这种简单性,它的事务模型很不严格,这要求我们不能像使用关系数据库的事务一样来使用 Redis。一个事务从开始到执行会经历以下三个阶段:开始事务。 命令入队。 执行事务。在M...转载 2019-06-01 23:55:30 · 205 阅读 · 0 评论 -
Redis Pipeline讲解
一、pipeline出现的背景Redis是一种基于客户端-服务端(CS)模型以及请求/响应协议的TCP服务,这意味着通常情况下一个请求会遵循以下步骤:客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。 服务端处理命令,并将结果返回给客户端。这样一次命令消耗的时间就包括四个部分:请求从客户端到服务器的时间、命令排队的时间和命令真正执行时间、结果从服...原创 2019-05-29 19:24:36 · 2720 阅读 · 1 评论 -
Redis持久化
Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能、持久存储、适应高并发应用场景等优势。它虽然起步较晚,但发展却十分迅速。由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB...原创 2019-05-23 23:41:18 · 136 阅读 · 0 评论 -
高性能IO模型浅析
最近在学习Redis,了解到Redis是单线程的,但是运用了I/O 多路复用技术,可以并发响应多个客户端请求。下面来了解一下常见的IO模型。服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(BlockingIO):即传统的IO模型。 (2)同步非阻塞IO(Non-blockingIO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设...转载 2019-05-16 23:39:47 · 331 阅读 · 0 评论 -
Redis线程安全问题
Redis是线程安全的吗?Redis是个单线程程序,所以它是线程安全的。Redis单线程为什么还能这么快?Redis是基于内存的,内存的读写速度非常快; Redis是单线程的,避免了不必要的上下文切换和竞争条件; Redis使用多路复用技术,可以处理并发的连接。非阻塞I/O内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转...转载 2019-05-16 17:29:26 · 20091 阅读 · 5 评论 -
Redis I/O 多路复用
引出IO多路复用为什么 Redis 中要使用 I/O 多路复用这种技术呢?首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而 I/O 多路复用就是为了解决这个问题而出现的。要弄清问题先要知道问题的出...转载 2019-05-19 19:18:01 · 29152 阅读 · 0 评论 -
Linux(CentOS)下安装Redis(redis-4.0.1)
1、下载Redis下载最新Linux版本的Redis,我用的是redis-4.0.1.tar.gz。百度云盘链接:https://pan.baidu.com/s/1bo5UOUV 密码:iofs2、编译redis是通过源码安装的,所以我们需要先安装gcc编译器,同时安装redis所依赖的tcl包yum install gcc tcl正在下载安装包安装完成3、...原创 2017-12-12 18:27:29 · 15534 阅读 · 2 评论 -
了解Redis缓存穿透、雪崩和击穿
缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一...转载 2019-07-11 21:38:46 · 229 阅读 · 0 评论