发布时间:2017-11-01, 18:13:40
| 评论:5
| 分类:PHP
1、简介
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,
2、windows下安装下载地址。下载到的Redis支持32bit和64bit。把文件内容拷贝到需要安装的目录下,比如:D:\dev\redis-2.4.5。
打开一个cmd窗口(
不能关闭),使用cd命令切换到指定目录(D:\dev\redis-2.4.5)运行
redis-server.exe redis.confRun code
Cut to clipboard
。运行以后出现如下界面。
这就说明Redis服务端已经安装成功。
重新打开一个cmd窗口(
不能关闭)(
windows系统环境服务器安装使用Sphinx和coreseek中文分词核心配置uni.lib词典 将SPHINX安装成windows服务程序,这样系统启动时会自行运行sphinx),使用cd命令切换到指定目录(D:\dev\redis-2.4.5)运行
redis-cli.exe -h 127.0.0.1 -p 6379Run code
Cut to clipboard
,其中 127.0.0.1是本地ip,6379是redis服务端的默认端口。运行成功如下图所示。
这样,Redis windows环境下搭建已经完成,
测试:存储一个key为test,value为hello word的字符串,然后获取key值。
正确输出 hell word,
3、PHP中使用下载 dll文件 官方首先把php_redis.dll 和 php_igbinary.dll 放入PHP的ext文件夹,
Non Thread Safe 和 Thread Safe 两个版本
通过phpinfo();
<?php phpinfo(); ?>
查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,
如果是:enabled,一般来说应该是ts版,否则是nts版。Run code
Cut to clipboard
然后在php.ini配置文件里添加如下代码(
可能需要填写完整路径):
extension=php_igbinary.dll
extension=php_redis.dll
extension="D:\UPUPW_NP5.6-1511\UPUPW_NP5.6\PHP5\ext\php_igbinary.dll"
extension="D:\UPUPW_NP5.6-1511\UPUPW_NP5.6\PHP5\ext\php_redis.dll"
Run code
Cut to clipboard
重启web服务器(
可能需要重启服务器)
注意:extension=php_igbinary.dll一定要放在extension=php_redis.dll的前面,否则此扩展不会生效
4、PHP中使用<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$redis->set('test','hello redis');
echo $redis->get('test');
?>Run code
Cut to clipboard
输出 hello redis 成功!
发布时间:2018-08-23, 14:58:09
| 评论:0
| 分类:PHP
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis支持的数据类型有 Stirng(字符串), List(列表), Hash(字典), Set(集合), Sorted Set(有序集合);
redis版本是Redis 2.6.12 系统是在Windows+Apache2.4+php5.6
连接//实例化redis
$redis = new Redis();
//连接
$redis->connect('127.0.0.1', 6379);
//检测是否连接成功
echo "Server is running: " . $redis->ping();
// 输出结果 Server is running: +PONGRun code
Cut to clipboard
Strng(字符串)// 设置一个字符串的值
$redis->set('cat', 111);
//获取一个字符串的值
echo $redis->get('cat'); // 111
// 重复set
$redis->set('cat', 222);
echo $redis->get('cat'); // 222Run code
Cut to clipboard
List(列表)//列表
//存储数据到列表中
$redis->lpush('list', 'html');
$redis->lpush('list', 'css');
$redis->lpush('list', 'php');
//获取列表中所有的值
$list = $redis->lrange('list', 0, -1);
print_r($list);echo '<br>';
//从右侧加入一个
$redis->rpush('list', 'mysql');
$list = $redis->lrange('list', 0, -1);
print_r($list);echo '<br>';
//从左侧弹出一个
$redis->lpop('list');
$list = $redis->lrange('list', 0, -1);
print_r($list);echo '<br>';
//从右侧弹出一个
$redis->rpop('list');
$list = $redis->lrange('list', 0, -1);
print_r($list);echo '<br>';
// 结果
// Array ( [0] => php [1] => css [2] => html )
// Array ( [0] => php [1] => css [2] => html [3] => mysql )
// Array ( [0] => css [1] => html [2] => mysql )
// Array ( [0] => css [1] => html )Run code
Cut to clipboard
<?php
//实例化redis
$redis = new Redis();
//连接
$redis->connect('127.0.0.1', 6379);
//列表
//存储数据到列表中
$redis->lpush('list', 'html');
$redis->lpush('list', 'css');
$redis->lpush('list', 'php');
$redis->lpush('list', 'mysql');
$redis->lpush('list', 'javascript');
$redis->lpush('list', 'ajax');
//获取列表中所有的值
$list = $redis->lrange('list', 0, -1);
print_r($list);echo '<br>';
//获取列表的长度
$length = $redis->lsize('list');
echo $length;echo '<br>';
//返回列表key中index位置的值
echo $redis->lget('list', 2);echo '<br>';
echo $redis->lindex('list', 2);echo '<br>';
//设置列表中index位置的值
echo $redis->lset('list', 2, 'linux');echo '<br>';
$list = $redis->lrange('list', 0, -1);
print_r($list);echo '<br>';
//返回key中从start到end位置间的元素
$list = $redis->lrange('list', 0, 2);
print_r($list);echo '<br>';
$list = $redis->lgetrange('list', 0, 2);
print_r($list);echo '<br>';
//截取链表中start到end的元素
//截取列表后列表发生变化,列表保留截取的元素,其余的删除
$list = $redis->ltrim('list', 0, 1);
print_r($list);echo '<br>';
$list = $redis->lrange('list', 0, -1);
print_r($list);echo '<br>';
// 结果
// Array ( [0] => ajax [1] => javascript [2] => mysql [3] => php [4] => css [5] => html )
// 6
// mysql
// mysql
// 1
// Array ( [0] => ajax [1] => javascript [2] => linux [3] => php [4] => css [5] => html )
// Array ( [0] => ajax [1] => javascript [2] => linux )
// Array ( [0] => ajax [1] => javascript [2] => linux )
// 1
// Array ( [0] => ajax [1] => javascript )Run code
Cut to clipboard
<?php
//实例化redis
$redis = new Redis();
//连接
$redis->connect('127.0.0.1', 6379);
//列表
//存储数据到列表中
$redis->lpush('list', 'html');
$redis->lpush('list', 'html');
$redis->lpush('list', 'html');
$redis->lpush('list', 'css');
$redis->lpush('list', 'php');
$redis->lpush('list', 'mysql');
$redis->lpush('list', 'javascript');
$redis->lpush('list', 'html');
$redis->lpush('list', 'html');
$redis->lpush('list', 'html');
$redis->lpush('list', 'ajax');
//获取列表中所有的值
$list = $redis->lrange('list', 0, -1);
print_r($list);echo '<br>';
//删除列表中count个值为value的元素
//从左向右删
$redis->lrem('list', 'html', 2);
$list = $redis->lrange('list', 0, -1);
print_r($list);echo '<br>';
//从右向左删
$redis->lrem('list', 'html', -2);
$list = $redis->lrange('list', 0, -1);
print_r($list);echo '<br>';
//删除所有
$redis->lrem('list', 'html', 0);
$list = $redis->lrange('list', 0, -1);
print_r($list);echo '<br>';
// 结果
// Array ( [0] => ajax [1] => html [2] => html [3] => html [4] => javascript [5] => mysql [6] => php [7] => css [8] => html [9] => html [10] => html )
// Array ( [0] => ajax [1] => html [2] => javascript [3] => mysql [4] => php [5] => css [6] => html [7] => html [8] => html )
// Array ( [0] => ajax [1] => html [2] => javascript [3] => mysql [4] => php [5] => css [6] => html )
// Array ( [0] => ajax [1] => javascript [2] => mysql [3] => php [4] => css )Run code
Cut to clipboard
Hash(字典)<?php
//实例化redis
$redis = new Redis();
//连接
$redis->connect('127.0.0.1', 6379);
//字典
//给hash表中某个key设置value
//如果没有则设置成功,返回1,如果存在会替换原有的值,返回0,失败返回0
echo $redis->hset('hash', 'cat', 'cat');echo '<br>';
echo $redis->hset('hash', 'cat', 'cat');echo '<br>';
echo $redis->hset('hash', 'cat', 'cat1');echo '<br>';
echo $redis->hset('hash', 'dog', 'dog');echo '<br>';
echo $redis->hset('hash', 'bird', 'bird');echo '<br>';
echo $redis->hset('hash', 'monkey', 'monkey');echo '<br>';
//获取hash中某个key的值
echo $redis->hget('hash', 'cat');echo '<br>';
//获取hash中所有的keys
$arr = $redis->hkeys('hash');
print_r($arr);echo '<br>';
//获取hash中所有的值 顺序是随机的
$arr = $redis->hvals('hash');
print_r($arr);echo '<br>';
//获取一个hash中所有的key和value 顺序是随机的
$arr = $redis->hgetall('hash');
print_r($arr);echo '<br>';
//获取hash中key的数量
echo $redis->hlen('hash');echo '<br>';
//删除hash中一个key 如果表不存在或key不存在则返回false
echo $redis->hdel('hash', 'dog');echo '<br>';
var_dump($redis->hdel('hash', 'rabbit'));echo '<br>';
// 结果
// 1
// 0
// 0
// 1
// 1
// 1
// cat1
// Array ( [0] => cat [1] => dog [2] => bird [3] => monkey )
// Array ( [0] => cat1 [1] => dog [2] => bird [3] => monkey )
// Array ( [cat] => cat1 [dog] => dog [bird] => bird [monkey] => monkey )
// 4
// 1
// int(0)Run code
Cut to clipboard
<?php
//实例化redis
$redis = new Redis();
//连接
$redis->connect('127.0.0.1', 6379);
//字典
//批量设置多个key的值
$arr = [1=>1, 2=>2, 3=>3, 4=>4, 5=>5];
$redis->hmset('hash', $arr);
print_r($redis->hgetall('hash'));echo '<br>';
// 批量获得额多个key的值
$arr = [1, 2, 3, 5];
$hash = $redis->hmget('hash', $arr);
print_r($hash);echo '<br>';
//检测hash中某个key知否存在
echo $redis->hexists('hash', '1');echo '<br>';
var_dump($redis->hexists('hash', 'cat'));echo '<br>';
print_r($redis->hgetall('hash'));echo '<br>';
//给hash表中key增加一个整数值
$redis->hincrby('hash', '1', 1);
print_r($redis->hgetall('hash'));echo '<br>';
//给hash中的某个key增加一个浮点值
$redis->hincrbyfloat('hash', 2, 1.3);
print_r($redis->hgetall('hash'));echo '<br>';
//结果
// Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 )
// Array ( [1] => 1 [2] => 2 [3] => 3 [5] => 5 )
// 1
// bool(false)
// Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 )
// Array ( [1] => 2 [2] => 2 [3] => 3 [4] => 4 [5] => 5 )
// Array ( [1] => 2 [2] => 3.3 [3] => 3 [4] => 4 [5] => 5 )Run code
Cut to clipboard
Set(集合)<?php
//实例化redis
$redis = new Redis();
//连接
$redis->connect('127.0.0.1', 6379);
//集合
// 添加一个元素
echo $redis->sadd('set', 'cat');echo '<br>';
echo $redis->sadd('set', 'cat');echo '<br>';
echo $redis->sadd('set', 'dog');echo '<br>';
echo $redis->sadd('set', 'rabbit');echo '<br>';
echo $redis->sadd('set', 'bear');echo '<br>';
echo $redis->sadd('set', 'horse');echo '<br>';
// 查看集合中所有的元素
$set = $redis->smembers('set');
print_r($set);echo '<br>';
//删除集合中的value
echo $redis->srem('set', 'cat');echo '<br>';
var_dump($redis->srem('set', 'bird'));echo '<br>';
$set = $redis->smembers('set');
print_r($set);echo '<br>';
//判断元素是否是set的成员
var_dump($redis->sismember('set', 'dog'));echo '<br>';
var_dump($redis->sismember('set', 'bird'));echo '<br>';
//查看集合中成员的数量
echo $redis->scard('set');echo '<br>';
//移除并返回集合中的一个随机元素(返回被移除的元素)
echo $redis->spop('set');echo '<br>';
print_r($redis->smembers('set'));echo '<br>';
// 结果
// 1
// 0
// 1
// 1
// 1
// 1
// Array ( [0] => rabbit [1] => cat [2] => bear [3] => dog [4] => horse )
// 1
// int(0)
// Array ( [0] => dog [1] => rabbit [2] => horse [3] => bear )
// bool(true)
// bool(false)
// 4
// bear
// Array ( [0] => dog [1] => rabbit [2] => horse )Run code
Cut to clipboard
<?php
//实例化redis
$redis = new Redis();
//连接
$redis->connect('127.0.0.1', 6379);
//集合
$redis->sadd('set', 'horse');
$redis->sadd('set', 'cat');
$redis->sadd('set', 'dog');
$redis->sadd('set', 'bird');
$redis->sadd('set2', 'fish');
$redis->sadd('set2', 'dog');
$redis->sadd('set2', 'bird');
print_r($redis->smembers('set'));echo '<br>';
print_r($redis->smembers('set2'));echo '<br>';
//返回集合的交集
print_r($redis->sinter('set', 'set2'));echo '<br>';
//执行交集操作 并结果放到一个集合中
$redis->sinterstore('output', 'set', 'set2');
print_r($redis->smembers('output'));echo '<br>';
//返回集合的并集
print_r($redis->sunion('set', 'set2'));echo '<br>';
//执行并集操作 并结果放到一个集合中
$redis->sunionstore('output', 'set', 'set2');
print_r($redis->smembers('output'));echo '<br>';
//返回集合的差集
print_r($redis->sdiff('set', 'set2'));echo '<br>';
//执行差集操作 并结果放到一个集合中
$redis->sdiffstore('output', 'set', 'set2');
print_r($redis->smembers('output'));echo '<br>';
// 结果
// Array ( [0] => cat [1] => dog [2] => bird [3] => horse )
// Array ( [0] => bird [1] => dog [2] => fish )
// Array ( [0] => bird [1] => dog )
// Array ( [0] => dog [1] => bird )
// Array ( [0] => cat [1] => dog [2] => bird [3] => horse [4] => fish )
// Array ( [0] => cat [1] => dog [2] => bird [3] => horse [4] => fish )
// Array ( [0] => horse [1] => cat )
// Array ( [0] => horse [1] => cat )Run code
Cut to clipboard
Sorted Set(有序集合)<?php
//实例化redis
$redis = new Redis();
//连接
$redis->connect('127.0.0.1', 6379);
//有序集合
//添加元素
echo $redis->zadd('set', 1, 'cat');echo '<br>';
echo $redis->zadd('set', 2, 'dog');echo '<br>';
echo $redis->zadd('set', 3, 'fish');echo '<br>';
echo $redis->zadd('set', 4, 'dog');echo '<br>';
echo $redis->zadd('set', 4, 'bird');echo '<br>';
//返回集合中的所有元素
print_r($redis->zrange('set', 0, -1));echo '<br>';
print_r($redis->zrange('set', 0, -1, true));echo '<br>';
//返回元素的score值
echo $redis->zscore('set', 'dog');echo '<br>';
//返回存储的个数
echo $redis->zcard('set');echo '<br>';
//删除指定成员
$redis->zrem('set', 'cat');
print_r($redis->zrange('set', 0, -1));echo '<br>';
//返回集合中介于min和max之间的值的个数
print_r($redis->zcount('set', 3, 5));echo '<br>';
//返回有序集合中score介于min和max之间的值
print_r($redis->zrangebyscore('set', 3, 5));echo '<br>';
print_r($redis->zrangebyscore('set', 3, 5, ['withscores'=>true]));echo '<br>';
//返回集合中指定区间内所有的值
print_r($redis->zrevrange('set', 1, 2));echo '<br>';
print_r($redis->zrevrange('set', 1, 2, true));echo '<br>';
//有序集合中指定值的socre增加
echo $redis->zscore('set', 'dog');echo '<br>';
$redis->zincrby('set', 2, 'dog');
echo $redis->zscore('set', 'dog');echo '<br>';
//移除score值介于min和max之间的元素
print_r($redis->zrange('set', 0, -1, true));echo '<br>';
print_r($redis->zremrangebyscore('set', 3, 4));echo '<br>';
print_r($redis->zrange('set', 0, -1, true));echo '<br>';
//结果
// 1
// 0
// 0
// 0
// 0
// Array ( [0] => cat [1] => fish [2] => bird [3] => dog )
// Array ( [cat] => 1 [fish] => 3 [bird] => 4 [dog] => 4 )
// 4
// 4
// Array ( [0] => fish [1] => bird [2] => dog )
// 3
// Array ( [0] => fish [1] => bird [2] => dog )
// Array ( [fish] => 3 [bird] => 4 [dog] => 4 )
// Array ( [0] => bird [1] => fish )
// Array ( [bird] => 4 [fish] => 3 )
// 4
// 6
// Array ( [fish] => 3 [bird] => 4 [dog] => 6 )
// 2
// Array ( [dog] => 6 )Run code
Cut to clipboard
发布时间:2018-08-29, 09:57:50
分类:PHP
Redis 安装Window 下安装下载地址:
https://github.com/dmajkic/redis/downloads。
下载到的Redis支持32bit和64bit。根据自己实际情况选择,将64bit的内容cp到自定义盘符安装目录取名redis。 如 C:\reids
打开一个cmd窗口 使用cd命令切换目录到 C:\redis 运行
redis-server.exe redis.confRun code
Cut to clipboard
。Windows PowerShell
./redis-server.exe redis.confRun code
Cut to clipboard
前面加 ./
如果想方便的话,可以把redis的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个redis.conf可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:
这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。
切换到redis目录下运行
redis-cli.exe -h 127.0.0.1 -p 6379Run code
Cut to clipboard
Windows PowerShell 前面加 ./ 。
设置键值对 set myKey abc
取出键值对 get myKey
Linux 下安装下载地址:
http://www.redis.net.cn/download/,下载最新文档版本。
本教程使用的最新文档版本为 2.8.17,下载并安装:
$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ makeRun code
Cut to clipboard
make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli
下面启动redis服务.
$ ./redis-serverRun code
Cut to clipboard
注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。
$ ./redis-server redis.confRun code
Cut to clipboard
redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。
启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:
$ ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"Run code
Cut to clipboard
Ubuntu 下安装在 Ubuntu 系统安装 Redi 可以使用以下命令:
$sudo apt-get update
$sudo apt-get install redis-serverRun code
Cut to clipboard
启动 Redis
$redis-serverRun code
Cut to clipboard
查看 redis 是否启动?
$redis-cliRun code
Cut to clipboard
以上命令将打开以下终端:
redis 127.0.0.1:6379>Run code
Cut to clipboard
127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。
redis 127.0.0.1:6379> ping
PONGRun code
Cut to clipboard
以上说明我们已经成功安装了redis。
Redis 安装_redis教程php处理redis connect 实例连接到一个Redis描述:实例连接到一个Redis.
参数:host: string,port: int
返回值:BOOL 成功返回:TRUE;失败返回:FALSE
示例:
<?php
$redis = new redis();
$result = $redis->connect('127.0.0.1', 6379);
var_dump($result); //结果:bool(true) Run code
Cut to clipboard
set 设置key和value的值描述:设置key和value的值
参数:Key Value
返回值:BOOL 成功返回:TRUE;失败返回:FALSE
示例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$result = $redis->set('test',"11111111111");
var_dump($result); //结果:bool(true) Run code
Cut to clipboard
get 获取有关指定键的值描述:获取有关指定键的值
参数:key
返回值:string或BOOL 如果键不存在,则返回 FALSE。否则,返回指定键对应的value值。
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$result = $redis->get('test');
var_dump($result); //结果:string(11) "11111111111" Run code
Cut to clipboard
delete 删除指定的键描述:删除指定的键
参数:一个键,或不确定数目的参数,每一个关键的数组:key1 key2 key3 … keyN
返回值:删除的项数
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test',"1111111111111");
echo $redis->get('test'); //结果:1111111111111
$redis->delete('test');
var_dump($redis->get('test')); //结果:bool(false)Run code
Cut to clipboard
setnx 如果在数据库中不存在该键,设置关键值参数描述:如果在数据库中不存在该键,设置关键值参数
参数:key value
返回值:BOOL 成功返回:TRUE;失败返回:FALSE
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test',"1111111111111");
$redis->setnx('test',"22222222");
echo $redis->get('test'); //结果:1111111111111
$redis->delete('test');
$redis->setnx('test',"22222222");
echo $redis->get('test'); //结果:22222222 Run code
Cut to clipboard
exists 验证指定的键是否存在描述:验证指定的键是否存在
参数key
返回值:Bool 成功返回:TRUE;失败返回:FALSE
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test',"1111111111111");
var_dump($redis->exists('test')); //结果:bool(true) Run code
Cut to clipboard
incr 数字递增存储键值键描述:数字递增存储键值键.
参数:key value:将被添加到键的值
返回值:INT the new value
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test',"123");
var_dump($redis->incr("test")); //结果:int(124)
var_dump($redis->incr("test")); //结果:int(125) Run code
Cut to clipboard
decr 数字递减存储键值描述:数字递减存储键值。
参数:key value:将被添加到键的值
返回值:INT the new value
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test',"123");
var_dump($redis->decr("test")); //结果:int(122)
var_dump($redis->decr("test")); //结果:int(121) Run code
Cut to clipboard
getMultiple 取得所有指定键的值描述:取得所有指定键的值。如果一个或多个键不存在,该数组中该键的值为假
参数:其中包含键值的列表数组
返回值:返回包含所有键的值的数组
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test1',"1");
$redis->set('test2',"2");
$result = $redis->getMultiple(array('test1','test2'));
print_r($result); //结果:Array ( [0] => 1 [1] => 2 ) Run code
Cut to clipboard
lpush 由列表头部添加字符串值描述:由列表头部添加字符串值。如果不存在该键则创建该列表。如果该键存在,而且不是一个列表,返回FALSE。
参数:key,value
返回值:成功返回数组长度,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
var_dump($redis->lpush("test","111")); //结果:int(1)
var_dump($redis->lpush("test","222")); //结果:int(2) Run code
Cut to clipboard
rpush 由列表尾部添加字符串值描述:由列表尾部添加字符串值。如果不存在该键则创建该列表。如果该键存在,而且不是一个列表,返回FALSE。
参数:key,value
返回值:成功返回数组长度,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
var_dump($redis->lpush("test","111")); //结果:int(1)
var_dump($redis->lpush("test","222")); //结果:int(2)
var_dump($redis->rpush("test","333")); //结果:int(3)
var_dump($redis->rpush("test","444")); //结果:int(4) Run code
Cut to clipboard
lpop 返回和移除列表的第一个元素描述:返回和移除列表的第一个元素
参数:key
返回值:成功返回第一个元素的值 ,失败返回false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->lpush("test","111");
$redis->lpush("test","222");
$redis->rpush("test","333");
$redis->rpush("test","444");
var_dump($redis->lpop("test")); //结果:string(3) "222" Run code
Cut to clipboard
lsize llen 返回的列表的长度描述:返回的列表的长度。
如果列表不存在或为空,该命令返回0。如果该键不是列表,该命令返回FALSE。
参数:Key
返回值:成功返回数组长度,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->lpush("test","111");
$redis->lpush("test","222");
$redis->rpush("test","333");
$redis->rpush("test","444");
var_dump($redis->lsize("test")); //结果:int(4) Run code
Cut to clipboard
lget 返回指定键存储在列表中指定的元素描述:返回指定键存储在列表中指定的元素。 0第一个元素,1第二个… -1最后一个元素,-2的倒数第二…错误的索引或键不指向列表则返回FALSE。
参数:key index
返回值:成功返回指定元素的值,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->lpush("test","111");
$redis->lpush("test","222");
$redis->rpush("test","333");
$redis->rpush("test","444");
var_dump($redis->lget("test",3)); //结果:string(3) "444" Run code
Cut to clipboard
lset 为列表指定的索引赋新的值描述:为列表指定的索引赋新的值,若不存在该索引返回false.
参数:key index value
返回值:成功返回true,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->lpush("test","111");
$redis->lpush("test","222");
var_dump($redis->lget("test",1)); //结果:string(3) "111"
var_dump($redis->lset("test",1,"333")); //结果:bool(true)
var_dump($redis->lget("test",1)); //结果:string(3) "333"Run code
Cut to clipboard
lgetrange 返回在该区域中的指定键列表中开始到结束存储的指定元素描述:返回在该区域中的指定键列表中开始到结束存储的指定元素,lGetRange(key, start, end)。0第一个元素,1第二个元素… -1最后一个元素,-2的倒数第二…
参数:key start end
返回值:成功返回查找的值,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->lpush("test","111");
$redis->lpush("test","222");
print_r($redis->lgetrange("test",0,-1)); //结果:Array ( [0] => 222 [1] => 111 )Run code
Cut to clipboard
lremove 从列表中从头部开始移除count个匹配的值描述:从列表中从头部开始移除count个匹配的值。如果count为零,所有匹配的元素都被删除。如果count是负数,内容从尾部开始删除。
参数:key count value
返回值:成功返回删除的个数,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->lpush('test','a');
$redis->lpush('test','b');
$redis->lpush('test','c');
$redis->rpush('test','a');
print_r($redis->lgetrange('test', 0, -1)); //结果:Array ( [0] => c [1] => b [2] => a [3] => a )
var_dump($redis->lremove('test','a',2)); //结果:int(2)
print_r($redis->lgetrange('test', 0, -1)); //结果:Array ( [0] => c [1] => b ) Run code
Cut to clipboard
sadd 为一个Key添加一个值描述:为一个Key添加一个值。如果这个值已经在这个Key中,则返回FALSE。
参数:key value
返回值:成功返回true,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
var_dump($redis->sadd('test','111')); //结果:bool(true)
var_dump($redis->sadd('test','333')); //结果:bool(true)
print_r($redis->sort('test')); //结果:Array ( [0] => 111 [1] => 333 )Run code
Cut to clipboard
sremove 删除Key中指定的value值描述:删除Key中指定的value值
参数:key member
返回值:true or false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd('test','111');
$redis->sadd('test','333');
$redis->sremove('test','111');
print_r($redis->sort('test')); //结果:Array ( [0] => 333 ) Run code
Cut to clipboard
smove 将Key1中的value移动到Key2中描述:将Key1中的value移动到Key2中
参数:srcKey dstKey member
返回值:true or false
范例
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->delete('test1');
$redis->sadd('test','111');
$redis->sadd('test','333');
$redis->sadd('test1','222');
$redis->sadd('test1','444');
$redis->smove('test',"test1",'111');
print_r($redis->sort('test1')); //结果:Array ( [0] => 111 [1] => 222 [2] => 444 ) Run code
Cut to clipboard
scontains 检查集合中是否存在指定的值描述:检查集合中是否存在指定的值。
参数:key value
返回值:true or false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd('test','111');
$redis->sadd('test','112');
$redis->sadd('test','113');
var_dump($redis->scontains('test', '111')); //结果:bool(true) Run code
Cut to clipboard
ssize 返回集合中存储值的数量描述:返回集合中存储值的数量
参数:key
返回值:成功返回数组个数,失败0
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd('test','111');
$redis->sadd('test','112');
echo $redis->ssize('test'); //结果:2 Run code
Cut to clipboard
spop 随机移除并返回key中的一个值描述:随机移除并返回key中的一个值
参数:key
返回值:成功返回删除的值,失败false
范例
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
var_dump($redis->spop("test")); //结果:string(3) "333" Run code
Cut to clipboard
sinter 返回一个所有指定键的交集描述:返回一个所有指定键的交集。如果只指定一个键,那么这个命令生成这个集合的成员。如果不存在某个键,则返回FALSE。
参数:key1, key2, keyN
返回值:成功返回数组交集,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
$redis->sadd("test1","111");
$redis->sadd("test1","444");
var_dump($redis->sinter("test","test1")); //结果:array(1) { [0]=> string(3) "111" } Run code
Cut to clipboard
sinterstore 执行sInter命令并把结果储存到新建的变量中描述:执行sInter命令并把结果储存到新建的变量中。
参数:
Key: dstkey, the key to store the diff into.
Keys: key1, key2… keyN. key1..keyN are intersected as in sInter.
返回值:成功返回,交集的个数,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
$redis->sadd("test1","111");
$redis->sadd("test1","444");
var_dump($redis->sinterstore('new',"test","test1")); //结果:int(1)
var_dump($redis->smembers('new')); //结果:array(1) { [0]=> string(3) "111" } Run code
Cut to clipboard
sunion 返回一个所有指定键的并集描述:返回一个所有指定键的并集
参数:Keys: key1, key2, … , keyN
返回值:成功返回合并后的集,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
$redis->sadd("test1","111");
$redis->sadd("test1","444");
print_r($redis->sunion("test","test1")); //结果:Array ( [0] => 111 [1] => 222 [2] => 333 [3] => 444 ) Run code
Cut to clipboard
sunionstore 执行sunion命令并把结果储存到新建的变量中描述:执行sunion命令并把结果储存到新建的变量中。
参数:
Key: dstkey, the key to store the diff into.
Keys: key1, key2… keyN. key1..keyN are intersected as in sInter.
返回值:成功返回,交集的个数,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
$redis->sadd("test1","111");
$redis->sadd("test1","444");
var_dump($redis->sinterstore('new',"test","test1")); //结果:int(4)
print_r($redis->smembers('new')); //结果:Array ( [0] => 111 [1] => 222 [2] => 333 [3] => 444 ) Run code
Cut to clipboard
sdiff 返回第一个集合中存在并在其他所有集合中不存在的结果描述:返回第一个集合中存在并在其他所有集合中不存在的结果
参数:Keys: key1, key2, … , keyN: Any number of keys corresponding to sets in redis.
返回值:成功返回数组,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
$redis->sadd("test1","111");
$redis->sadd("test1","444");
print_r($redis->sdiff("test","test1")); //结果:Array ( [0] => 222 [1] => 333 ) Run code
Cut to clipboard
sdiffstore 执行sdiff命令并把结果储存到新建的变量中描述:执行sdiff命令并把结果储存到新建的变量中。
参数:
Key: dstkey, the key to store the diff into.
Keys: key1, key2, … , keyN: Any number of keys corresponding to sets in redis
返回值:成功返回数字,失败false
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
$redis->sadd("test1","111");
$redis->sadd("test1","444");
var_dump($redis->sdiffstore('new',"test","test1")); //结果:int(2)
print_r($redis->smembers('new')); //结果:Array ( [0] => 222 [1] => 333 ) Run code
Cut to clipboard
smembers sgetmembers 返回集合的内容描述:返回集合的内容
参数:Key: key
返回值:An array of elements, the contents of the set.
范例:
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
print_r($redis->smembers('test')); //结果:Array ( [0] => 111 [1] => 222 ) Run code
Cut to clipboard
发布时间:2018-08-31, 19:59:41
| 评论:12
| 分类:PHP
<?php
error_reporting(E_ALL); //E_ALL
function cache_shutdown_error() {
$_error = error_get_last();
if ($_error && in_array($_error['type'], array(1, 4, 16, 64, 256, 4096, E_ALL))) {
echo '<font color=red>你的代码出错了:</font></br>';
echo '致命错误:' . $_error['message'] . '</br>';
echo '文件:' . $_error['file'] . '</br>';
echo '在第' . $_error['line'] . '行</br>';
}
}
register_shutdown_function("cache_shutdown_error");
function dump($arr){
echo '<pre>';
var_dump($arr);
echo '</pre>';
}
function glog($file,$content,$file_type='.txt'){
//return false;
$file=$file?$file:date('Y-m-d');
$content=$content?$content:date('Y-m-d h:m:s');
$f=file_put_contents($file.$file_type,$content.PHP_EOL,FILE_APPEND);
return $f;
}
//写入数据
function tin($login){
global $dbh;
/*添加*/
//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";
$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$login,':password'=>'123'));
$c_id=$stmt->rowCount();
return $c_id;
try {
$dbh->beginTransaction(); // 开启一个事务
$sql = "SELECT * FROM `user`";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$slogin));
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(empty($row)){
/*添加*/
//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";
$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$slogin,':password'=>'123'));
$c_id=$dbh->lastinsertid();
}else{
foreach($row as $k=>$v){
if($v['login']!=$slogin){
/*添加*/
//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";
$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$slogin,':password'=>'123'));
$c_id=$dbh->lastinsertid();
}
}
}
$dbh->commit();
} catch (PDOException $e) {
$dbh->rollback(); // 执行失败,事务回滚
glog('',$e->getMessage());
}
return $c_id;
}
//ab -n 50000 -c 100 http://oc.com/r.php
//select login,count(*) as count from user group by login having count>1;
Global $redis,$dbh;
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
/*$redis->delete('test');
$redis->lpush("test","111");
$redis->lpush("test","222");
print_r($redis->lgetrange("test",0,-1)); //结果:Array ( [0] => 222 [1] => 111 )*/
$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'DRsXT5ZJ6Oi55LPQ');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$dbh->setAttribute(PDO::ATTR_AUTOCOMMIT, false);//关闭自动提交
$dbh->exec('set names utf8');
try {
$now = time();
//限流
$qps_num=$redis->incr("qps_num");
$redis->expireAt('qps_num', $now + 1);
if($qps_num>100){
//echo '限流'.$qps_num;
//glog('','限流'.$qps_num);
return false;
}
//dump($redis->lgetrange("test",0,-1));exit;
//$login=date('s',time());
//$redis->delete('login_set');exit;
//$redis->expireAt('x', $now + 3); // x will disappear in 3 seconds.
$s_x=$redis->setnx('x',1); //加一个标志位
$redis->expireAt('x', $now + 60); //后于集合过期
if(!$s_x){
//glog('','请排队');
return false;
}
//事务 写在前面 意外退出 ?没有提交 commit 不回滚?
$dbh->beginTransaction(); // 开启一个事务
//$set = $redis->smembers('login_set');
//dump($set);exit;
//echo $redis->ttl('login_set');exit;
$login_set_num=$redis->sCard('login_set'); //返回SET容器的成员数
//echo $login_set_num;exit;
if(!$login_set_num){
glog('','查询');
//查询 缓存数据 假设字段login唯一
$sql = 'SELECT login FROM user';
$stmt = $dbh->prepare($sql);
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
//多个成员元素加入到集合中 注意:在Redis2.4版本以前, SADD 只接受单个成员值
foreach($row as $k=>$v){
$redis->sAdd('login_set',$v);
}
unset($row,$k,$v);
}
//模拟生成插入值 login
static $login;
$login=rand(100,9999);
//检查是否成员 是已经存在数据库 否录入
//$login_set_is=$redis->sIsMember('login_set',$login);
$login_set_is=$redis->sAdd('login_set',$login); //设计修改操作 才是原子性?
if($login_set_is){
$in_id=tin($login);
//if($in_id) $redis->sAdd('login_set',$login); //插入成功 加入集合缓存
}else glog('','已经存在-'.$login);
$redis->expireAt('login_set', $now + 30);
//glog('','ttl-'.$redis->ttl('login_set'));
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
glog('',"Failed: " . $e->getMessage());
$redis->sRem('login_set', $login);
}finally{
}
$redis->delete('x');
exit;
//防止重复写入
$hnum=$redis->incr('num');
//glog('',$hnum);
$oldstr=$redis->get('login');
if($hnum>50 || ($oldstr && $oldstr==$login)){
$redis->set('num',-99);
exit;//已经存在
}else if($hnum>0){
$redis->set('login',$login);
if(tin($login)) glog('','incr22-'.$login.'-'.$oldstr);
else glog('','EE-incr22-'.$login.'-'.$oldstr);
}
exit;
$tadd=$redis->rpush("test",$login);
while(true){
try{
$slogin = $redis->BLPOP('test',1);
if(!$slogin){
break;
}
//var_dump($value)."\n";
if(tin($slogin)) glog('','incr22-'.$login.'-'.$slogin);
else glog('','EE-incr22-'.$login.'-'.$slogin);
/*
* 利用$value进行逻辑和数据处理
*/
}catch(Exception $e){
glog('',$e->getMessage());
}
}
exit;
//$tadd=$redis->rpush("test",$login);
//exit;
//$gnum=$redis->flushall();
$gnum=$redis->get('gnum');
if(!$gnum){
$redis->set('gnum','1');
if(tin($login)) glog('','rob_result_ok-'.$login);
else glog('','rob_result_ok-E-'.$login);
$redis->delete('gnum');
}else glog('','rob_result_EE-'.time());
exit;
$redis->incr('gnum');
$gnum=$redis->get('gnum');
$redis->watch("gnum");
$redis->multi();
if(tin($login)) glog('','rob_result_ok-'.$login);
else glog('','rob_result_ok-E-'.$login);
//$redis->set('sdf',1);
$rob_result=$redis->exec();
//dump($rob_result);
if($rob_result=='nil'){
$tadd=$redis->rpush("test",$login);
if($tadd) glog('','rob_result_E-'.$login);
else glog('','rob_result_E-_EL'.$login);
$redis->unwatch("gnum");
}
exit;
//$redis->delete('gnum test');exit;
$tadd=$redis->rpush("test",$login);
//$redis->watch("gnum");
//$redis->multi();
while(true){
try{
$slogin = $redis->LPOP('test');
if(!$slogin){
break;
}
//var_dump($value)."\n";
if(tin($slogin)) glog('','incr22-'.$login.'-'.$slogin);
else glog('','E-incr22-'.$login);
/*
* 利用$value进行逻辑和数据处理
*/
}catch(Exception $e){
glog('',$e->getMessage());
}
}
//$rob_result = $redis->exec();
//if(!$rob_result) $redis->unwatch("gnum");
exit;
//$redis->delete('test');
$tadd=$redis->rpush("test",$login);
//dump($redis->lpop("test"));
//dump($redis->lgetrange("test",0,-1));
//$list_arr=$redis->lgetrange("test",0,-1);
while(true){
try{
$slogin = $redis->LPOP('test');
if(!$slogin){
break;
}
//var_dump($value)."\n";
/*
* 利用$value进行逻辑和数据处理
*/
}catch(Exception $e){
glog('',$e->getMessage());
}
}
exit;
//$redis->expire('test',1);
//glog('',$tadd);exit;
$redis->watch("test");
$redis->multi();
if($tadd<2){
glog('',$tadd);exit;
/*查询*/
//$login = 'kevin2';
$sql = "SELECT * FROM `user`";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$login));
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(empty($row)){
/*添加*/
//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";
$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$login,':password'=>'123'));
if($dbh->lastinsertid()){
$redis->delete('test');
}
}else{
foreach($row as $k=>$v){
if($v['login']!=$login){
/*添加*/
//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";
$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$login,':password'=>'123'));
if($dbh->lastinsertid()){
$redis->delete('test');
}
}
}
}
}else if($tadd<50){
glog('','并发五百内');
}else{
glog('','高并发大于五百,队列完毕,重置');
$redis->delete('test');
}
$rob_result = $redis->exec();
exit;
//$redis->lpush("test",$login);
$redis->sadd('isdata',$login);
$rcnum=$redis->scard('isdata');
if($rcnum>3){
echo '抢完了';
$set = $redis->smembers('isdata');
dump($set);
exit;
}
exit;
//$redis->sadd('isdata',$login);exit;
/*$redis->sadd('isdata',$login);//$redis->delete('isdata');
var_dump($redis->sort('isdata'));exit;*/
//dump($redis->sort('isdata'));exit;
$inarr=$redis->sort('isdata');
$redis->delete('isdata');
if(!count($inarr)){
$result=json_encode(array("errcode" => 2004, "errmsg" => "no data", 'data' => 'dataLength:' . $dataLength . 'liveKey:' . $listKey));
//glog('',$result);
exit($result);
};
$sql = "INSERT INTO user(login,password) values ";
$data=array();
foreach($inarr as $k=>$v){
$sql.='(?,?),';
array_push($data,$v,'test'.$k);
//$data[$k]=$v;
//$data[($k+1)]='test'.$k;
//$stmt->execute(array(':login'=>$v,':password'=>'123'));
}
$inarr=null;
$sql = substr($sql,0,strlen($sql)-1);
//echo $sql;exit;
//dump($data);exit;
try {
$stmt = $dbh->prepare($sql);
$stmt->execute($data);
} catch (PDOException $e) {
glog('',"Error!: " . $e->getMessage());
return false;
}
/*if($dbh->lastinsertid()){
//$redis->sremove('isdata',$v);
//unset($inarr[$k]);
$redis->delete('isdata');
}*/
exit;
/*查询*/
//$login = 'kevin2';
$sql = "SELECT * FROM `user`";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$login));
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
/*print_r($row);
exit; */
if($row['login']!=$login){
/*添加*/
//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";
$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$login,':password'=>'123'));
echo $dbh->lastinsertid();
}
}
exit;
/*修改*/
$sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':userId'=>'7', ':password'=>'4607e782c4d86fd5364d7e4508bb10d9'));
echo $stmt->rowCount();
/*删除*/
$sql = "DELETE FROM `user` WHERE `login` LIKE 'kevin_'"; //kevin%
$stmt = $dbh->prepare($sql);
$stmt->execute();
echo $stmt->rowCount();
/*查询*/
$login = 'kevin%';
$sql = "SELECT * FROM `user` WHERE `login` LIKE :login";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$login));
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
print_r($row);
}
print_r( $stmt->fetchAll(PDO::FETCH_ASSOC));
/*添加*/
/*//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";
$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$login,':password'=>'123'));
$dbh->lastinsertid();
$row=null;
$login=null;
exit;*/
/*查询*/
//$login = 'kevin2';
$sql = "SELECT * FROM `user`";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$login));
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
/*print_r($row);
exit; */
if($row['login']!=$login){
/*添加*/
//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";
$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$login,':password'=>'123'));
$dbh->lastinsertid();
}
}
$row=null;
$login=null;
exit;Run code
Cut to clipboard
发布时间:2019-11-17, 06:12:35
| 评论:0
| 分类:PHP
set/get普通得set/get操作,set操作,如果键名存在,则会覆盖原有得值
$redis = app("redis.connection");
$redis->set('library' , 'phpredis');//存储key为library ,值phpredis得记录
$redis->get("library");//获取key为library得记录值
set/get 多个key-value
$mkv = array(
"user:001"=>'First user',
"user:002"=>"Second user",
"user:003"=>"Third user"
);
$redis->mset($mkv); // 存储多个key对应的value
$retval = $redis->mget( array_keys($mkv) );//获取多个key对应的valueRun code
Cut to clipboard
setexsetex 存放带存储时效的记录
$redis->setex("library" , 10 , 'phpredis'); //存储key为library,值为phpredis的记录,有效时长为10秒Run code
Cut to clipboard
add操作,不会覆盖已有值
$redis->setnx("foo" , 12); //返回true, 添加成功 存在不做任何操作 否则创建
$redis->setnx('foo' , 34); //返回false ,添加失败,因为存在键名foo的记录Run code
Cut to clipboard
getsetgetset 是 set的变种,结果返回替换前的值
$redis->getset('foo' , 56);//返回12;如果之前不存在记录,则返回nullRun code
Cut to clipboard
递增和递减incrby/incr/decrby/decr对值得递增和递减
$redis->incr('foo'); //返回57 ,递增 阶梯为1
$redis->incrby('foo' , 2); //返回59 递增 阶梯为2Run code
Cut to clipboard
existsexists 检测是否存在 存在返回1 否则返回0
$redis->exists("foo");Run code
Cut to clipboard
typetype 类型检测,字符串返回 string ,列表返回 list , set表返回 set/zset ,hash表返回 hash
$redis->type('foo');Run code
Cut to clipboard
appendappend 连接到已存在字符串
$redis->get('str');//返回test
$redis->append('str' , "_123");Run code
Cut to clipboard
setrangesetrange 部分替换操作,并返回字符串长度
$redis->setrange('str' , 0 , 'abc'); //返回3,第2个参数为0等同于set操作
$redis->setrange('str' , 2 , 'cd'); //返回4,表示从第2个字符后替换,这时‘str’ 为 ‘abcd’Run code
Cut to clipboard
substrsubstr 部分获取操作
$redis->substr('str' , 0 , 2);//返回abc 表示从第0个起,取到第2个字符串
$redis->strlen('str'); // 返回4 此时‘str’ 为‘abcd’Run code
Cut to clipboard
setbitsetbit 位存储
$redis->setbit('library' , 31 ,1); // 表示在第31位存入1Run code
Cut to clipboard
getbit 位获取
$redis->getbit('library' , 31); //返回1Run code
Cut to clipboard
keyskeys 模糊查找功能,支持 * 号 以及 ?号 (匹配一个字符)
$redis->set('foo1',123);
$redis->set('foo2' , 456);
$redis->keys('foo*'); //返回foo1和foo2的array
$redis->keys('f?0?'); // 同上Run code
Cut to clipboard
randomkeyrandomkey 随机返回一个key
$redis->randomkey(); //可能是返回‘foo1’ 或者是foo2 及其它任何已存在的keyRun code
Cut to clipboard
rename/renamenxrename/renamenx 方式对key进行改名,所不同的是renamenx不允许改成已存在的key
$redis->rename('str','str2'); // 把原先命名为 str 的key改成了 str2Run code
Cut to clipboard
expireexpire 设置key-value的时效性
ttl 获取剩余有效期
persist 重新设置为永久存储
$redis->expire('foo' , 10);//设置有效期为10秒
$redis->ttl('foo'); // 返回剩余有效期值10秒
$redispersist("fool");//取消有效期,变为永久存储Run code
Cut to clipboard
dbsizedbsize 返回redis当前数据库的记录总数
$redis->dbsize();Run code
Cut to clipboard
队列操作 rpush/rpushx有序列表操作,从队列后插入元素;
lpush/lpushx和rpush/rpushx的区别是插入到队列的头部,同上,‘x’含义是只对已存在的key进行操作
$redis->rpush('foolist' , 'bar1'); //返回列表长度1
$redis->rpush('foolist' , 'bar0'); // 返回列表长度2
$redis->rpushx('foolist' , 'bar2'); // 返回3 , rpushx只对已存在的队列做添加,否则返回0
$redis->llen('foolist'); //返回 3Run code
Cut to clipboard
lrangelrange 返回队列中一个区间的元素
$redis->lrange('foolist' , 0 , 1); //返回数组包含第0个至第1个,共2个元素
$redis->lrange('foolist' , 0 , -1);//返回第0个至倒数第一个,相当于返回所有元素 Run code
Cut to clipboard
lindexlindex 返回指定顺序位置的list元素
$redis->lindex('foolist' , 1); //返回bar1Run code
Cut to clipboard
lsetlset 修改队列中指定位置的value
$redis->lset('foolist' , 1 ,'123'); // 修改位置1的元素,返回trueRun code
Cut to clipboard
lremlrem 删除队列中左起指定数量的字符
$redis->lrem("foolist" , 1 , '_'); //删除队列中左起(右起使用-1)1个字符‘_’(若有)Run code
Cut to clipboard
lpop/rpoplpop/rpop 类似栈结构地弹出(并删除)最左或最右的一个元素
$redis->lpop('foolist');//左侧返回
$redis->rpop('foolist'); // 右侧返回Run code
Cut to clipboard
ltrimltrim 队列修改,保留左边起若干元素,其余删除
$redis->ltrim('foolist' , 0 , 1); // 保留左边起第0个至第1个元素Run code
Cut to clipboard
rpoplpushrpoplpush 从一个队列中pop元素并push到另一个队列
$redis->rpush('list1' , 'ab0');
$redis->rpush('list1','ab1');
$redis->rpush('list2' , 'ab2');
$redis->rpush('list2' , "ab3");
$redis->rpoplpush('list1' , "list2");
$redis->rpoplpush('list2' , 'list2'); Run code
Cut to clipboard
linsertlinsert在队列的中间指定元素前或后插入元素
$redis->linsert('list2' , 'before' , 'ab1' , '123');//表示在元素 ‘ab1’ 之前插入‘123’
$redis->linser('list2' , 'after' , 'ab1' , "456");//表示在元素 ‘ab1’ 之后插入Run code
Cut to clipboard
blpop/brpopblpop/brpop 阻塞并等待一个队列不为空时,在pop出最左或最右的一个元素(这个功能在php以外可以说非常好用)
$redis->blpop('list3' , 10) ; //如果list3 为空则一直等待,知道不为空时将第一个元素弹出,10秒后超时Run code
Cut to clipboard
setset集合操作
sadd增加set集合元素,返回true,重复返回false
$redis->sadd('set1' , 'ab');
$redis->sadd('set1' , 'cd');
$redis->sadd('set1' , 'ef');
$redis->smembers("set1"); // 查看集合元素Run code
Cut to clipboard
sremsrem 移除指定元素
$redis->srem('set1' , 'cd');//删除‘cd’ 元素Run code
Cut to clipboard
spopspop弹出首元素
$redis->spop("set1");//返回‘ab’Run code
Cut to clipboard
smovesmove移动当前set集合的指定元素到另一个set集合
$redis->sadd("set2",'123');
$redis->smove('set1','set2','ab');//移动set1中的ab到set2 ,返回true or false;此时 set1 集合不存在 ab 这个值Run code
Cut to clipboard
scardscard 返回当前set表元素个数
$redis->scard('set2');//返回2Run code
Cut to clipboard
sismembersismember判断元素是否属于当前set集合
$redis->sismember('set2','123'); //返回true or falseRun code
Cut to clipboard
smemberssmembers返回当前set集合的所有元素
$redis->smember('set2'); //返回array(123,ab)Run code
Cut to clipboard
交集/并集/补集sinter/sunion/sdiff 返回两个表中的交集/并集/补集
$redis->sadd('set1' , 'ab');
$redis->sinter('set2' , 'set1');//返回array('ab');
sinterstore/sunionstore/sdiffstore 将两个表交集/并集/补集元素copy到第三个表中
$redis->set('foo' , 0);
$redis->sinterstore('foo' , 'set1');//等同于将set1 的内容copy到foo中,并将foo转为set表
$redis->sinterstore('foo' , array('set1' , 'set2'));//将set1和set2中相同的元素copy到foo表中,覆盖foo原有内容
srandmember 返回表中一个随即元素
$redis->srandmember('set1');Run code
Cut to clipboard
有序set表操作zadd增加元素,并设置序号,成功返回true,重复返回false
$redis->zadd("zset1" , 1 , 'ab');
$redis->zadd('zset1' , 2 , 'cd');
$redis->zadd('zset1' , 3 , 'ef');Run code
Cut to clipboard
zincrBy对指定元素索引值的增减,改变元素排序次序
$redis->zincryBy('zset1' , 10 , 'ab'); //返回11Run code
Cut to clipboard
zrem 移除指定元素
$redis->zrem('zset1' , 'ef');//返回true or falseRun code
Cut to clipboard
zrange按位置次序返回表中指定区间的元素
$redis->zrange("zset1" , 0 , 1);//返回位置0 和 1 之间(两个)的元素
$redis->zrange('zset1' , 1 , -1);//返回位置0和倒数第一个元素之间的元素(相当于所有元素)Run code
Cut to clipboard
zrevrange同上,返回表中指定区间的元素,按次序倒排
$redis->zrevrange('zset1' , 0 ,-1);//元素顺序和zrange相反Run code
Cut to clipboard
zrangeByscore/zrevrangeByscore 按顺序/降序返回表中指定索引区间的元素
$redis->zadd('zset1' , 3 , 'ef');
$redis->zadd('zset1' , 5 , 'gh');
$redis->zrangeByscore('zset1' , 2, 9);//返回索引值2-9之间的元素array('ef' , 'gh');
$redis->zrangeByscore('zset1' , 2 ,9 ,array('withscores'=>true , 'limit'=>array(1,2)));//返回索引值2-9之间的元素,withscores=>true表示包含索引值;limit=>array(1,2),表示偏移1,返回2条,结果为array(array('ef',3),array('gh',5))Run code
Cut to clipboard
zcount统计一个索引区间的元素个数
$redis->zcount('zset1' , 3 , 5);//返回2
$redis->zcount('zset1' , '(3' , 5 ) );//’(3‘ 表示索引的值在3-5之间但不含3,同理也可以使用’(5‘ 表示上限为5但不含5Run code
Cut to clipboard
zcard 统计元素个数
$redis->zcard('zset1');//返回4Run code
Cut to clipboard
zremrangeByscore删除一个索引区间的元素
$redis->zremrangeByscore('zset1' , 0 , 2);//删除索引在0-2之间的元素(ab , cd),返回删除元素个数2Run code
Cut to clipboard
zrank/zrevrank返回元素所在表顺序/降序的位置(不是索引)
$redis->zrank('zset1' , 'ef');//返回0,因为它是一个元素;zrevrank则返回1(最后一个)Run code
Cut to clipboard
zremrangeByrank删除表中指定位置区间的元素
$redis->zremrangeByrank('zset1' , 0 , 10);//删除位置为0-10的元素,返回删除的元素个数2Run code
Cut to clipboard
hash表操作
$redis->hset('hash1' , 'key1' , 'v1');//将key为key1,value为v1的元素存入hash1表
$redis->hset("hash1" , 'key2' , 'v2');
$redis->hget('hash1' , 'key1');//取出表hash1中的key key key1的值,返回v1Run code
Cut to clipboard
hexists返回hash表中的指定key是否存在
$redis->hexists("hash1" , 'key1');//true 或 falseRun code
Cut to clipboard
hdel 删除hash表中指定key的元素
$redis->hdel('hash' , 'key2');//true or falseRun code
Cut to clipboard
hlen 返回hash表元素个数
$redis->hlen('hash1'); // 返回1Run code
Cut to clipboard
hsetnx增加一个元素,但不能重复
$redis->hsetnx('hash1' , 'key1' , 'v2');
$redis->hsetnx('hash1' , 'key2' , 'v2');Run code
Cut to clipboard
hmset/hmget存取多个元素到hash表
$redis->hmset( 'hash1' , array('key3'=>'v3' , 'key4'=>'v4' ) );
$redis->hmget( 'hash1' , array('key3' , 'key4') );//返回响应的值 array('v3' , 'v4');Run code
Cut to clipboard
hincryby 对指定key进行累加
$redis->hincryBy('hash1' , 'key5' , 3); //不存在,则存储并返回3 ;存在,即返回原有值 +3
$redis->hincryBy("hash1" , 'key5' , 10);//返回13Run code
Cut to clipboard
hkeys返回hash表中的所有key
$redis->hkeys('hash1'); // 返回array('key1' , 'key2' , 'key3' , 'key4' , 'key5');Run code
Cut to clipboard
hvals 返回hash表中的所有value
$redis->hvals('hash1'); // 返回array('v1' , 'v2' , 'v3' , 'v4' , 13);Run code
Cut to clipboard
hgetall返回整个hash表元素
$redis->hgetall('hash1');//返回hash1所有表元素Run code
Cut to clipboard
排序sort排序
$redis->rpush('tab' , 3);
$redis->rpush('tab' , 2);
$redis->rpush('tab' , '17');
$redis->sort('tab');//返回array(2,3,17);
$redis->sort('tab' , array('sort'=>'desc'));//降序排序,返回array(17 , 3, 2)
$redis->sort('tab' , array('limit'=>array(1,2)));//返回顺序位置中1的元素2个(这里的2是指个数,而不是位置),返回array(3,17)
$redis->sort('tab' , array('limit'=>array('alpha'=>true)));//按首字符排序返回array(17 , 2 , 3 ),因为17的首字符是 1 所以排首位置
$redis->sort('tab' , array('limit'=>array('store'=>'ordered')));//表示永久性排序,返回元素个数
$redis->sort('tab' , array("limit"=>array('get'=>'pre_*')));//使用了通配符 * 过滤元素,表示只返回以pre开头的元素Run code
Cut to clipboard
管理Redis 管理操作
info显示服务当状态信息
$redis->info();Run code
Cut to clipboard
select指定要操作的数据库
$redis->select(4);//指定数据库的下标Run code
Cut to clipboard
flushdb清空当前库
$redis->flushdb();Run code
Cut to clipboard
move移动当库的元素到其它数据库
$redis->set('tomove' , 'bar');
$redis->move('tomove' , 4);Run code
Cut to clipboard
slaveof 配置从服务器
$redis->slaveof('127.0.0.1' , 80);//配置127.0.0.1端口80的服务器为从服务器
$redis->slaveof();//消除从服务器Run code
Cut to clipboard
同步保存服务器数据到磁盘
$redis->save();Run code
Cut to clipboard
异步保存服务器数据到磁盘
$redis->bgsave()Run code
Cut to clipboard
返回最后更新磁盘的时间
$redis->lastsave();Run code
Cut to clipboard