Redis

利用Redis锁解决高并发问题

為{幸葍}努か 提交于 2021-01-21 07:55:14
这里我们主要利用 Redis 的 setnx 的命令来处理高并发。有个问题,setnx需要配合expire来设置时间,这样就不再是原子性的,还有个更好的办法,使用set来进行锁操作set后面有nx等参数来进行原子操作会更好 setnx 有两个参数。第一个参数表示键。第二个参数表示值。如果当前键不存在,那么会插入当前键,将第二个参数做为值。返回 1 。如果当前键存在,那么会返回 0 。 创建库存表 CREATE TABLE `storage` ( `id` int( 11) unsigned NOT NULL AUTO_INCREMENT, ` number ` int(11) DEFAULT NULL , PRIMARY KEY (`id`) ) ENGINE =InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 设置初始库存为10 创建订单表 CREATE TABLE `order` ( `id` int( 11) unsigned NOT NULL AUTO_INCREMENT, ` number ` int(11) DEFAULT NULL , PRIMARY KEY (`id`) ) ENGINE =InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 测试不用锁的时候 $pdo = new

Redis详解(三)------ redis的六大数据类型详细用法

孤人 提交于 2021-01-21 07:21:18
  我们说 Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。本篇博客我们就将介绍这些数据类型的详细使用以及顺带介绍Redis系统的相关命令用法。    注意:Redis的命令不区分大小写,但是key 严格区分大小写!!! 1、string 数据类型   string 是Redis的最基本的数据类型,可以理解为与 Memcached 一模一样的类型,一个key 对应一个 value。string 类型是二进制安全的,意思是 Redis 的 string 可以包含任何数据,比如图片或者序列化的对象,一个 redis 中字符串 value 最多可以是 512M。 ①、相关命令介绍   string 数据类型在 Redis 中的相关命令:    表格图片引用: http://www.cnblogs.com/xrq730/p/8944539.html (下同)         PS:   ①、上面的 ttl 命令是返回 key 的剩余过期时间,单位为秒。   ②、mset和mget这种批量处理命令,能够极大的提高操作效率。因为一次命令执行所需要的时间=1次网络传输时间+1次命令执行时间,n个命令耗时=n次网络传输时间+n次命令执行时间

Windows 安装PHP-redis扩展

杀马特。学长 韩版系。学妹 提交于 2021-01-21 05:31:39
有没有在Windows上安装了redis但是一直安装不上php-redis扩展的亲呢?来一起学习一波吧!!! 安装之前百度了好大一波呀,楞时没装上。。。 首先查看PHP信息(phpinfo):   PHP Version 5.5.38;   Architecture:x86   Zend Extension Build: API220121212,TS,VC11 重点是:5.5、x86、TS、VC11,   然后下载资源:     https://windows.php.net/downloads/pecl/releases/igbinary/1.2.0/ //找到与你的PHP版本相符的igbinary.dll,根据我的PHP版本我应该使用 php_igbinary-1.2.0- 5.5 -ts-vc11-x86.zip ,注意标红的时PHP的版本号哦,经过多次尝试,不选用这个是不正确的。     https://windows.php.net/downloads/pecl/releases/redis/2.2.7/ //下载php-redis.dll,注意PHP版本号哦。   下载好后把igbinary.dll、 php-redis.dll、 php_redis.pdb放在PHP扩展目录下,在php.ini中加入:      extension=php_igbinary.dll

在Windows下为PHP安装redis扩展

老子叫甜甜 提交于 2021-01-21 05:07:13
在网上找了许多教程, 在Windows下都无法安装 PHP redis 扩展,自己搞了两个小时才终于找到下载的地址,现归纳总结如下。 1.查看自己的PHP版本 echo phpinfo(); PHP 版本信息: PHP logo PHP Version 5.6.15 Compiler MSVC11 (Visual C++ 2012) Architecture x86 Zend Extension Build API220131226,TS,VC11 PHP Extension Build API20131226,TS,VC11 2.根据PHP版本号,编译器版本号和CPU架构, 这里的PHP版本为5.6,X86,VC11 编译的,所以,选下面的扩展版本: 选择php_redis-2.2.5-5.6-ts-vc11-x86.zip和php_igbinary-1.2.1-5.6-ts-vc11-x86.zip 下载地址: 可以根据这两个链接来查找对应的版本: redis : http://windows.php.net/downlo... igbinary: http://windows.php.net/downlo... 3.解压缩后,将php_redis.dll和php_igbinary.dll拷贝至php的ext目录下 4.修改php.ini,在该文件中加入: ; php

