随笔分类 - Redis
摘要:特性 消息发布者,即publish客户端,无需独占链接,你可以在publish消息的同时,使用同一个redis-client链接进行其他操作 消息订阅者,即subscribe客户端,需要独占链接,即进行subscribe期间,redis-client无法穿插其他操作,此时client以阻塞的方式等待
阅读全文
摘要:redis和memcache还有共享内存都是读取内存的数据,为了测试一下到底效率谁更胜一筹,我在我的Centos虚拟机下做了一次公平的测试。 测试参数 环境:Centos (配置忽略)、语言:PHP、WebServer:Nginx、测试次数:10000、字符类型及长度:字符串(1024) 准备测试
阅读全文
摘要:需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库。 这个业务场景,主要是解决读数据从Redis缓存,一般都是按照下图的流程来进行业务 读取缓存步骤一般没有什么问题,但是一
阅读全文
摘要:1. MySQL持久化数据,Redis只读数据redis在启动之后,从数据库加载数据。读请求:不要求强一致性的读请求,走redis,要求强一致性的直接从mysql读取写请求:数据首先都写到数据库,之后更新redis(先写redis再写mysql,如果写入失败事务回滚会造成redis中存在脏数据)2.
阅读全文
摘要:Redis 在 3.2 版本以后增加了地理位置 GEO 模块,意味着我们可以使用 Redis 来实现摩拜单车「附近的 Mobike」、美团和饿了么「附近的餐馆」这样的功能了。 地图元素的位置数据使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],纬度正负以赤道为界,
阅读全文
摘要:我们平时习惯于使用 Rabbitmq 和 Kafka 作为消息队列中间件,来给应用程序之间增加 异步消息传递功能。这两个中间件都是专业的消息队列中间件,特性之多超出了大多数人的理 解能力。 使用过 Rabbitmq 的同学知道它使用起来有多复杂,发消息之前要创建 Exchange,再创 建 Queu
阅读全文
摘要:为什么要使用分布锁? 什么是锁?在单机多线程环境中,我们经常遇到多个线程访问同一个共享资源(这里需要注意的是:在很多地方,这种资源会称为临界资源,但在今天这篇文章中,我们统一称之为共享资源)的情况。为了维护数据的一致性,我们需要某种机制来保证只有满足某个条件的线程才能访问资源,不满足条件的线程只能等
阅读全文
摘要:在做数据缓存的时候,通常都是把数据从数据库读取出来,然后放入缓存,接下来在缓存的有效期内都是从缓存读取数据减少数据库压力。但是在高并发环境下,就有可能出现问题,比如根据指定格式从redis下拿数据,但是当下key是不存在的,那么就需要往里面写数据,如果多个进程同时请求,会造成数据的二次写入,如果逻辑
阅读全文
摘要:redis的keys命令类似于Mysql的like命令,无非就是模糊匹配相近的字符数据。 KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,最好还是用 Redis 的集合结构(set)来代替,我们在实际生产环境中请求并发比较多的地方
阅读全文
摘要:redis有一个认证方式来保护数据的安全。设置此认证有两种方式,一种是通过配置文件,一个是在redis客户端命令直接设定 一、配置文件(需要重启redis生效) 找到参数 requirepass, 这个就是配置redis访问密码的参数 二、命令方式(不需要重启redis,重启失效) 补充:好像密码中
阅读全文
摘要:ZADD 向有序集合插入一个元素,元素关联一个数值,插入成功返回1,同时集合元素不可以重复, 如果元素已经存在返回 0 待整理...................未完待续
阅读全文
摘要:SADD 将一个或多个member元素加入到集合key当中。(从左侧插入,最后插入的元素在0位置),集合中已经存在TK 则返回false,不存在添加成功 返回true SMEMBERS 返回集合key中的所有成员。 SREM 移除集合key中的一个或多个member元素,不存在的member元素会被
阅读全文
摘要:LIST 头元素和尾元素:头元素指的是列表左端/前端第一个元素,尾元素指的是列表右端/后端第一个元素。举个例子,列表list包含三个元素:x, y, z,其中x是头元素,而z则是尾元素。空列表:指不包含任何元素的列表,Redis将不存在的key也视为空列表。 LPUSH 将一个或多个值value插入
阅读全文
摘要:HSET将哈希表key中的域field的值设为value;如果field是哈希表中的一个新建域,并且值设置成功,返回1;如果哈希表中域field已经存在且旧值已被新值覆盖,返回0。 HGET 返回哈希表key中给定域field的值。当给定域不存在或是给定key不存在时,返回nil。 HMGET 返回
阅读全文
摘要:Key相关操作 TYPE 类型检测,字符串返回string,列表返回 list,set表返回set/zset,hash表返回hash,key不存在返回0 DEL 移除给定的一个或多个key,如果key不存在,则忽略该命令。 RANDOMKEY 从当前数据库中随机返回(不删除)一个key。当数据库不为
阅读全文
摘要:在进行网站设计的时候,有时候会遇到给用户大量发送短信,或者订单系统有大量的日志需要记录,还有做秒杀设计的时候,服务器无法承受这种瞬间的压力,无法正常处理,咱们怎么才能保证系统正常有效的运行呢?这时候我们就要引用消息队列来实现这类的需求,这时候就需要一个中间的系统进行分流和解压。消息队列就是一个中间件
阅读全文
摘要:在博客里之前有过一篇文章是 《PHP结合Redis来限制用户或者IP某个时间段内访问的次数》,这篇文章的思路也是一样的。看下代码吧 OK
阅读全文
摘要:抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。 重点在于第二个问题. 常规写法: 查询出对应商品的库存,看是
阅读全文
摘要:第一步:创建模拟数据表. 第二步:来一个随机生成字符串的函数,模拟用户名与内容. 第三步:在配置完成php_redis扩展的情况下,写一个并发脚本,同时把500条数据放入redis队列。 来用Apache的ab.exe并发测试写入,不懂得怎么用ab的看一下这篇文章:简单模拟一下ab压力测试 测试写入
阅读全文