Redis是一个高性能的key-value内存数据库。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,相比之下Redis具有更丰富的数据类型、支持持久化以及Redis天生支持高可用,因此Redis已经成为了现代企业常用的NoSQL中间件。
应用服务器的高可用架构设计最为理想的是服务无状态,但实际上业务总会有状态的,以session记录用户信息的例子来讲,未登入时,服务器没有记入用户信息的session访问网站都是以游客方式访问的,账号密码登入网站后服务器必须要记录你的用户信息记住你是登入后的状态,以该状态分配给你更多的权限。那么管理session有哪些方法呢?一、四种分布式Session管理方案1、Session复制sessi...
Redis的数据已经设置了TTL,不是过期就已经删除了吗?为什么还存在所谓的淘汰策略呢?这个原因我们需要从redis的过期策略聊起。一、Redis过期键策略redis键的过期时间都保存在过期字典中,过期键的删除策略有3种:定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即删除对键的删除操作。惰性删除:放任键过期不管,但每次从键空间中获取键时,都检查取得的键...
一、Redis对象底层数据结构Redis的八种编码类型,如下表所示:编码类型编码所对应的底层数据结构REDIS_ENCODING_INT8字节的long长整型REDIS_ENCODING_EMBSTRembstr编码的简单动态字符串REDIS_ENCODING_RAW简单动态字符串REDIS_ENCODING_HT字典REDIS_ENCODING_LINKEDLIST双端链表REDIS_EN...
一、从Web系统的演进说起单机时代在当今的互联网项目中,对于缓存的使用已经是”标配“了,我们开发一个平台刚开始访问量很小只需要一个缓存服务器就够用了(系统架构如下图所示)负载均衡随着系统的发展,访问量越来越大,这是我们的服务撑不住了,此时我们考虑给系统做负载均衡增加应用服务器来提高系统的并发量,此时缓存还够用,因此几个应用服务器共用一个缓存服务器就好了。分布式缓存可是好景不长,随着服务的时间...
缓存在高并发的场景的作用不言而喻,号称高并发架构的基石,其中最为典型代表非Redis莫属。无论你是想面试通关,还是实战中用好Redis,理解Redis的设计精髓,就变得很重要了。今天主要分享Redis关于单线程以及高并发场景的核心设计。一、Redis到底有多快?Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写,官方提供的数据是可以达到100000+的QPS(每秒...
在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库。然而在工程技术领域并没有100%完美的解决方案,正如这里,读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库(MySQL)间的数据一致性问题。我们所说的一致性就是在要...
在上一文中分布式锁的三种实现方案总结了目前业界常见的实现分布式锁的三种方案:1、基于数据库表排他锁2、基于Redis的setNX命令+过期时间+lua脚本3、基于Zookeerper的临时结点。本文我们继续通过源码分析一下Redisson实现分布式锁的原理。回顾:Redis实现分布式锁主要步骤指定一个key作为锁标记,存入Redis中,并且指定一个唯一的用户标识作为value。当key不存在...
一、为什么要使用分布式锁我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行!注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间!后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大...
海量数据处理以及缓存穿透这两个场景让我认识了布隆过滤器,我查阅了一些资料来了解它,但是很多现成资料并不满足我的需求,所以就决定自己总结一篇关于布隆过滤器的文章。希望通过这篇文章让更多人了解布隆过滤器,并且会实际去使用它!下面我们将分为几个方面来介绍布隆过滤器:什么是布隆过滤器?布隆过滤器的原理介绍。布隆过滤器使用场景。通过Java编程手动实现布隆过滤器。利用Google开源的Guava中自带...
如上图所示,我们在应用程序和Mysql数据库中建立一个中间层,即Redis缓存。通过Redis缓存可以有效减少查询数据库的时间消耗,这极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据的一致性要求极高,那么就不能使用缓存。另外的一些典型问题就是,缓存穿透、缓存击穿和缓存雪崩。本文...
Jedis连接Redis1.添加Jedis依赖2.在虚拟机端配置:将bind注释掉,然后改protected-mode为no改了之后保存并重启Redis。3.使用Jedis提供的Jedis这个工具类来连接Jedis,首先在虚拟机使用ifconfig命令查看虚拟机的ip,然后向Redis发送一个ping命令,测试一下是否可以连接上远程的Redis:可以连接上Redis的标志是程序运行后打印”P...
主从复制概述 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(salve)。数据的复制是单向的,只能从主节点到从结点。 默认情况下,每台Redis服务器都是...
事务的基本概念事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发来的命令请求打断。事务是一个原子操作:事务中的命令要么全部执行,要么全部不执行。Redis事务相关的几个命令multi:MULTI命令用于开启一个事务,它总是返回OK。MULTI执行之后,客户端可以继续向服务器发送任意多条命令,这些命令不会立即被执行,而是被放到一个队列中,...
Redis与传统数据的一个主要区别就是Redis将所有的数据都存储在内存中,而传统数据库通常只会把数据存储到磁盘上,这就使得Redis的数据存储和读取有着极快的速度,但是由于内存属于易失存储器,它记录的所有数据一旦断电就消失了,这对于想把Redis作为数据库而不仅仅是缓存的用户来说是不能容忍的。为了满足不同场景下的持久化需求,Redis提供了RDB(RedisDataBase)持久化、AOF...
一、什么是Redis?Redis是RemoteDictionarySevery的缩写,中文名称:远程字典服务器,它是一个基于C语言编写的完全开源免费,并且遵循BSD协议的一个高性能的key-value型分布式内存数据库。Redis使用key-value的形式保存值,常用的数据类型有String、list、hash、set、zset等数据结构,因此也被人们称为数据结构服务器。二、在Linux(...