SpringBoot整合Redis多数据源
基于配置文件 实现 redis 动态数据源和动态数据库的切换 MultiRedisConnectionFactory123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118import org.springframework.beans.factory.DisposableBean;import org.springframework.beans.factory.InitializingBean;import org.springframework.dao.DataAccessException;import...
Redis单机,集群安装
本章是基于CentOS7下的Redis集群教程,包括: 单机安装Redis Redis主从 Redis分片集群 1.单机安装Redis首先需要安装Redis所需要的依赖: 1yum install -y gcc tcl 然后将Redis安装包上传到虚拟机的任意目录: 例如,我放到了/tmp目录: 解压缩: 1tar -xvf redis-6.2.4.tar.gz 解压后: 进入redis目录: 1cd redis-6.2.4 运行编译命令: 1make && make install 如果没有出错,应该就安装成功了。 然后修改redis.conf文件中的一些配置: 1234# 绑定地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问bind 0.0.0.0# 数据库数量,设置为1databases 1 启动Redis: 1redis-server redis.conf 停止redis服务: 1redis-cli...
保证缓存数据库数据一致性
更新数据时的操作主要分为两种:写时更新和读时更新 什么是写时更新和读时更新写时更新:当我们往数据库写数据的时候我们去更新缓存,包括先更新缓存再更新数据库和先更新数据库再更新缓存。写时删除,读时更新:当我们往数据库写数据的时候我们直接删除缓存,然后其他请求读数据的时候更新缓存。包括先删除缓存再更新数据和先更新数据库再删除缓存。 缓存更新到底是读更新好还是写更新好?对比写时更新方案,读时更新更好,为什么? 如果你是一个写数据库场景比较多,而读数据场景比较少的业务需求,采用这种方案就会导致,数据压根还没读到,缓存就被频繁的更新,浪费性能。 同时有请求A和请求B进行更新操作,那么会出现 (1)线程A更新了数据库 (2)线程B更新了数据库 (3)线程B更新了缓存...
redis数据迁移
需求需要将一个redis实例中(或是具体到某一个db)的部分keys,转移到另一个redis实例(或是具体到某一个db) 使用Redis自身支持的指令源实例与目标实例版本相同使用dump命令12345678910111213141516171819202122232425262728293031#!/bin/bash#redis 源ipsrc_ip=127.0.0.1#redis 源portsrc_port=6392#redis 源密码src_auth=#redis 源库src_db=#redis 目的ipdest_ip=127.0.0.1#redis 目的portdest_port=6393#redis 目的密码dest_auth=#redis 目的库dest_db=#要迁移的key前缀key_prefix=testi=1redis-cli -h $src_ip -p $src_port -a $src_auth -n $src_db keys "${key_prefix}*" | while read keydo ...
redis原理
Redis原理篇1、原理篇-Redis数据结构1.1 Redis数据结构-动态字符串我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题:获取字符串长度的需要通过运算非二进制安全不可修改Redis构建了一种新的字符串结构,称为简单动态字符串(Simple Dynamic...
redis最佳实践
Redis高级篇之最佳实践今日内容 Redis键值设计 批处理优化 服务端优化 集群最佳实践 1、Redis键值设计1.1、优雅的key结构Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定: 遵循基本格式:[业务名称]:[数据名]:[id] 长度不超过44字节 不包含特殊字符 例如:我们的登录业务,保存用户信息,其key可以设计成如下格式: 这样设计的好处: 可读性强 避免key冲突 方便管理 更节省内存: key是string类型,底层编码包含int、embstr和raw三种。embstr在小于44字节使用,采用连续内存空间,内存占用更小。当字节数大于44字节时,会转为raw模式存储,在raw模式下,内存空间不是连续的,而是采用一个指针指向了另外一段内存空间,在这段空间里存储SDS内容,这样空间不连续,访问的时候性能也就会收到影响,还有可能产生内存碎片 1.2、拒绝BigKeyBigKey通常以Key的大小和Key中成员的数量来综合判定,例如: Key本身的数据量过大:一个String类型的Key,它的值为5...
黑马redis实战篇
代码地址:https://gitee.com/xiaowu_wang/hm-dianping 实战篇Redis开篇导读亲爱的小伙伴们大家好,马上咱们就开始实战篇的内容了,相信通过本章的学习,小伙伴们就能理解各种redis的使用啦,接下来咱们来一起看看实战篇我们要学习一些什么样的内容 短信登录 这一块我们会使用redis共享session来实现 商户查询缓存 通过本章节,我们会理解缓存击穿,缓存穿透,缓存雪崩等问题,让小伙伴的对于这些概念的理解不仅仅是停留在概念上,更是能在代码中看到对应的内容 优惠卷秒杀 通过本章节,我们可以学会Redis的计数器功能,...
bigkeys处理方案
Bigkey 是指当 Redis 的字符串类型过大,非字符串类型元素过多。 危害| 内存空间不均匀(平衡)例如在 Redis Cluster 中,大量 bigkey 落在其中一个 Redis 节点上,会造成该节点的内存空间使用率比其他节点高,造成内存空间使用不均匀。 | 请求倾斜对于非字符串类型的 bigkey 的请求,由于其元素较多,很可能对于这些元素的请求都落在 Redis cluster 的同一个节点上,造成请求不均匀,压力过大。 | 超时阻塞由于 Redis 单线程的特性,操作 bigkey 比较耗时,也就意味着阻塞 Redis 可能性增大。这就是造成生产事故的罪魁祸首!导致 Redis 间歇性卡死、影响线上正常下单! | 网络拥塞每次获取 bigkey 产生的网络流量较大,假设一个 bigkey 为 1MB,每秒访问量为 1000,那么每秒产生 1000MB 的流量,对于普通的千兆网卡(按照字节算是 128MB/s)的服务器来说简直是灭顶之灾。 而且一般服务器会采用单机多实例的方式来部署,也就是说一个 bigkey...
redis基础
Redis快速入门Redis的常见命令和客户端使用 1.初识RedisRedis是一种键值型的NoSql数据库,这里有两个关键字: 键值型 NoSql 其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json: 而NoSql则是相对于传统关系型数据库而言,有很大差异的一种数据库。 1.1.认识NoSQLNoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No...
分布式缓存(redis的高可用)
基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题: 1.Redis持久化Redis有两种持久化方案: RDB持久化 AOF持久化 1.1.RDB持久化RDB全称Redis Database Backup...