Redis

PHP Session的用法

久未见 提交于 2020-08-12 23:23:41
在 PHP 中,Session 是一种服务器端的机制,服务器使用一种散列表的结构(类似于 JSON)来保存信息。相比于保存在客户端的 Cookie,Session 将用户交互信息保存在了服务器端,使得同一个客户端每次和服务端交互时,不需要每次都传回所有的 Cookie 值,而是只需要传回一个 ID 即可,这个 ID 是客户端第一次访问服务器的时候生成的,而且是唯一的。 还有一点就是,因为 Cookie 存储在客户端,所以用户有权禁用 Cookie,而 Session 是存储在服务器端的,用户无法禁用。 Session 简介 Session 在 Web 技术中占有非常重要的地位。由于网页是一种无状态的连接程序,无法记录用户的浏览状态,所以需要通过 Session 来记录用户的有关信息,以供用户再次以这个身份对 Web 服务器发起请求。 Session 中文是“会话”的意思,与 Cookie 类似,都是用来储存使用者相关资料的,比如用户名、访问权限、登陆时间等。与 Cookie 最大不同之处在于 Cookie 是将资料存放于客户端电脑之中,而 Session 则是将数据存放于服务器系统之下。 当开启一个 Session 时,PHP 将会创建一个随机的 Session ID(例如“t5is1r7ct740dn390kuv3mpcse”),每个用户的 Session ID 都是唯一的,而且

从壹开始前后端分离【 .NET Core2.0/3.0 +Vue2.0 】框架之十一 || AOP自定义筛选,Redis入门 11.1

流过昼夜 提交于 2020-08-12 18:18:55
本文3.0版本文章 https://mp.weixin.qq.com/s/pjvleNGi_AazZ7COdxQyPQ Redis 部分的内容,和netcore2.0一样,不需要更新。 代码已上传Github+Gitee,文末有地址   书说上文《 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存 》,昨天咱们说到了AOP面向切面编程,简单的举出了两个栗子,不知道大家有什么想法呢,不知道是否与传统的缓存的使用有做对比了么?   传统的缓存是在Controller中,将获取到的数据手动处理,然后当另一个controller中又使用的时候,还是Get,Set相关操作,当然如果小项目,有两三个缓存还好,如果是特别多的接口调用,面向Service服务层还是很有必要的,不需要额外写多余代码,只需要正常调取Service层的接口就行,AOP结合Autofac注入,会自动的查找,然后返回数据,不继续往下走Repository仓储了。   昨天我发布文章后,有一个网友提出了一个问题,他想的很好,就是如果面向到了Service层,那BaseService中的CURD等基本方法都被注入了,这样会造成太多的代理类,不仅没有必要,甚至还有问题,比如把Update也缓存了

硬核剖析Redis跨机房双向同步的细枝末节

拜拜、爱过 提交于 2020-08-12 18:09:06
作者介绍 Nick, 携程软件技术专家,关注分布式数据存储以及操作系统内核。 在 《携程 Redis 跨 IDC 多向同步实践》 一文曾和大家分享过携程在 Redis 双向同步方面的心得,简单介绍了实现一个 Redis 双向同步系统中可能面临的问题,以及其中一种问题(分布式一致性)的部分处理方案 -- CRDT(Conflict-free ReplicatedData Types)。 本文将进一步阐述在具体设计和落地过程中的一些细节,希望对大家能够有所帮助。包括: <ul class="list-paddingleft-2" style="margin: 0px; padding-right: 0px; padding-left: 30px; box-sizing: border-box; > Cycle Break -- 如何打破盗梦空间的无限循环; Last Write Wins & Vector Clock -- 冲突的解决既简单又复杂; Tomstone -- 忆往昔才能看今朝; GC -- CRDT 取经之路的通天河; Expire -- 一致 or 不一致, 这是个问题。 相信通过对这些问题的描述和解答, 大家对于如何实现一个双向同步的 Redis 会有一幅清晰的构图。 一、Cycle Break —— 如何打破盗梦空间的无限循环 1、复制回环 以下图为例: 假设 A

