nosql--------memcache与redis

本文有三部分:1、两者不同    2、memcache   3、redis

一、不同点对比:

①从数据存储位置上来分,memcache的数据存在内存中,而redis既可以存储在内存中,也可以存储的到磁盘中,达到持久化存储的功能,memcache一旦断电,数据全部丢失,redis可以利用快照和AOF把数据存到磁盘中,当恢复时又从磁盘中读取到内存中,当物理内存使用完毕后,可以把数据写入到磁盘中。


            ②从存储数据的类型上来分,memcache和redis存储的方式都是键值对,只不过redis值的类型比较丰富,有string(字符串),hash(哈希),list(列表),set(集合)zset(有序集合),而memcache主要存储的是字符串。

③从架构层次来分,Redis支持master-slave(主—从)模式应用,memcache支持分布式。

④另外从存储数据的大小上来分,Redis单个value的最大限制是1GB,memcached只能保存1MB的数据。但是Memcache在存储100K以上的数据,性能稍微好一点。

⑤另外redis只支持单核,memcache可以支持多核,当然关于redis取代memcache的说法,在一般情况下,两者性能都很高,在大多的业务场景选择上,redis的选择可能更加具有优势,但也不能说可以完全取代,最终还是取决于你的应用场景。
 

二、memcache

 原理:memcached 用 slab allocator(slab分配器) 机制来管理内存 

Slab Allocator的基本原理是按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题。Slab Allocation的原理相当简单。 将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk的集合)

memcache分布式操作:分到各个服务器,减少服务器压力(在这里不赘述,在我的《高性能的服务器的架设------硬件》有写)

操作:

  1. 连接

$m=new Memcached();
$m->addServer("127.0.0.1",11211);

 

  1. 其他的一些api(add,get等等)

http://php.net/manual/zh/book.memcached.php

  1. Set 设置参数   get 读取参数的值   delete  删除

$m->set("name","ljp2");  //设置

echo $m->get("name");   //读取

$m->delete("name");     //删除

 

//如果键num不存在就set  如果存在就每次刷新页面数值加1 或者减1
if(!$m->get("num")){
    $m->set("num",1,0);
}
$m->increment("num",10);
$m->decrement("num",1);   //每次刷新页面减少1

 


echo $m->get("num");   //读取

 

//同时存储多条数据
$arr=array(
    "name"=>"张三",
    "sex"=>"男"
);

$m->setMulti($arr,0);

//一次性可以读取多条数据
$getdata=$m->getMulti(array("name","sex"));
print_r($getdata);

 

//一次性删除多条数据
$m->deleteMulti(array("name","sex"));

 

//可以获取上一步操作的结果  有两个方法
echo $m->getResultCode();  //这个返回数字 不同的数字代表的意思不同  o--成功  1-失败  还有其他的数字 ...

echo $m->getResultMessage();  //这个返回的是文字说明  success   ...

    

  1. 面向对象的方式来操作memcache  封装类来单独进行操作

<?php
/**
 * Created by PhpStorm.
 * User: HP
 */
class MyMemcached{
    private $m;
    function __construct()
    {
        $this->m=new Memcached();
        $this->m->addServer("127.0.0.1",11211);
    }
    public function setData($key,$value,$time=0){
        $this->m->set($key,$value,$time);
        if($this->m->getResultCode() !=0){
            $this->$this->getError();
        }
    }
    public function getData($key){
        $data= $this->m->get($key);
        if($this->m->getResultCode() !=0){
            $this->getError();
        }else{
            return $data;
        }
    }
    public function deleteData($key){
        $this->m->delete($key);
        if($this->m->getResultCode() !=0){
            $this->$this->getError();
        }
    }
    public function getError(){
        echo $this->m->getResultMessage();
    }
}

 

 

三、redis

  • Redis的简介:Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
  • 使用redis 的公司:GitHub   twitter   stackoverflow   新浪微博   搜狐  知乎 美团 腾讯 …
  • 适用场景:
  1. 应用程序直接访问redis 只有当redis访问失败时才访问mysql
  2. 取最新N个数据的操作
  3. 排行榜应用 取top n操作
  4. 计数器应用
  5. 实时系统等
  6. 通过pub/sub构建实时消息系统http://blog.csdn.net/lk10207160511/article/details/50364088

以下为安装过程

  1. wget http://labfile.oss.aliyuncs.com/files0422/redis-2.8.9.tar.gz  
  2. tar -zxvf redis-2.8.9.tar.gz
  3. cd redis-2.8.9   开始make和 make install命令安装
  4. 之后在src文件夹中会生成6个文件

redis-server(启动服务端)、redis-cli(调用客户端)、redis-benchmark、redis-check-aof、redis-check-dump、redis-sentinel

  1. 建立redis配置目录

 mkdir /etc/redis

mkdir /var/redis

mkdir /var/redis/log

mkdir /var/redis/run

mkdir /var/redis/6379

  1. 复制配置模板文件

 cp redis.conf /etc/redis/6379.conf

修改6379.conf配置项    daemonize(守护进程,可以在后台运行,配置redis作为守护进程运行
# 默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把配置文件里
daemonize改成 yes。# 当redis作为守护进程运行的时候,它会写一个 pid  /var/run/redis.pid 文件里面。)

 

daemonize yes            

pidfile /var/redis/run/redis_6379.pid

logfile /var/redis/log/redis_6379.log

  1. 开启redis服务

进入  /etc/redis/

执行 redis-server 6379.conf

 

.启动redis server后,SecureCRT进入redis-cli,输入不断在后面追加IP:Port显示
设置当前的Session Options-->Terminal-->Emulation-->Terminal为Linux

cat /var/redis/log/redis_6379.log

  1. 如果通过命令行来操作redis的话 再开启一个redis的客户端

进入redis的安装目录  cd /root/redis-stable/src/,

执行 redis-cli  即可

    2。然后就可以操作redis了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值