小时候总是不愿意做笔记,长大之后才发现,做好笔记是一件多么有意义的事情!!!!
疑问
参考博文
https://blog.csdn.net/weixin_42181824/article/details/81407403
https://blog.csdn.net/tennysonsky/article/details/78205453
https://www.cnblogs.com/mengchunchen/p/10044603.html
https://www.imooc.com/article/23549
https://blog.csdn.net/TheSilentNight/article/details/85253010 一定要注意版本(一个数字没对上浪费我3个小时)
php扩展下载地址以及安装注意事项
https://windows.php.net/downloads/pecl/releases/igbinary/3.0.1/
- 安装的时候一定要注意扩展的版本要和服务器端配合好,否则报错!!!!!(已经踩坑,务必注意)
- 我使用了phpdesktop没有重启服务器的命令(或者是我不知道,我一般点叉),导致在服务进程里面服务器一直在运行,没有让修改后的php.ini 生效(手动删除服务进程后,终于安装好扩展)— 就这么小小的2行字,我弄了超3个小时。。。
redis简介
redis英文: remote dictionary server
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3. Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
1. 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
2. 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
3. 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
4. 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
1. Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
2. Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
Redis
// 新建redis实例(安装好phpredis扩展后,才可以实例化)
$redis = new \Redis();
// 连接
$conn = $redis->connect('127.0.0.1',6379);
// 密码验证(填入设置的密码。密码如何设置,见下方密码设置)
$auth = $redis->auth('password');
// 选择存储区域 默认16个区域 0 - 15,当然可以修改配置,扩展这个区域 (需要自行记忆每个区域存储的内容)
$redis->select(0)
// 题外 linux webbench高并发测试工具
// 处理过期 redis key https://www.cnblogs.com/huhongy/p/9257392.html
// exists 判断一个KEY是否存在 输出了不存在
if($auth){
$redis->select(0);
if(!$redis->exists('demo1')){
echo "不存在";
}
}else{
echo '验证失败';
}
字符串
// Simple key -> value set
$redis->set('key', 'value');
// Will redirect, and actually make an SETEX call
$redis->set('key','value', 10);
// Will set the key, if it doesn't exist, with a ttl of 10 seconds
$redis->set('key', 'value', Array('nx', 'ex'=>10));
// Will set a key, if it does exist, with a ttl of 1000 miliseconds
$redis->set('key', 'value', Array('xx', 'px'=>1000));
// sets key → value, with 1h TTL.
$redis->setEx('key', 3600, 'value');
// sets key → value, with 0.1 sec TTL.
$redis->pSetEx('key', 100, 'value');
// return TRUE 不用判断key 是否存在
$redis->setNx('key', 'value');
// return FALSE 如果存在 这边直接false了
$redis->setNx('key', 'value');
//删除
$redis->set('key1', 'val1');
$redis->set('key2', 'val2');
$redis->set('key3', 'val3');
$redis->set('key4', 'val4');
$redis->delete('key1', 'key2'); /* return 2 */
$redis->delete(array('key3', 'key4')); /* return 2 */
/* If using Redis >= 4.0.0 you can call unlink */
$redis->unlink('key1', 'key2');
$redis->unlink(Array('key1', 'key2'));
//判断key是否存在
$redis->set('key', 'value');
$redis->exists('key'); /* 1 */
$redis->exists('NonExistingKey'); /* 0 */
$redis->mset(['foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz']);
// return 3
$redis->exists(['foo', 'bar', 'baz']);
// return 3
$redis->exists("foo", "bar", "baz");
// key1不存在设置成0,运行incr变成1
$redis->incr('key1'); /* 1 */
$redis->incr('key1'); /* 2 */
$redis->incr('key1'); /* 3 */
$redis->incr('key1'); /* 4 */
// 可以设置增长的值
$redis->incr('key1', 10); /* 14 */
$redis->incrBy('key1', 10); /* 24 */
// 浮点数的增长
$redis->incrByFloat('key1', 1.5); /* key1 didn't exist, so it will now be 1.5 */
$redis->incrByFloat('key1', 1.5); /* 3 */
$redis->incrByFloat('key1', -1.5); /* 1.5 */
$redis->incrByFloat('key1', 2.5); /* 4 */
// 整数的自减
$redis->decr('key1'); /* -d */
$redis->decr('key1'); /* -2 */
$redis->decr('key1'); /* -3 */
$redis->decr('key1', 10); /* -13 */
$redis->decrBy('key1', 10); /* -23 */
// 获取多个键值得元素 1.返回一个数组 2. 不存在则返回fasle
$redis->set('key1', 'value1');
$redis->set('key2', 'value2');
$redis->set('key3', 'value3');
// array('value1', 'value2', 'value3')
$redis->mGet(array('key1', 'key2', 'key3'));
// array(`FALSE`, 'value1', `FALSE`)
$redis->mGet(array('key0', 'key1', 'key5'));
// 更新一个key 对比直接设置,可以看出方法可以保存修改之前的值
$redis->set('x', '42');
// return '42', replaces x by 'lol'
$exValue = $redis->getSet('x', 'lol');
// return 'lol'
$newValue = $redis->get('x');
// 获取一个随机的key
$key = $redis->randomKey();
$surprise = $redis->get($key);
$redis->select(0); // 选择空间1
$redis->set('x', '42'); // 设置一个key
$redis->move('x', '1'); // 把key.x 移动到 空间1
$redis->select('1'); // 选择空间2
$redis->get('x'); // 获取此键值
// 更换键名
$redis->set('x', '42');
$redis->rename('x', 'y');
$redis->get('y'); // → 42
$redis->get('x'); // → `FALSE`
// 设置过期时间
$redis->set('x', '42');
$redis->setTimeout('x', 3); // x will disappear in 3 seconds.
sleep(5); // wait 5 seconds
$redis->get('x'); // will return `FALSE`, as 'x' has expired.
$redis->set('x', '42');
$now = time(NULL); // current timestamp
$redis->expireAt('x', $now + 3); // x will disappear in 3 seconds.
$redis->pexpireAt('X',$now + 3); // 3毫秒
sleep(5); // wait 5 seconds
$redis->get('x'); // will return `FALSE`, as 'x' has expired.
// 获取所有的键 返回 一个数组
$allKeys = $redis->keys('*'); // all keys will match this.
$keyWithUserPrefix = $redis->keys('user*');
// 返回类型 string list hash sort
$redis->type('key');
// 追加
$redis->set('key', 'value1');
$redis->append('key', 'value2'); /* 12 */
$redis->get('key'); /* 'value1value2' */
// 截取字符串
$redis->set('key', 'string value');
$redis->getRange('key', 0, 5); /* 'string' */
$redis->getRange('key', -5, -1); /* 'value' */
// 截取字符串 注意返回值 第二个返回的是长度
$redis->set('key', 'Hello world');
$redis->setRange('key', 6, "redis"); /* returns 11 */
$redis->get('key'); /* "Hello redis" */
// 返回键值长度
$redis->set('key', 'value');
$redis->strlen('key'); /* 5 */
$redis->set('key', "\x7f"); // this is 0111 1111
$redis->getBit('key', 0); /* 0 */
$redis->getBit('key', 1); /* 1 */
$redis->set('key', "*"); // ord("*") = 42 = 0x2f = "0010 1010"
$redis->setBit('key', 5, 1); /* returns 0 */
$redis->setBit('key', 7, 1); /* returns 0 */
$redis->get('key'); /* chr(0x2f) = "/" = b("0010 1111") */
密码设置
1. 打开安装好的redis-cli客户端
2. 输入命令 config set requirepass password
3. 设置好密码后必须在客服端里面做验证,否则出错
4. 输入命令 auth password 即可验证