架构设计 | 缓存管理模式,监控和内存回收策略

不羁岁月 提交于 2020-08-12 17:13:11
本文源码: GitHub·点这里 || GitEE·点这里 一、缓存设计 1、缓存的作用 在业务系统中,查询时最容易出现性能问题的模块,查询面对的数据量大,筛选条件复杂,所以在系统架构中引入缓存层,则是非常必要的,用来缓存热点数据,达到快速响应的目的。 缓存使用的基本原则: 所有缓存数据,必须设置过期时间; 核心业务流程不通过缓存层; 缓存层移除,不影响现有流程; 系统各个端首页数据不实时查询; 报表数据不实时查询加载; 归档数据(定时统计的结果数据)不实时查询; 这里是业务架构中常用的缓存策略,缓存通过牺牲强一致性来提高性能,所以并不是所有的业务都适合用缓存,实际考量都会针对具体的业务,比如用户相关维度的数据修改频率低,会使用缓存,但是用户权限数据(比如:免费次数)会考虑实时校验,缓存层使用的相对较少。 2、缓存设计模式 Cache-Aside模式 业务中最常用的缓存层设计模式,基本实现逻辑和相关概念如下: 缓存命中:直接查询缓存且命中,返回数据; 缓存加载:查询缓存未命中,从数据库中查询数据,获取数据后并加载到缓存; 缓存失效:数据更新写到数据库,操作成功后,让缓存失效,查询时候再重新加载; 缓存穿透:查询数据库不存在的对象,也就不存在缓存层的命中; 缓存击穿:热点key在失效的瞬间,高并发查询这个key,击穿缓存,直接请求数据库; 缓存雪崩:缓存Key大批量到过期时间

如何设计高性能的分布式锁

