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. mysql 基础整合大全

    mysql  数据库操作: 创建数据库: create database db_sanguo charset utf8; 切进db_sanguo use db_sanguo 删除数据库: drop d ...

  2. python 之 比较哪个数据大小

    #定义一个字典info={}#定义比较的人数n=int(input("请输入你要比较的人数"))#循环while(n): #输入a,b 两个数据 ,分别代表学号 和分数 # 把输入 ...

  3. gitlab的简单使用

    mkdir folder //创建文件夹 cd folder/ git clone git连接 git status //git当前的状态 ls //当前目录下的所有文件 cd gitFolder 进 ...

  4. 架构师养成记--35.redis集群搭建

    前记:redis哨兵经验之谈.哨兵做主从切换可能要花费一两秒,这一两秒可能会丢失很多数据.解决方法之一是在java代码中做控制,try catch 到 链接断开的异常就sleep 一两秒钟再conti ...

  5. CSS01--概述与选择器

    CSS:Cascading Style Sheets,层叠样式表.我们之前已经说过,HTML解决的是网页内容(结构)的问题,而CSS立足于网页的表现方面的问题,则样式定义如何显示HTML标签,js负责 ...

  6. 校验 CentOS 7 镜像文件

    验证镜像文件的原因 CentOS Vault(http://vault.centos.org/)页脚的镜像站链接上有段英文,指出页脚的镜像站链接不受 CentOS 团队的监控,除此之外还有一个原因就是 ...

  7. github上关于campbell数据采集的一些代码。

    数据自动采集: https://github.com/USGS-OWI/deployer-campbell   program that reads loggernet files and refor ...

  8. Github使用笔记

    ========================Github使用===================概念解释:远程仓库Remote:就是指保存在github网站里的代码;本地仓库Repository ...

  9. mfix中输出DEM颗粒的固相速度到网格

    基于mfix-19.1.2版本 方法一:直接输出差值网格固相速度 注:这种方式只适用于garg 2012颗粒差值格式在DEM中,默认是无法输出固相速度的网格值的: 但是通过搜索des文件夹下V_s关键 ...

  10. [转] Scala 的集合类型与数组操作

    [From] https://blog.csdn.net/gongxifacai_believe/article/details/81916659 版权声明:本文为博主原创文章,转载请注明出处. ht ...