保证缓存数据库数据一致性
更新数据时的操作主要分为两种:写时更新和读时更新 什么是写时更新和读时更新写时更新:当我们往数据库写数据的时候我们去更新缓存,包括先更新缓存再更新数据库和先更新数据库再更新缓存。写时删除,读时更新:当我们往数据库写数据的时候我们直接删除缓存,然后其他请求读数据的时候更新缓存。包括先删除缓存再更新数据和先更新数据库再删除缓存。 缓存更新到底是读更新好还是写更新好?对比写时更新方案,读时更新更好,为什么? 如果你是一个写数据库场景比较多,而读数据场景比较少的业务需求,采用这种方案就会导致,数据压根还没读到,缓存就被频繁的更新,浪费性能。 同时有请求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...
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...
多级缓存
...
