缓存框架接口设计

缓存框架接口

功能

存储业务数据,通过缓存方式提高数据存取速度,减少网络数据请求。

目标

  • 提供Heap缓存、Disk缓存、数据库缓存
  • 提供内存大小、缓存有效时间等配置
  • 将数据存储单元化,将功能内聚的数据以单元形式管理

接口

Cache<V>

缓存存储单元接口,提供读取接口。

  • 方法
    • V get(String key)
      通过键值,获取值。
    • boolean put(String key, V value)
      存储键值对。
    • V remove(String key)
      移除键值对,返回值为删除的值。
    • void clear()
      清空所有键值对。
    • boolean containsKey(String key)
      是否含有键值对。
    • CacheTransaction beginTransaction()
      开启事务,返回缓存事务类。

CacheTransaction

缓存事务类,多个数据同时存取就要使用事务,事务保证数据的原子性、一致性、隔离性、持续性。

  • 方法
    • boolean commit()
      提交相应的操作。

CacheManager

缓存管理接口,用来管理存储单元;

  • 方法
    • Cache<Object> createCache(String alias)
      创建缓存存储单元。
    • Cache<Object> createCache(String alias, CacheConfiguration config)
      创建制定配置的缓存存储单元。
    • Cache<V> createCache(String alias, Class<V> cls)
      创建存储类型的缓存存储单元。
    • Cache<V> createCache(String alias, Class<V> cls, CacheConfiguration config)
      创建指定存储类型及配置的缓存存储单元。

CacheConfiguration

缓存配置类,用来配置缓存的属性。(接口暂时列两个)

  • 方法
    • void setMaxHeapSize(long maxHeapSize)
      设置内存最大值
    • void setMaxDiskSize(long maxDiskSize)
      设置硬盘存储最大值

CacheManagerBuilder

  • 方法
    • CacheManager build()
      创建缓存管理实例

IKeyGenerator

键值生成器接口,创建唯一key值来支持对象的唯一性

  • 方法
    • String getKey()
      获取键值

示例

简单数据示例

第一步,创建CacheManager.

    CacheManager cacheManager = new CacheManagerBuilder().build();

第二步,创建Cache

    Cache<User> cache = cacheManager.createCache("user");

第三步,调用存取接口

    cache.put("UER_KEY", new User("zliang", "123456"));

复杂关联数据

第一步,对于比较复杂的数据,需实现IKeyGenerator。

public DeviceInfo implements IKeyGenerator{

        private String mSnCode;

        public String getSnCode()
        {
            return mSnCode;
        }

        public String getKey()
        {
            return mSnCode;
        }
}

public ChannelInfo implements IKeyGenerator {
    private String mDeviceSncode;
    private int mIndex;

    public String getKey()
    {
        return mDeviceKey+"$"+mIndex;
    }
}

第二步,创建Cache

    Cache<Object> cache = cacheManager.createCache("device");

第三步 ,调用存取接口

    DeviceInfo device = new Device("1DSFS22233", ...);  
    cache.put(device.getKey(), device);

第四步,如果涉及多数据存储要采用事务,保证数据的一致性

    public void saveChannel(Cache cache, deviceKey){

        CacheTransaction transaction = cache.beginTransaction();

        DeviceInfo deviceInfo = (DeviceInfo)cache.get(deviceKey);

        ChanneInfo channelInfo = new Channel(deviceInfo.getSnCode(), 0, ...);
        ChanneInfo channelInfo1 = new Channel(deviceInfo.getSnCode(), 1, ...);
        cache.put(channelInfo.getKey(), channelInfo );
        cache.put(channelInfo1.getKey(), channelInfo1 );

        transaction.commit();
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值