草庐IT

Redis的Java客户端

Redis的Java客户端Jedis优点:以Redis命令作为方法名称,学习成本低廉,简单且实用缺点:Jedis的实例是线程不安全的,在多线程的环境下需要基于线程池来使用lettuce(spring官方默认)基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。支持Redis的哨兵模式、集群模式、管道模式Redisson(适用于分布式的环境)基于Redis实现的分布式、可伸缩的Java数据结构的集合。包含Map、Queue、Lock、Semaphore、AtomicLong等强大的功能JedisJedis基本使用步骤引入依赖创建Jedis对象,建立连接使用Jedis,方法名与

Redis概述及基本数据结构

SQLvsNoSQL结构化SQL是结构化的,一旦定义了表结构,以后在维护数据的时候必须严格遵守定义的结构。NoSQL是非结构化的,常见的形式有Redis的Key-Value存储形式、Document文档型存储形式、Graph图类型存储形式关联的SQL数据库可以通过如外键的方式去维护数据与数据之间的关联NoSQL是非关系型的,如果想要维护数据与数据之间的关系,通常通过json格式的数据进行维护例如:{id:1,name:"张三",orders:[{id:1,item:{id:10,title:"荣耀6",price:4999}},{id:2,item:{id:20,title:"小米11",pr

MongoDB 学习笔记

概述MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库中功能最丰富,最像关系型数据库的。MongoDB支持的数据结构非常松散,类似json的bson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是支持的查询语言非常强大,语法类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大部分功能,还支持对数据建立索引MongoDB的特点:面向集合存储,易存储对象类型的数据支持查询,以及动态查询支持多种语言文件存储格式为BSON支持主从复制、故障恢复和分片MongoDB的应用场景:游戏应用:使用MongoDB作为游戏服务器的数据库存储用户信息,用

SpringDataRedis序列化的一些问题

SpringDataRedis的序列化的一些问题RedisTemplate可以接收任意Object作为值写入Redis,但是如果不实现设置序列化器的化默认是采用JDK序列化,序列化后的结果可读性差并且内存占用空间大,如下图。自定义RedisTemplate的序列化方式key和hashKey采用string序列化,value和HashValue采用JSON序列化@ConfigurationpublicclassRedisConfig{@BeanpublicRedisTemplateredisTemplate(RedisConnectionFactoryconnectionFactory){//创

为什么列式存储会被广泛用在 OLAP 中?

大家好,我是大D。不知是否有小伙伴们疑问,为什么列式存储会广泛地应用在OLAP领域,和行式存储相比,它的优势在哪里?今天我们一起来对比下这两种存储方式的差别。其实,列式存储并不是一项新技术,最早可以追溯到1983年的论文Cantor。然而,受限于早期的硬件条件和应用场景,传统的事务型数据库(OLTP)如Oracle、MySQL等关系型数据库都是以行的方式来存储数据的。直到近几年分析型数据库(OLAP)的兴起,列式存储这一概念又变得流行,如HBase、Cassandra等大数据相关的数据库都是以列的方式来存储数据的。行式存储的原理与特点对于OLAP场景,大多都是对一整行记录进行增删改查操作的,那

zset底层的数据结构为什么使用调表而不是红黑树

zset底层的数据结构为什么使用调表而不是红黑树前言Redis中使用到的数据结构以及各个数据对象的底层数据结构在上一篇文章已经写得非常详细,这里不再赘述。https://www.cnblogs.com/ruigedada/p/16248689.htmlzset的底层数据结构是压缩列表和跳表,当满足以下条件时,Redis将使用压缩列表存储有序集合保存的元素个数要小于128个;有序集合保存的所有元素成员的长度都必须小于64字节。我们都知道,调表的查找时间复杂度为O(logn),但是红黑树和AVL树的查找效率也是O(logn)呀,为什么zset的底层是调表而不是红黑树或者AVL树呢?一、跳表、红黑树

Redis学习笔记

Redis参考博客https://www.cnblogs.com/beiluowuzheng/https://www.cnblogs.com/hunternet/如有侵权,请联系我删除,谢谢!目录一、什么是redis二、数据结构1.1SDS,简单动态字符串1.1.1SDS底层结构1.1.2SDS内存重分配1.1.3二进制安全1.1.4为什么使用SDS1.1.5SDSAPI1.1.6Redis3.2之后的SDSRedis3.2之后的SDS共有五个结构体Redis是如何创建SDS对象为什么SDS不用内存对齐1.2链表1.2.1list底层结构1.2.2Redis的链表实现的特性1.2.3双向无环链

[Redis] Redis的三大缓存异常原因分析和解决方案

Redis的三大缓存异常原因分析和解决方案缓存的三个异常分别是缓存击穿、缓存雪崩、缓存穿透。这三个问题一旦发生,会导致大量的请求积压到数据库层,并发量巨大的情况下很有可能导致数据库宕机或是故障,造成严重的生产事故。接下来就来看看这三种缓存异常的原因分析和解决方案。缓存击穿缓存击穿是指针对某个热点数据的请求,无法在缓存中处理,导致大量的针对该数据的请求一下子全都发送到了后端数据库,使数据库压力激增,影响到数据库处理其他的请求。产生原因缓存击穿的情况,经常是发生在热点数据过期失效的情况。如下图:解决方案对于缓存击穿,解决方案其实也很直接。对于访问很频繁的热点数据,就不需要设置过期时间了。这样对热点

Redis设计与实现3.1:主从复制

主从复制这是《Redis设计与实现》系列的文章,系列导航:Redis设计与实现笔记SLAVEOF新旧复制功能旧版复制功能旧版复制功能的实现为同步和命令传播:当刚连上Master时,要做一次全同步:sequenceDiagram participantSlave participantMaster Slave->>Master:SYNC Master->>Master:BGSAVE Master->>Master:记录此时的命令到缓冲区中Master->>Slave:发送RDBMaster->>Slave:发送命令缓冲区中的命令之所以要用到缓冲区是因为,在主节点进行BGSAVE的过程中如果有命令

Redis缓存相关的几个问题

1  缓存穿透问题描述缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。解决方案缓存空值,即对于不存在的数据,在缓存中放置一个空对象(注意,设置过期时间)2  缓存击穿问题描述缓存击穿是指热点key在某个时间点过期的时候,而恰好在这个时间点对这个Key有大量的并发请求过来,从而大量的请求打到数据库。解决方案加互斥锁,在并发的多个请求中,只有第一个请求线程能拿到锁并执行数据库查询操作,其他的线程拿不到锁就阻塞等着,等到第一个线程将数据写入缓存后,直接走缓存。3  缓存雪崩问题