0

Redis基础篇

一、从常用数据结构说起上文说到Redis提供了丰富的数据结构,包括STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)和ZSET(有序集合)基本数据类型。先来一波操作感受一下:基本的数据类型的大概使用就到这里,接下来就分析一下它的内部结构是怎么实现的。二、底层实现Redis是KV类型的数据库,Key-Value我们一般会用什么数据结构存储?哈希表!没错Redis的最外层确实也是通过hashtable实现的。在Redis里面每个键值对都是一个dictEntry,通过指针指向key的存储结构和value的存储结构,此外还有一个next存储里指向下一个键值对的指针。typede...

阅读全文>>

0

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...

阅读全文>>

0

Redis是如何持久化到硬盘的

Redis为什么需要持久化我们在项目中或多或少会用到Redis,Redis主要用作缓存数据库。使用Redis可以大大提升我们程序是性能,使用Redis之所以快的原因之一是Redis的数据是存储在内存中,应用程序访问Redis只需要从内存中读取即可。从内存中读取数据确实能提高访问速度,但是当Redis挂了,内存中的数据就会丢失掉,为了防止数据丢失,我们需要将数据持久化到硬盘中。当Redis挂了,数据已经存储到硬盘中了,Redis重启后,硬盘中的数据就会重新加载到内存中。那么,问题来了。Redis是如何持久化的?两种持久化方式在Redis中提供了两种不同的持久化方式:RDB和AOF。RDB持久化方...

阅读全文>>

0

Redis如何实现分布式锁?

前言如果在一个分布式系统中,我们从数据库中读取一个数据,然后修改保存,这种情况很容易遇到并发问题。因为读取和更新保存不是一个原子操作,在并发时就会导致数据的不正确。这种场景其实并不少见,比如电商秒杀活动,库存数量的更新就会遇到。如果是单机应用,直接使用本地锁就可以避免。如果是分布式应用,本地锁派不上用场,这时就需要引入分布式锁来解决。由此可见分布式锁的目的其实很简单,就是为了保证多台服务器在执行某一段代码时保证只有一台服务器执行。为了保证分布式锁的可用性,至少要确保锁的实现要同时满足以下几点:互斥性。在任何时刻,保证只有一个客户端持有锁。不能出现死锁。如果在一个客户端持有锁的期间,这个客户端崩...

阅读全文>>

0

如何破解缓存穿透和并发?

缓存是我们现在经常使用的技术之一,对于缓存的使用,看似非常简单,其实却蕴含着很多技巧在里面,这些技巧可以帮助我们最大化地发挥缓存的功效,减少因为缓存的使用导致的线上生产事故,那么这些技巧都有哪些,如何使用呢?下面试着从缓存穿透,缓存并发来开展破解之道。缓存穿透流程和危害  在通常情况下,我们在前台是如何使用缓存的呢?我们来看下面这个流程:  当系统接收到一个请求时,请求先从缓存中查找数据,查找数据一般得分两种情况:如果缓存中有数据的话,就直接从缓存中读取数据,然后返回给请求方;如果缓存中没有,那就从数据库中读取数据,然后再更新到缓存中;  以上这种方法可以在一定程度上减少数据库的压力,在并发量...

阅读全文>>

0

跨越异构鸿沟,Redis 迁移同步过程中的挑战与解决方案

随着云计算十余年的高速发展,作为目前可见的最新阶段,多云正在快步大踏步前进。而多云趋势所带来得数据云间迁移,也逐步常态化。因此, 缓存 Redis 已成为高并发场景下提升数据访问速度的标配。不仅是数据云间迁移,目前大型系统对于缓存强依赖,致使大多数企业都会面临大量并发读写数据时访问速度慢、数据库压力大,以及缓存数据不⾜带来的缓存击穿及雪崩⻛险。其中, Redis 就起到了降低数据库压力,提升数据访问速度的作用。下图是某网站业务的解决访问速度慢的问题,引入缓存Redis提升访问速度的流程:但在 Redis 迁移同步过程中,势必会面临着许多挑战:rdb版本不⼀致导致源 redis dump⽂件在⽬...

阅读全文>>

0

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 #...

阅读全文>>

0

redis的五种数据结构和应用场景:微博微信点赞+加购物车等

Redis五种数据结构如下:1.String 字符串类型是redis中最基本的数据类型,一个key对应一个value。String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。2.Hash (哈希)是一个Mapmap,指值本身又是一种键值对结构,如 value={{field1,value1},......fieldN,valueN}}3.链表 (List)List 说白了就是链表(redis 使用双端链表实现的 List),是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据...

阅读全文>>

0

Redis 之哈希

命令hset key field value 设置值,成功返回1,失败返回0,hash提供了 hsetnx 命令 只有key不存在才会设置成功hget key value 获取值hdel key field [field ...] 删除filed,返回删除成功的个数hlen key 统计field个数hmget key field [field ...] 批量获取field valuehmset key field value [field value ...] 批量设置field valuehexists key field 判断field是否存在,存在返回1,否则返回0hkeys key ...

阅读全文>>

0

Redisson 3.15.0 新特性spinLock和其它

Redisson 3.15.0发布了,带来了Apache Tomcat 10的支持,以及spin lock先看spinLock目前支持四种编程模式,一种原生,一种Async 异步,一种Reactive, 一种RxJava 2看原生的RLock lock = redisson.getSpinLock("myLock"); // traditional lock method lock.lock(); // or acquire lock and automatically unlock it after 10 seconds lock.lock(10, TimeUnit.SECONDS); ...

阅读全文>>