redis使用及配置之缓存详解
redis使用及配置之缓存详解
1、Redis的介绍
Redis是一个Key-Value存储系统。它支持存储的value类型有:string(字符串),list(链表), set(无序集合),zset(sorted set有序集合)和hash,也可以把redis看成一个数据结构服务器。这些数据类型都支持pust/pop、add/remove及取交集、并集和差集运算,Redis支持各种不同方式的排序。数据都是缓存在内存中的,它也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并实现了master-slave(主从)同步。
Redis提供的API语言包括C、C++、C#、Java、JavaScript、Lua、Objective-C、Perl、PHP、Python、Ruby、Go、Tcl等。
使用Redis:新浪微博,200+ Server、400 port、4G data.
使用方式:与memcache相同
1. 应用程序直接访问Redis数据库;
2. 应用程序直接访问Redis,只有当访问Redis失败时才访问MySQL
应用场合:
1. 取最新N个数据的操作
2. 排行榜应用
3. 需要精确设定过期时间的应用
4. 计数器应用
5. Uniq操作,获取某段时间所有数据排重值
6. 实时系统,反垃圾系统
7. Pub/Sub构建实时消息系统
8. 构建队列系统
9. 缓存
10. 存储微博关注关系
Redis有库无表无字段无行列。MongoDB有库有集合(对应于Mysql中的表)
2、redis客户端
可以通过百度网盘下载:
http://pan.baidu.com/s/1pLH79jX
客户端打开图示:
通过redisClient客户端可以看到我们存储到redis中的数据;
3、应用示例
<?php $master_redis_config = array('tcp://172.16.0.39:6379', array('profile' => '3.0')); $slave_redis_config = array('tcp://172.16.0.39:6379', array('profile' => '3.0')); ?>
在需要使用redis文件中加入下面代码,自动加载redis服务:
require_once 'predis/autoload.php';
使用redis存储服务时,代码如下:
private function hsetRedisDatas($hash_table, $key, $value){ $redis_config = Flight::get('master_redis_config'); $redis = new Predis\Client($redis_config[0]); $redis->hset($hash_table,$key, $value); }
注意:这里使用了Flight框架加载配置文件,获取redis访问路径;
获取redis数据时,代码如下:
private function hgetRedisDatas($hash_table, $key){ $redis_config = Flight::get('master_redis_config'); $redis = new Predis\Client($redis_config[0]); $result = $redis->hget($hash_table,$key); return $result; }
public function getShippingName($shipping_id){ $shipping_name = self::hgetRedisDatas('shipping_name', $shipping_id); if (empty($shipping_name)){ $shipping_name = "当redis没有缓存数据时,通过读取数据库获取数据"; if (!empty($shipping_name) && !isset($shipping_name['error_code'])){ self::hsetRedisDatas('shipping_name', $shipping_id, $shipping_name); } } return $shipping_name; }
更新redis缓存
create/update/delete---同时存到redis和数据库
query--先从redis查,没有记录才从数据库查,并把从数据库查的结果也放一份到redis
private static function removeRedisDatas(){ $redis_config = Flight::get('master_redis_config'); $redis = new \Predis\Client($redis_config[0]); $redis->del($redis->keys('inventory*')); }
我们在redis中定义特殊的key,例如inventory*,这样我们就可以将inventory开头的缓存清空,而不至于影响其他redis缓存数据;