redis初步学习笔记 -- 第一天

小时候总是不愿意做笔记,长大之后才发现,做好笔记是一件多么有意义的事情!!!!

疑问

  1. redis是干啥的?有什么用?
  2. 听说redis可以解决高并发?怎么实现的?
  3. redis 如何在php中使用?
  4. redis 和 memcached 是啥关系?有什么异同?

参考博文
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/

  1. 安装的时候一定要注意扩展的版本要和服务器端配合好,否则报错!!!!!(已经踩坑,务必注意)
  2. 我使用了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的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTIEXEC指令包起来。
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 即可验证
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值