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. 【文文殿下】快速傅里叶变换(FFT)学习笔记

    多项式 定义 形如\(A(x)=\sum_{i=0}^{n-1} a_i x^i\)的式子称为多项式. 我们把\(n\)称为该多项式的次数界. 显然,一个\(n-1\)次多项式的次数界为\(n\). ...

  2. [转] Foobar2000 DSP音效外挂元件-Part4

    [转] Foobar2000 DSP音效外挂元件-Part4 在第1部分的文章里主要介绍了foobar2000预设的DSP音效调整,这些则示要介绍几个比较会用到的DSP外挂元件,在foobar2000 ...

  3. mxonline实战11,课程详情页2,课程章节页

    对应github地址:第11天   一. 课程详情页2   1. 课程详情页第2块中的课程介绍中,修改course-detail.html中代码,搜索课程详情,找到如下代码

  4. 浅谈Android选项卡(三)

    上一节介绍了TabActivity的简单用法,但是现在的Api中已经不建议使用了,建议使用Fragment来替代以上的功能,下面介绍下使用Fragment和ViewPager的结合使用. http:/ ...

  5. 在Eclipse之中调试FastDFS-storage

    FDFS版本为5.03 1.首先在eclipse之中创建一个C/C++工程,取名为FastDFS_v5.03 2.将FastDFS源码解压后拷贝到新创建的工程目录下,然后在ecipse之中刷新下工程就 ...

  6. 02-url路由分配及模板渲染方式

    本章主要内容 1.url基本概念及格式 2.path和re_path 3.模板路径配置 4.模板渲染方式 1.url基本概念及格式 URL(uniform Resoure Locator)统一资源定位 ...

  7. 杨辉三角-python

    # -*- coding: utf-8 -*- def triangles(): yield [1] # n = 0 第一行 yield [1, 1] # n = 1 第二行 b, n, old = ...

  8. html5+js+.Net的即时多人聊天

            今天看了下websocket的知识,了解到这是html5新增的特性,主要用于实时web的通信.之前客户端获取服务端的数据,是通过客户端发出请求,服务端进行响应的模式,或者通过ajax每 ...

  9. LINQ to Entities does not recognize the method , and this method cannot be translated into a store expression 解决办法

    根据用户输入的起始日期,查询以起始日期开始的前20条记录,在ASP.NET MVC的Controller代码中这样写: var Logs = db.Log.Take(20); if (!string. ...

  10. Android多媒体之view,SurfaceView,GLSurfaceView

    1.相关概念 不用画布,直接在窗口上进行绘图叫做无缓冲绘图. 用了一个画布,将所有内容都先画到画布上,在整体绘制到窗口上,就该叫做单缓冲绘图, 那个画布就是一个缓冲区.用了两个画布,一个进行临时的绘图 ...