
Redis
文章平均质量分 82
Men-DD
这个作者很懒,什么都没留下…
展开
-
Redis深入理解十一 :Redis提问
版本一一、为什么使用缓存?1、高性能2、高可用二、什么是缓存穿透? 缓存击穿? 缓存雪崩? 怎么解决?缓存穿透: 缓存中查不到,数据库中也查不到。解决方案:1》 对参数进行合法性校验。2》将数据库中没有查到结果的数据也写入到缓存。这时要注意为了防止Redis被无用的Key占满,这一类缓存的有效期要设置得短一点。3》 引入布隆过滤器,在访问Redis之前判断数据是否存在。 要注意布隆过滤器存在一定的误判率,并且,布隆过滤器只能加数据不能减数据。缓存击穿: 缓存中没有,数据库中有。一般是原创 2022-04-18 14:48:23 · 200 阅读 · 0 评论 -
Redis深入理解十 :Redis队列与Stream & Redis高级数据结构HyperLogLog & Pipeline和事务的区别
Redis5.0 StreamRedis Stream 的结构如上图所示,每一个Stream都有一个消息链表,将所有加入 的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容。消息是持久化的, Redis 重启后,内容还在。每个 Stream 都有唯一的名称,它就是 Redis 的 key,在我们首次使用xadd指 令追加消息时自动创建。每个 Stream 都可以挂多个消费组,每个消费组会有个游标last_delivered_id在 Stream 数组之上往前移动,表示当前消费组已经消费到哪条原创 2022-04-18 11:17:02 · 965 阅读 · 0 评论 -
Redis深入理解九 :Redis中的线程和IO模型
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种(1)同步阻塞IO(Blocking IO):即传统的IO模型老李去火车站买票,排队三天买到一张退票。耗费:在车站吃喝拉撒睡 3天,其他事一件没干。(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库老李去火车站买票,隔12小时去火车站问有没有退票,三天后买到一张票。耗费:往返车站6次,路原创 2022-04-06 15:30:33 · 3200 阅读 · 0 评论 -
Redis深入理解八 :Redis 开发规范与性能优化
开发规范与性能优化一、键值设计1. key名设计(1)【建议】: 可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:idtrade:order:1(2)【建议】:简洁性保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视,例如:user:{uid}:friends:messages:{mid} 简化为 u:{uid}🇫🇷m:{mid}(3)【强制】:不要包含特殊字符反例:包含空格、换行、单双引号以及其他转义字符2. valu原创 2022-04-01 13:30:31 · 412 阅读 · 0 评论 -
Redis深入理解七 :Redis 缓存应用级别架构思想
缓存分析缓存的分类缓存的数据一致性缓存更新的设计模式优化路径cache 优化数据一致性 过期时间+Async+Canal双缓存 --- 有规律毛刺现象问题降级方案 --- 服务异常大厂Redis Cluster方式Redis Cluster是如何解决高可用问题的呢?为什么大厂不用Redis Cluster构建集群?为什么槽的范围是0 ~16383?如何用Redis构建超大规模集群?缓存实战cache 分析原创 2022-03-31 13:50:33 · 3865 阅读 · 0 评论 -
Redis深入理解六 :Redis 分布式锁 以及 Redisson 锁续命分析、读写锁
简单redis锁实现(思考问题) @Autowired private StringRedisTemplate stringRedisTemplate; public String testRedisLock() { String lockKey = "lock:product:1"; String clientId = UUID.randomUUID().toString(); Boolean result = stringRedisTempl原创 2022-03-29 17:56:15 · 7107 阅读 · 0 评论 -
Redis深入理解二: 客户端连接 哨兵、集群
Java jedis 使用引入相关依赖:<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version></dependency>redis.propertiesredis.host=localhostredis.password=原创 2022-03-17 16:53:08 · 3053 阅读 · 0 评论 -
Redis深入理解五 :Redis主从架构、哨兵架构、高可用集群模式
redis主从架构搭建,配置从节点步骤:复制一份redis.conf文件将相关配置修改为如下值:port 6380pidfile /var/run/redis_6380.pid # 把pid进程号写入pidfile配置的文件logfile "6380.log"dir /usr/local/redis‐5.0.3/data/6380 # 指定数据存放目录#需要注释掉bind#bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通原创 2022-03-17 15:19:45 · 1063 阅读 · 1 评论 -
Redis深入理解四 :Redis持久化
Redis持久化RDB快照(snapshot)在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次 数据集。比如说, 以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集:# save 60 1000 //关闭RDB只需要将所有的save保存策略注释掉即可还可以手动执行命令生成RDB快照,原创 2022-03-17 14:24:26 · 102 阅读 · 0 评论 -
Redis深入理解三:单线程、快、并发、keys、scan、管道、事务
Redis是单线程吗?Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。Redis 单线程为什么还能这么快?因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性 能损耗问题。正因为 Redis 是单线程,所以要小心使用 Redis 指令,对于那些耗时的指令(比如 keys),一定要谨慎原创 2022-03-16 17:17:14 · 459 阅读 · 0 评论 -
Redis深入理解一 :使用
basic_basic_key = "basic_key_test"设置: $cluster_redis.set(_basic_key, transaction.to_msgpack, ex: 7.days)获取: $cluster_redis.get(_basic_key)删除: $cluster_redis.del(_basic_key)删除: $cluster_redis.unlink(_basic_key)原子操作:$cluster_redis.setnx(_basic_key, tr原创 2022-02-24 13:07:57 · 313 阅读 · 0 评论