Redis

3.【Redis系列】Redis的高级应用-分布式锁

我们两清 提交于 2021-02-16 16:58:24
原文: 3.【Redis系列】Redis的高级应用-分布式锁 在进行分布式应用逻辑开发时,经常会遇到并发问题。 比如我们在修改一个用户的信息,首先需要获取用户信息,再内存中修改后,再存回去。这个过程如果有其他线程同时操作,着就会产生并发问题,因为读取和存储都不是原子性的。我们需要通过分布式锁限制程序的并发执行。 1.分布式锁 分布式锁本质上就是在Redis里面占一个车位,当有新的车辆过来时,发现已经有一辆车停在车位上,只能是放弃或者稍后再来。 我们用命令模拟下: > setnx lock : qqsir true OK . . . do something . . . > del lock : qqsir 但是这样有一个问题,如果中间的逻辑出现问题,导致没有执行del,这样就会陷入死锁,锁永远不能被释放。 改进1: 我们可以对key设置一个过期时间,这样即使后面逻辑报错,时间到期后也可以将锁是释放掉 > setnx lock : qqsir true OK > expire lock : qqsir 5 . . . do something . . . > del lock : qqsir 以上的逻辑其实还是存在问题,假设setnx和expire之间突然断电,没有执行,这样锁还是无法释放。这个问题的根本原因就是setnx和expire的操作不是原子性的。 为了解决这个问题

9.【Redis系列】Redis的高级应用-漏斗限流

♀尐吖头ヾ 提交于 2021-02-16 16:57:51
原文: 9.【Redis系列】Redis的高级应用-漏斗限流 漏斗限流是最常用的限流方法之一,顾名思义,这个算法的灵感源于漏斗(funnel)的结构。 image.png 漏斗的容量是有限的,如果将漏嘴堵住,然后一直往里面灌水,它就会变满,直至再也装不进去。如果将漏嘴放开,水就会往下流,流走一部分之后,就又可以继续往里面灌水。如果漏嘴流水的速率大于灌水的速率,那么漏斗永远都装不满。如果漏嘴流水速率小于灌水的速率,那么一旦漏斗满了,灌水就需要暂停并等待漏斗腾空。 所以,漏斗的剩余空间就代表着当前行为可以持续进行的数量,漏嘴的流水速率代表着系统允许该行为的最大频率。下面我们使用代码来描述单机漏斗算法。 public class FunnelRateLimiter { static class Funnel { int capacity ; float leakingRate ; int leftQuota ; long leakingTs ; public Funnel ( int capacity , float leakingRate ) { this . capacity = capacity ; this . leakingRate = leakingRate ; this . leftQuota = capacity ; this . leakingTs = System .

11.【Redis系列】Redis的高级应用-Scan

橙三吉。 提交于 2021-02-16 16:41:35
原文: 11.【Redis系列】Redis的高级应用-Scan 在平时线上 Redis 维护工作中,有时候需要从 Redis 实例成千上万的 key 中找出特定前缀的 key 列表来手动处理数据,可能是修改它的值,也可能是删除 key。这里就有一个问题,如何从海量的 key 中找出满足特定前缀的 key 列表来? Redis 提供了一个简单暴力的指令 keys 用来列出所有满足特定正则字符串规则的 key。 127.0.0.1 : 6379> set codehole1 a OK 127.0.0.1 : 6379> set codehole2 b OK 127.0.0.1 : 6379> set codehole3 c OK 127.0.0.1 : 6379> set code1hole a OK 127.0.0.1 : 6379> set code2hole b OK 127.0.0.1 : 6379> set code3hole b OK 127.0.0.1 : 6379> keys * 1 ) "codehole1" 2 ) "code3hole" 3 ) "codehole3" 4 ) "code2hole" 5 ) "codehole2" 6 ) "code1hole" 127.0.0.1 : 6379> keys codehole* 1 ) "codehole1" 2

2019 最新 阿里天猫、蚂蚁、钉钉ava 面试题汇总,附答案

主宰稳场 提交于 2021-02-16 16:36:35
Java面试前需要做足各方面的准备工作,肯定都会浏览大量的面试题,本人也不例外,这是一些最新面试题,分享给大家。 Java基础 面向对象的特征:继承、封装和多态 int 和 Integer 有什么区别; Integer的值缓存范围 说说反射的用途及实现 Http 请求的 GET 和 POST 方式的区别 MVC设计思想 什么是Java序列化和反序列化; 如何实现Java序列化; 重载和重写的区别 进程和线程 线程和进程的概念 并行和并发的概念 创建线程的方式及实现 进程间通信的方式 说说 CountDownLatch、CyclicBarrier 原理和区别 说说 Semaphore 原理 说说 Exchanger 原理 ThreadLocal 原理分析; ThreadLocal为什么会出现OOM,出现的深层次原理 讲讲线程池的实现原理 线程池的几种实现方式 线程的生命周期;状态是如何转移的 锁机制 什么是线程安全?如何保证线程安全? 重入锁的概念;重入锁为什么可以防止死锁? 产生死锁的四个条件 如何检查死锁 volatile 实现原理 synchronized 实现原理(对象监视器) synchronized 与 lock 的区别 AQS 同步队列 CAS 无锁的概念;乐观锁和悲观锁 常见的原子操作类 什么是 ABA 问题;出现 ABA 问题 JDK 是如何解决的

How to isolate spring boot app redis and spring boot session global redis

