事务
MULTI、EXEC、DISCARD和WATCH是Redis事务相关的命令。事务可以一次执行多个命令,并且带有以下两个重要的保证:
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要...…
Redis之所以执行速度很快,主要依赖于以下几个原因:
(一)纯内存操作,避免大量访问数据库,减少直接读取磁盘数据,redis将数据储存在内存里面,读写数据的时候都不会受到硬盘I/O速度的限制,所以速度快;
(二)单线程操作,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑...…
在集群下,经常会因为同时处理发生资源争抢和并发问题,但是我们都知道同步锁 synchronized、 cas、 ReentrankLock这些锁的作用范围都是 JVM,说白了在集群下没啥用。这时我们就需要能在多台 JVM之间决定执行顺序的锁了,现在分布式锁主要有&nbs...…
RedisSET命令用于设置给定key的值。如果key已经存储其他值,SET就覆写旧值,且无视类型。
redisSET命令基本语法如下:
redis127.0.0.1:6379>SETKEY_NAMEVALUE
返回值:
在Redis2.6.12以前版本,SET命令总是返回OK。
从Redis2.6.12版...…
前言
还在用keys命令模糊匹配删除数据吗?这就是一颗随时爆炸的炸弹!
Redis中没有批量删除特定前缀key的指令,但我们往往需要根据前缀来删除,那么究竟该怎么做呢?可能你一通搜索后会得到下边的答案
redis-cli--rawkeys"ops-coffee-*"|xargsredis-clidel
直接在li...…
1.RTT
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下Redis客户端执行一条命令分为如下四个过程:
发送命令
命令排队
命令执行
返回结果
客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。服务端处理命令,并将结果返回给客户端...…
SCAN命令可以为用户保证:从完整遍历开始直到完整遍历结束期间,一直存在于数据集内的所有元素都会被完整遍历返回,但是同一个元素可能会被返回多次。如果一个元素是在迭代过程中被添加到数据集的,又或者是在迭代过程中从数据集中被删除的,那么这个元素可能会被返回,也可能不会返回。
这是如何实现的呢,先从Redis中的字典dict...…
前言
众所周知,在多线程中,因为共享全局变量,会导致资源修改结果不一致,所以需要加锁来解决这个问题,保证同一时间只有一个线程对资源进行操作
但是在分布式架构中,我们的服务可能会有n个实例,但线程锁只对同一个实例有效,就需要用到分布式锁----redissetnx
原理
修改某个资源时,在redis中设置一个key,v...…
主要是依靠redis+lua来实现限流器,使用lua的原因是将多条命令合并在一起作为一个原子操作,无需过多考虑并发.
计数器模式
原理
计数器算法是指在一段窗口时间内允许通过的固定数量的请求,比如10次/秒,500次/30秒.
如果设置的时间粒度越细,那么限流会更平滑.
实现
所使用的Lua脚本
--计数器限...…
一为什么使用Redis
在项目中使用Redis,主要考虑两个角度:性能和并发。如果只是为了分布式锁这些其他功能,还有其他中间件Zookpeer等代替,并非一定要使用Redis。
性能:
如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得...…