RedisJson横空出世
近期官网给出了RedisJson(RedisSearch)的性能测试报告,可谓碾压其他NoSQL,下面是核心的报告内容,先上结论:对于隔离写入(isolated writes),RedisJSON 比 MongoDB 快 5.4 倍,比 ElasticSearch 快 200 倍以上。对于隔离读取(isolated reads),RedisJSON 比 MongoDB 快 12.7 倍,比 ElasticSearch 快 500 倍以上。在混合工作负载场景中,实时更新不会影响 RedisJSON 的搜索和读取性能,而 ElasticSearch 会受到影响。RedisJSON* 支持的操作数/...
基于Redis消息的订阅发布应用场景
基于Redis消息的订阅发布应用场景1.应用背景在物联网采集管控系统中,前后端隔离的情况下,前端通过表单(比如按钮,开关,表格等)输入数据到数据库(比如MySql,通过WEBAPI服务端输入),然后采集控制端到数据库里去扫表取数据,将数据下发给物联网络中的终端设备(比如风扇控制板),从而来控制风扇的开跟关。2.困境采集控制端需要到数据库中去扫表。这个扫表操作会带来几个问题:2.1 锁表风险扫表会有锁表风险,当该DBContext被占用的时候,其他线程不能实时使用此DBContext。2.2 实时性差在物联网系统中,数据会非常多,比如有10000台设备,每台设备有100个采集控制点,则控制点最多...
初探 Redis 客户端 Lettuce:真香
一、Lettuce 是啥?一次技术讨论会上,大家说起 Redis 的 Java 客户端哪家强,我第一时间毫不犹豫地喊出 "Jedis, YES!"“Jedis 可是官方客户端,用起来直接省事,公司中间件都用它。除了 Jedis 外难道还有第二个能打的?”我直接扔出王炸。刚学 Spring 的小张听了不服:“SpringDataRedis 都用 RedisTemplate!Jedis?不存在的。”“坐下吧秀儿,SpringDataRedis 就是基于 Jedis 封装的。”旁边李哥呷了一口刚开的快乐水,嘴角微微上扬,露出一丝不屑。“现在很多都是用 Lettuce 了,你们不会不知道吧?”老王推了...
Redis基础篇
一、从常用数据结构说起上文说到Redis提供了丰富的数据结构,包括STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)和ZSET(有序集合)基本数据类型。先来一波操作感受一下:基本的数据类型的大概使用就到这里,接下来就分析一下它的内部结构是怎么实现的。二、底层实现Redis是KV类型的数据库,Key-Value我们一般会用什么数据结构存储?哈希表!没错Redis的最外层确实也是通过hashtable实现的。在Redis里面每个键值对都是一个dictEntry,通过指针指向key的存储结构和value的存储结构,此外还有一个next存储里指向下一个键值对的指针。typede...
Linux运维指南Nacos、Rabbit MQ、Redis
Linux运维指南含Nacos、Rabbit MQ、Redis一、Rabbit MQ安装指南1.1安裝Erlang语言因为Rabbit MQ是基于Erlang语言开发的,运行环境必须依赖于Erlang,无论是Windows机器还是Linux机器,安装Rabbit MQ之前第一步要安装Erlang.1.1.1安装Erlang所需依赖进入Linux服务器,创建/u01目录:mkdir /u01进入u01目录:cd /u01yum安装依赖:yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmltoperl wget gt...
Redis是如何持久化到硬盘的
Redis为什么需要持久化我们在项目中或多或少会用到Redis,Redis主要用作缓存数据库。使用Redis可以大大提升我们程序是性能,使用Redis之所以快的原因之一是Redis的数据是存储在内存中,应用程序访问Redis只需要从内存中读取即可。从内存中读取数据确实能提高访问速度,但是当Redis挂了,内存中的数据就会丢失掉,为了防止数据丢失,我们需要将数据持久化到硬盘中。当Redis挂了,数据已经存储到硬盘中了,Redis重启后,硬盘中的数据就会重新加载到内存中。那么,问题来了。Redis是如何持久化的?两种持久化方式在Redis中提供了两种不同的持久化方式:RDB和AOF。RDB持久化方...
Redis如何实现分布式锁?
前言如果在一个分布式系统中,我们从数据库中读取一个数据,然后修改保存,这种情况很容易遇到并发问题。因为读取和更新保存不是一个原子操作,在并发时就会导致数据的不正确。这种场景其实并不少见,比如电商秒杀活动,库存数量的更新就会遇到。如果是单机应用,直接使用本地锁就可以避免。如果是分布式应用,本地锁派不上用场,这时就需要引入分布式锁来解决。由此可见分布式锁的目的其实很简单,就是为了保证多台服务器在执行某一段代码时保证只有一台服务器执行。为了保证分布式锁的可用性,至少要确保锁的实现要同时满足以下几点:互斥性。在任何时刻,保证只有一个客户端持有锁。不能出现死锁。如果在一个客户端持有锁的期间,这个客户端崩...
如何破解缓存穿透和并发?
缓存是我们现在经常使用的技术之一,对于缓存的使用,看似非常简单,其实却蕴含着很多技巧在里面,这些技巧可以帮助我们最大化地发挥缓存的功效,减少因为缓存的使用导致的线上生产事故,那么这些技巧都有哪些,如何使用呢?下面试着从缓存穿透,缓存并发来开展破解之道。缓存穿透流程和危害 在通常情况下,我们在前台是如何使用缓存的呢?我们来看下面这个流程: 当系统接收到一个请求时,请求先从缓存中查找数据,查找数据一般得分两种情况:如果缓存中有数据的话,就直接从缓存中读取数据,然后返回给请求方;如果缓存中没有,那就从数据库中读取数据,然后再更新到缓存中; 以上这种方法可以在一定程度上减少数据库的压力,在并发量...
跨越异构鸿沟,Redis 迁移同步过程中的挑战与解决方案
随着云计算十余年的高速发展,作为目前可见的最新阶段,多云正在快步大踏步前进。而多云趋势所带来得数据云间迁移,也逐步常态化。因此, 缓存 Redis 已成为高并发场景下提升数据访问速度的标配。不仅是数据云间迁移,目前大型系统对于缓存强依赖,致使大多数企业都会面临大量并发读写数据时访问速度慢、数据库压力大,以及缓存数据不⾜带来的缓存击穿及雪崩⻛险。其中, Redis 就起到了降低数据库压力,提升数据访问速度的作用。下图是某网站业务的解决访问速度慢的问题,引入缓存Redis提升访问速度的流程:但在 Redis 迁移同步过程中,势必会面临着许多挑战:rdb版本不⼀致导致源 redis dump⽂件在⽬...
Redis集群实战篇
1. 拉取redis镜像docker pull redis:6.0.92. 配置文件2.1 生成目录用来存放redis的配置文件与持久化文件,日志文件等# 新增目录 mkdir -p /www/redis/redis_001/ && mkdir -p /www/redis/redis_001/data/ # 切换目录 cd /www/redis/redis_001/ vim redis.conf2.2 建立配置文件# 解除限制redis只能本地访问 bind 0.0.0.0 # 默认yes,开启保护模式,限制为本地访问,改成no protected-mode no #...