ぃ、小莉子 提交于 2021-02-16 15:28:05
问题 As I know, spring boot and spring session provided us one-stop autoconfig, but when my app use session redis and app cache redis not same redis server; How can I config it, thank you very much for your reply! 回答1: Indeed, by default, both spring-session and spring-cache are actually configured by spring-boot with a RedisConnectionFactory bean named as connectionFactory . Two ways to do this. make spring-session to use a different connectionFactory bean instance, and leave spring-cache to use

How to isolate spring boot app redis and spring boot session global redis

别说谁变了你拦得住时间么 提交于 2021-02-16 15:27:27
问题 As I know, spring boot and spring session provided us one-stop autoconfig, but when my app use session redis and app cache redis not same redis server; How can I config it, thank you very much for your reply! 回答1: Indeed, by default, both spring-session and spring-cache are actually configured by spring-boot with a RedisConnectionFactory bean named as connectionFactory . Two ways to do this. make spring-session to use a different connectionFactory bean instance, and leave spring-cache to use

jedis

隐身守侯 提交于 2021-02-16 14:01:53
来源:http://www.cnblogs.com/Springmoon-venn/p/10141915.html 方法定义如下: 1 、String set(String key, String value) 2 、String set(String key, String value, String nxxx) 3、String set(String key, String value, String nxxx, String expx, int time) 4、String set(String key, String value, String nxxx, String expx, long time) 功能都是一样的,“Set the string value as value of the key.” 将string类型的value 放到key的value上,返回值都是 String。 1、把key、value set到redis中,隐含覆盖,默认的ttl是-1(永不过期) 2、根据第三个参数,把key、value set到redis中 nx : not exists, 只有key 不存在时才把key value set 到redis xx : is exists ,只有 key 存在是,才把key value set 到redis 3、4 和2 就相同

《ODF走进名企之滴滴站:开源数据库最新发展技术之涓滴成河》邀您一起参加~~~

六眼飞鱼酱① 提交于 2021-02-16 13:10:31
滴滴作为一家科技驱动的创新企业,致力于回馈开发者社区、打造开源生态,建立企业创新品牌和技术领导力。目前,滴滴在开源项目上做了很多方面的探索和实践,积极参与业界的开源项目,不断对外输出内部的优秀项目。 《ODF走进名企之滴滴站:开源数据库最新发展技术之涓滴成河》邀您一起参加~~~ 滴滴开源的愿景 拥抱开放 - 通过主动开源,加速开放创新,构建开放生态圈。 创造价值 - 促进各领域的合作和技术发展,构建更多可扩展的产品。 合作共赢 - 共享技术,合作开发,将更好的技术带给世界,共同促进数字世界、智能世界的加速发展。 活动时间 2018年8月4日(周六) 14:00 - 18:00 活动地点 尚东数字山谷B区2号楼4层英菲尼迪会议室 日程安排 Time Table 13:30-13:55 活动签到 13:55-14:00 嘉宾致辞&主办方致辞 14:00-14:45 齐楠 《Redis多机房支持》 14:45-15:30 杜修文 《 MySQL InnoDB Cluster详解》 15:30-16:15 赵平 《流式处理实践之路》 16:15-16:30 茶歇 16:30-17:15 冯若航 《PostGIS在探探中的应用》 17:15-18:00 张冬洪 《Pedis 5.0 新特性解读 》 嘉宾议程 齐楠 | 滴滴基础架构部门高级专家工程师 现任滴滴基础架构部,负责队列,接入层

Exceptionless 5.0.0 本地Docker快速部署介绍

旧时模样 提交于 2021-02-16 05:42:02
在之前我有专门写两篇文章介绍过 Exceptionless这款开源日志项目的使用和部署 ,但是当时是基于4.1.0版本(2017年的release),时隔两年多Exceptionless也推出了5.0.0版本。 一、关于Exceptionless 5.0.0   Exceptionless 是一个开源的实时的好用的日志收集框架,它将日志收集变得简单易用并且不需要了解太多的相关技术细节及配置。但是之前的版本将其Web和API绑定在了Windows平台通过IIS运行,对于已经步入云原生时代的我们显得有点格格不入。5.0.0的发布解决了这一痛点,其最大的变化就是基于ASP.NET Core重写并支持跨平台,也就是说当初我们设想的要是能够基于Docker部署在Linux服务器下就更好了的愿望已经实现了,在此真心 感谢Exceptionless项目的各位贡献者 。本文就Exceptionless 5.0.0版本介绍一下快速地部署开发环境和生产环境,相信对有兴趣的朋友会有一点帮助。   至此我也可以将我们之前的Exceptionless从Windows Server迁移到Linux上了! 二、快速本地部署步骤 2.1 安装Docker 18.09+   由于Exceptionless 5.0.0的一个前置要求是Docker版本(CE)在18.09及以上,因此我们需要安装一个18.09

Redis keys not shown while using Cache facade in Laravel

眉间皱痕 提交于 2021-02-16 05:28:46
问题 I'm using Laravel Cache facade, and the CACHE_DRIVER=redis . All data is saved in Redis successfully, but when I use redis-cli and run keys* there are not keys! When using the command flushall in redis-cli it loads the data again from the database, so that means the keys are already stored in Redis. 回答1: Redis has 16 databases indexed 0 - 15. The default database index is 0 , so when you run redis commands without specifying the database index, you're only running commands against database