Redis,与Memcached类似,是一个键值结构的非关系型数据库,基于内存运行,可持久化储存、集群负载均衡,常用于内容缓存、消息队列、临时计数以及日志储存场景。
由于数据库性能的原因,一些频繁读取或需异步处理的数据我们需要通过Redis来实现,如商品秒杀、消息通知、网站信息设置缓存、操作日志及访问日志储存等,Redis基于内存且高速的模式可以大大减轻我们数据库的负担。
一、前置
ThinkPHP 5.1
PHP 7.2.9
Redis 3.0.504
Nginx 1.15.11
二、连接Redis
2.1 设置密码
在Redis目录下redis.conf文件里添加requirepass 你要设置的Redis密码
2.2 添加Redis配置
由于我们需要集中管理相关配置,所以需要在TP5 Config.php文件缓存设置里新增Redis配置
// +----------------------------------------------------------------------
// | 缓存设置
// +----------------------------------------------------------------------
'cache' => [
// 复合缓存类型
'type' => 'complex',
// 默认缓存
'default' => [
'type' => 'File',
'path' => CACHE_PATH
],
'file' => [
// 驱动方式
'type' => 'File',
// 缓存保存目录
'path' => CACHE_PATH,
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表示永久缓存
'expire' => 0,
],
// 新增Redis配置
'redis' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'expire' => 0,
'password' => 'root'
]
],
这样的话我们就可以无需在Redis驱动文件或具体页面设置配置了,直接调用就好,需要修改时只需要修改Config.php文件。
2.3 修改Redis驱动文件
在thinkphp\library\think\cache\driver\redis.php构造函数里最前面新增
// 配置默认参数(读取Config.php)
$config = config('cache');
$this->options['host'] = $config['redis']['host'];
$this->options['port'] = $config['redis']['port'];
$this->options['password'] = $config['redis']['password'];
三、具体使用
3.1 获得对象
$redis = new Redis();
dump($redis);die;
// 此时,我们就获取到了一个Redis对象
object(think\cache\driver\Redis)#20 (3) {
["options":protected] => array(8) {
["host"] => string(9) "127.0.0.1"
["port"] => int(6379)
["password"] => string(4) "root"
["select"] => int(0)
["timeout"] => int(0)
["expire"] => int(0)
["persistent"] => bool(false)
["prefix"] => string(0) ""
}
["handler":protected] => object(Redis)#21 (0) {
}
["tag":protected] => NULL
}
3.2 多字段插入
HMSET方法可批量插入多个字段值(key,array[field=>value]),返回一个布尔值。
如果只需要插入一个可以使用HSET(HSET需要三个参数,Key,field,value)
EXPIRE方法用于设置Key的有效期,在配置好Redis持久化相关的配置后,在有效期内重启或崩溃,该值将会在下一次启动时重新载入内存。
$Result = $redis->handler()->HMSET('base_config',[
'web_name'=>'DIMM',
'web_desc'=>'左手代码,右手诗',
'web_keys'=>'dimm,php,acg,javascript,shuaike,nodeJs,vue,小程序'
]);
$redis->handler()->EXPIRE('base_config',1800);
dump($Result);
//
3.3 多字段获取
HMGET方法可批量获取多个字段值(key,array[field]),会返回一个一维数组,键为字段名,值为字段值。
如果只需要获取一个可以使用HGET(HGET需要两个参数,key,field),如果需要查询该Key下面所有字段和值,可以使用HGETALL('Key名')方法。
$Result = $redis->handler()->HMGET('base_config',['web_name','web_desc','web_keys']);
dump($Result);
3.4 查询是否存在
HEXISIS方法可以获取字段值是否存在(是否在这个Key里面),该方法会返回一个布尔值。
$Result = $redis->handler()->HEXISTS('base_config','web_name');
dump($Result);
3.5 删除Key
$redis->rm() 同 $redis->handler()->delete(),输入一个Key名,返回删除状态,值为int 1 或 0
$rmResult = $redis->rm('base_config');
dump($rmResult);