redis使用及配置之缓存详解

1、Redis的介绍

Redis是一个Key-Value存储系统。它支持存储的value类型有:string(字符串),list(链表), set(无序集合),zset(sorted set有序集合)和hash,也可以把redis看成一个数据结构服务器。这些数据类型都支持pust/popadd/remove及取交集、并集和差集运算,Redis支持各种不同方式的排序。数据都是缓存在内存中的,它也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并实现了master-slave(主从)同步。

Redis提供的API语言包括C、C++、C#、JavaJavaScript、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、应用示例

TestAPI已经写了get(/TestRedis/get)和set(/TestRedis/set)示例。
 
下载了predis之后,将predis包加入项目目录中:
 redis访问路径我们一般配置在配置文件中:redis_config.php文件中添加下面的代码:

<?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;
}
 在存储和获取redis中的数据时,使用这两个私有方法就可以了;
 
    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

 
做好缓存之后,出现了一个问题,就是如何更新redis缓存呢?
 
有时候我们调用其他项目的接口来获取数据,那么怎么样通过redis来进行缓存呢?
 
1、一种方法是让对方做缓存
这种方式的缺点是对方并不一定喜欢给你做缓存,增加了对方的开发成本;
 
2.第二种方法是我们当第一次调用对方接口的时候,我们自己做缓存,确保相同参数的接口,我们只调用一次对方接口;
只需要在请求结束的时候,清空缓存就行了,这样就能保证每次获取到的都是对方最新的数据;
    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缓存数据;

 

redis使用及配置之缓存详解的更多相关文章

  1. Linux中redis安装配置及使用详解

    Linux中redis安装配置及使用详解 一. Redis基本知识 1.Redis 的数据类型 字符串 , 列表 (lists) , 集合 (sets) , 有序集合 (sorts sets) , 哈 ...

  2. MySQL查询缓存详解(总结)

    MySQL查询缓存详解(总结) 一.总结 一句话总结: mysql查询缓存还是可以用用试一试,但是更推荐分布式,比如redis/memcache之流,将数据库中查询的数据和查询语句以键值对的方式存进分 ...

  3. MYSQL服务器my.cnf配置文档详解

    MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...

  4. redis cluster管理工具redis-trib.rb详解

    redis cluster管理工具redis-trib.rb详解 来源 http://weizijun.cn/2016/01/08/redis%20cluster%E7%AE%A1%E7%90%86% ...

  5. Hibernate缓存简介和对比、一级缓存、二级缓存详解

    一.hibernate缓存简介 缓存的范围分为3类:  1.事务范围(单Session即一级缓存)     事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象 ...

  6. 高并发架构系列:Redis并发竞争key的解决方案详解

    https://blog.csdn.net/ChenRui_yz/article/details/85096418 https://blog.csdn.net/ChenRui_yz/article/l ...

  7. 【转】MySQL查询缓存详解

    [转]MySQL查询缓存详解 转自:https://www.cnblogs.com/Alight/p/3981999.html 相关文章:http://www.zsythink.net/archive ...

  8. 分布式-技术专区-Redis并发竞争key的解决方案详解

    Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题:缓存击穿.缓存雪崩.缓存和数据一致性,以及今天要谈到的缓存并发竞争.这里的并发指的是多个redis的clie ...

  9. [面试专题]Web缓存详解

    Web缓存详解 标签(空格分隔): 缓存 缓存之于性能优化 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影响网站交互的前提下可以大大加快网站加载速度. 降低服务器压力: ...

随机推荐

  1. python爬虫的页面数据解析和提取/xpath/bs4/jsonpath/正则(1)

    一.数据类型及解析方式 一般来讲对我们而言,需要抓取的是某个网站或者某个应用的内容,提取有用的价值.内容一般分为两部分,非结构化的数据 和 结构化的数据. 非结构化数据:先有数据,再有结构, 结构化数 ...

  2. Oauth2.0 整合springCloud的Zuul 解决关键BUG 报错信息:Principal must not be null

    不清楚Oauth2.0 的 可以查看我前几篇博文 2018.4.8 补充 我出现这个原因:是我在资源服务器使用了 如下图所示 Principal Oauth2.0 提供的获取用户信息的方法 使其找到相 ...

  3. 零基础学习Python数据分析

    网上虽然有很多Python学习的教程,但是大多是围绕Python网页开发等展开.数据分析所需要的Python技能和网页开发等差别非常大,本人就是浪费了很多时间来看这些博客.书籍.所以就有了本文,希望能 ...

  4. zookeeper 高可用集群搭建

    前言 记录Zookeeper集群搭建的过程! 什么是 Zookeeper ? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hado ...

  5. 解决self.encoding = charset_by_name(self.charset).encoding

    解决self.encoding = charset_by_name(self.charset).encoding def createMysqlTable(tablename): # config = ...

  6. MFC Windows程序开发究竟是什么?

    MFC Windows程序开发究竟是什么? MFC是一个Application Framework.他是一个完整的程序模型. 什么是MFC?MFC是微软公司出品一个Application Framew ...

  7. (C/C++) string / *char / int 基本轉換

    網路上有許 string / *char / integer 基本轉換方式 string 與 *char 互相轉換的方法 /* string to *char */ string ssbuf1 = & ...

  8. jQuery 获取元素当前位置offset()与position()

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  9. PS2模拟器 PCSX2 新手向

    1.模拟器的下载 1.1百度网盘地址:http://pan.baidu.com/s/1i3kt7bJ (已经整合了PS2BIOS的模拟器下载,比较新的版本,适合新手) 1.2高端玩家可以下载: 官网g ...

  10. redis之 集群配置(主从复制)

    集群的作用: 集群的方式有二种: 第二种的好处是:master宕机以后可以直接切换到slave1 主从通信的过程 先通过dump导出大块的rdb 然后把aof缓冲过来,然后通过replicationf ...