落爺英雄遲暮 提交于 2020-08-12 15:19:02
什么是分布式锁? ​ 在 JVM 中,在多线程并发的情况下,我们可以使用同步锁或 Lock 锁,保证在同一时间内,只能有一个线程修改共享变量或执行代码块。但现在我们的服务都是基于分布式集群来实现部署的,对于一些共享资源,在分布式环境下使用 Java 锁的方式就失去作用了。 ​ 使用数据库实现一个分布式锁比较简单易懂,直接基于数据库实现就行了,不需要再引入第三方中间件,所以这是很多分布式业务实现分布式锁的首选。但是数据库实现的分布式锁在一定程度上,存在性能瓶颈,所以我推荐使用Redis。 Redis 实现分布式锁 ​ Redis 实现分布式锁的方式,是使用 SETNX+EXPIRE 组合来实现,在 Redis 2.6.12 版本之前,具体实现代码如下: public static boolean tryLock(Jedis jedis, String lockKey, String requestId, int expireTime) { Long result = jedis.setnx(lockKey, requestId);//设置锁 if (result == 1) {//获取锁成功 // 若在这里程序突然崩溃,则无法设置过期时间,将发生死锁 jedis.expire(lockKey, expireTime);//通过过期时间删除锁 return true; } return

工作感受月记202006月

不问归期 提交于 2020-08-12 15:17:37
2020年06月01号 儿童节在家上班陪儿童,又一次由于自己忘记而miss ir。郁闷的开局。 一种不畅快的感受流荡在身体内部。忐忑等待无影踪,待头来,确实空投心思书欲魔。何时可知最后的消息?想知其所以。 今日之收获: 1: 无序的开局,网络情况还可以,工作中没有特殊的事。跟踪icm找到pg更新内容,但目前没有进度。 2: 使用image来部署一个service fabric,尝试复现客户问题,但没有成功,明天继续。 3: 继续分析redis dashboard的案例,查看为什么azure firewall对fqdn全部放行后,redis所列举出来的六个dns地址为什么没有能成功的把数据发送出去呢? 4: redis vm os升级后的影响,这点真的是没有办法发送提前升级,补丁等消息。这里也理解了tam在这里的为难,没有资源可以帮助到他。明天需要和TA讨论一下,tam提到的那个项目。 5: 在健身房锻炼3公里,知道自己需要锻炼一下下肢力量,保护膝盖膝关节。与健身房中的健身教练聊了一会,但是想到自己是偶尔去一下,所以没有加练习,想想还是自己失败。应该加的,为了他们的工作。尊重他人就是尊重自己。 今日关键字: 重,思考问题之重,尊重他人,也同时尊重自己。记住,要尊重。 2020年06月02号 此刻,巨困来袭,但日杂没完,所以如何来记录呢? 今日无新case,处理app

使用redisTemple 设置setnx,同时设置失效时间

孤街浪徒 提交于 2020-08-12 14:44:25
public boolean setNx (String key , String value , Integer time) { //Object obj = null; Boolean obj = false; try { /* redis obj = redisTemplate.execute(new RedisCallback<Object>() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { StringRedisSerializer serializer = new StringRedisSerializer(); Boolean success = connection.setNX(serializer.serialize(key), serializer.serialize(value)); redisTemplate.expire(key, time, TimeUnit.SECONDS); connection.close(); return success; } });*/ //spring-data-redis 包升级到 2.1.x 版本以上 obj = redisTemplate .opsForValue()

终于有人把最适合学习算法的书单找出来了,面试必备!

喜你入骨 提交于 2020-08-12 14:11:21
​​​​​​​ ​ 害,这年头算法真的不好学,但是笔试面试又非常爱考,那咋办呢?我来给你推荐几本算法学习好书吧,都是我当年秋招复习时用的,算法导论什么的都给我吃灰去吧!! 算法书单 ​ 算法图解 黄小斜的推荐语:这本书太适合入门了,特别是对于计算机非科班的我来说,用它来学算法的感觉非常酸爽,首先是图解的方法非常简单易懂,并且这本书里讲的算法都是非常常见和实用的,对你打好算法基础很有帮助! 本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;Kzui近邻算法。 作者简介 Aditya Bhargava,软件工程师,兼具计算机科学和美术方面的教育背景,在adit.io撰写编程方面的博客。 ​ 啊哈算法 黄小斜的推荐语:这本书怎么说呢,算法书里的一股清流,既有入门的算法内容,又有一些比较进阶的算法知识,比如动态规划、DFS和BFS这类算法,这些算法自己学起来真的头大,所以就特别需要别人来讲解,这本书真心把这些复杂的算法讲的很简单易懂了。需要参加算法面试笔试的同学必看! 《啊哈!算法》是一本充满智慧和趣味的算法入门书

工作感受月记202007月

早过忘川 提交于 2020-08-12 11:48:21
2020年07月01号 感触优秀之人至多,高光时刻见人荣耀。但此时的我,如何面临性能评价呢?是不是自己有机会今年工资又比较大的涨幅呢? 全球经济不好的情况下,我也许很难有变动吧。 因回到成都,所以上午休假半天,休息睡觉,把自己变得更有状态。处理手中case,关闭4案例,处理积压事件,明天继续沟通,希望有所收获。 今日晚上写代码,做casebot,一不小心,三个小时过去了。与自己预期把数据都写入DB中差距太大,而且在之前都获取一个cookie的步骤中,耗费了太多精力和时间。会醒这个情况,是最开始对获取的步骤没有记录引起。 7月开始处理未完事项。多啊。业余时间都不够用。 今日关键字: 心细,用心思考面临的问题。好好干事情。 2020年07月02号 胃胀不能入睡,但人难受也很困。最近精神很容易困=_=,这是回到了七月犯困的情况吗? 7点到八点20的打球很舒服。打后脚加精神突然很困。自己的体力不支。每打完一轮就必须休息,不然喘不过气来。困了。 工作只不过是目前自己求生对我一种途径。不要为了他而心力交瘁而且让自己每天都心神不宁。 今日关键字: 心中郁结,后打球,而后深感困顿。 2020年07月03日 工作揪心,生活不易,case难做,工资难升。今年看大家继续成长上升,在财年中各种得奖,心中羡慕啊!同时感到自己的知识,能力的充分不足,无法流畅用英语来表达问题和自己心中想说的话