Redis连接的客户端(connected_clients)数过高或者不减的问题解决方案

和自甴很熟 提交于 2021-01-21 03:20:14
Redis连接的客户端(connected_clients)数过高或者不减的问题解决方案 参考文章: (1)Redis连接的客户端(connected_clients)数过高或者不减的问题解决方案 (2)https://www.cnblogs.com/hnsongbiao/p/7259291.html 备忘一下。 来源: oschina 链接: https://my.oschina.net/u/4432649/blog/4917009

Oh! Binlog还能这样用之Canal

我怕爱的太早我们不能终老 提交于 2021-01-20 20:41:16
背景 不知道是否你还在为下面的问题而困扰: 当你使用了redis或者其他中间件做缓存的时候,经常发现缓存和数据库的数据不一致,只能通过定时任务或者缓存过期的方式去做一些限制。 当你使用了ES做搜索工具,使用双写的那一套方法,还在为ES和数据库不是一个事务而担忧。 当你需要迁移数据的时候,也还在使用双写的方法,如果是同一个数据库的还好,如果是不同数据库就不能保证事务,那么数据一致性也是个问题,就会写很多的修复Job和检查Job。 这些问题相信在很多同学的业务当中应该都遇到过,也可能因为这些问题常常增加了很多的工作量或者导致一些数据不一致的故障。那么我们怎么才能比较简单的解决这些问题呢? 我们想一想这个问题的本质是什么呢?就是需要保证我们的数据不论在redis还是在es都要和我们的mysql一致,本质上是数据的复制。一想到数据的复制,熟悉Mysql的朋友就会说到:Mysql的主备不也是数据复制吗?如果我们模仿Mysql的主备复制,那我们数据同步那么就会很容易了。 Mysql主从 既然我们可以模仿Mysql的主从复制来完成我们的需求,那么我们需要先了解一下mysql主从的原理,如下图所示: Stpe 1: 作为master的mysql需要在每个事务更新数据完成之前,将该操作记录串行地写入到binlog文件中,存储在本地磁盘中。 Step 2: 在我们的salve服务器中开启一个I/O

Check if redis is running -> node js

狂风中的少年 提交于 2021-01-20 18:11:50
问题 I just wanted to know, at the beginning of my NodeJS process, if Redis is started or not (so users session will be stored or not). Here is what I have for the moment : var session = require('express-session'); var RedisStore = require('connect-redis')(session); var redis = require("redis"); var client = redis.createClient(global.redis.host, global.redis.port); // Check if redis is running var redisIsReady = false; client.on('error', function(err) { redisIsReady = false; console.log('redis is

Check if redis is running -> node js

萝らか妹 提交于 2021-01-20 18:11:26
问题 I just wanted to know, at the beginning of my NodeJS process, if Redis is started or not (so users session will be stored or not). Here is what I have for the moment : var session = require('express-session'); var RedisStore = require('connect-redis')(session); var redis = require("redis"); var client = redis.createClient(global.redis.host, global.redis.port); // Check if redis is running var redisIsReady = false; client.on('error', function(err) { redisIsReady = false; console.log('redis is

教程|ZKEYS公有云业务管理系统(国际版)部署

妖精的绣舞 提交于 2021-01-20 17:36:04
ZKEYS 公有云业务管理系统(国际版)一键部署操作主要分两个部分: Swoole Loader 安装说明 及一键部署。 一、Swoole Loader 安装说明 1. PHP 版本: ( 1 )请使用 PHP 5.6(64位)版本 ( 2 )可打开 php info页面或者 php -v确认版本信息 注意: Swoole Loader不支持Debug版本,请安装非Debug版本的 PHP ,可使用命令 php -i | grep "Debug Build" 查看是否有 Debug Build => no ,如为 yes 则不支持 2.安装和配置Swoole Loader ( 1 )下载 Swoole Loader Windows可使用命令: php -i | find /n "Thread Safety" , Linux 可使用命令: php -i | grep "Thread Safety" 查看线程安全设置,如果显示 Thread Safety => disabled ,请选择非线程安全版本。 请根据 PHP 版本下载 对应版本的 Swoole Loader扩展 。 Windows: PHP 5.6 线程安全版本 PHP 5.6 非线程安全版本 Linux: PHP 5.6 线程安全版本 PHP 5.6 非线程安全版本 ( 2 )安装 Swoole Loader