【ecstore深思录】细谈其引入的KV机制(key-value)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a5485899/article/details/54092535

一、kv是个什么鬼:

    kv存储机制(key-value-store)是商派研发的ecos框架解决大数据存储的一种优化方式。
对memcached、systemfile/flare等进行封装把不常变动的一些数据存储在kvstore中。
    举个例子:原来你想存一个字段入库,但是为了一个字段建一张表再插入、取出数据
    是不是太麻烦,太铺张浪费了。有了KV,
    我直接存字段到框架自身建好的表或者缓存中,
    需要的时候直接凭借key拿出value就好,是不是方便多了,这就是它的奇妙之处。

二、在商派的ecstore中改如何配置

    kvstroe默认的存储是filesystem,如果要改成为memcache 或者memcached
    则在config.php 文件中有要开启下面的配置(单个memcache服务)
# kvstore后台存储类
# define('KVSTORE_STORAGE', 'base_kvstore_filesystem');
# define('KVSTORE_STORAGE', 'base_kvstore_mysql');
define('KVSTORE_STORAGE', 'base_kvstore_memcache');
# define('KVSTORE_STORAGE', 'base_kvstore_dba');
# define('KVSTORE_STORAGE', 'base_kvstore_tokyotyrant');

# kvstore memcache服务器配置
# socket  'unix:///tmp/memcached.sock'
# server  '127.0.0.1:11211'
# multi   'unix:///tmp/memcached.sock,127.0.0.1:11211,127.0.0.1:11212'
define('KVSTORE_MEMCACHE_CONFIG', '127.0.0.1:11211'); 

# 多台kvstore memcache 的服务器配置只需要在ip后加“,”号

define('KVSTORE_MEMCACHE_CONFIG', 'unix:///tmp/memcached.sock,127.0.0.1:11211,127.0.0.1:11212'); 

三、KVstore的使用流程:

    1、先选择数据存储方式:非持久存储和持久存储
    2、调用过程:数据先从kv中取,没有从mysql中取,取出来放进kv中

四、kvstore封装好常用的接口:

static function config_prsistent($flag):设置是否持久化
static function instance($prefix) 实例化kvstore
public function increment($key,$offset=1):自增
public function decrement($key,$offset=1):自减
public function fetch($key,$value,$offset,$timeout_version=null):返回bool值和$_fetch_accoun调用次数,获取key值得内容
public function store($key,$value,$ttl=1):设置key对应的value,和返回次数
public function delete($key,$ttl=1):删除key对应的value,这里不是物理删除,只改变ttl对应的值来虚拟删除
public  function persitent($key,$value,$ttl=1):将数据永久的存在sdb_base_kvstore中,持久化存储
public function recoverry($record):回复对应的value
static public function delete_expire_data():根据过期时间再次对kvstore表进行删除
 注意:只有memcached支持inccrement和deincrement;mysql不支持方法recovery

五、实际应用场景演示:

一直认为,没有实际应用的理论都是扯淡,纸上谈兵谁不会,那小编在此给大家展示下实际应用的demo

demo1、文章浏览次数(热度)的统计:(ecstore中可以采用两种方式存和取kv值)

这里写图片描述

方式一、利用ecstore框架自身封装好的setConf(存值)和getconf(取值)函数

    ##首先根据文章id取文章取浏览次数,有则加1存入;无则存入首次访问

    $view_count=app::get('b2c')->getConf('view_count_').$_POST['acticle_id'];
    if($view_count){
        app::get('b2c')->setConf('view_count_'.$_POST['article_id'],$view_count+1);
    }else{
        app::get('b2c)->setConf('view_count_'.$_POST['article_id'],1);
    }

`方式二、利用ecstore框架底层的的store(存值)和fetch(取值)函数

    $key='view_count_'.$_POST['article_id'];
    $view_count=base_kvstore::instance('b2c')->fetch($key,$content);
    if($view_count){
        base_kvstore::instance('b2c')->store($key,int($content)+1);
    }else{
        base_kvstore::instance('b2c')->store($key,1);
    }
参考资料:
    《shopex:key-value》

转载请标明出处: 
    http://blog.csdn.net/a5485899/article/details/54092535
    本文出自:【蔡梦龙的博客】(http://blog.csdn.net/a5485899/) 

猜你喜欢

转载自blog.csdn.net/a5485899/article/details/54092535