项目作者: newpanjing

项目描述 :
简单的内存缓存实现,实现group概念,一个group里面是个有序的集合,集合支持key-value expire弥补redis list的不足
高级语言:
项目地址: git://github.com/newpanjing/group-cache.git
创建时间: 2016-08-06T04:25:03Z
项目社区:https://github.com/newpanjing/group-cache

开源协议:

关键词:
cache group-cache java-cache

下载


group-cache

简单的内存缓存实现,实现group概念,一个group里面是个有序的集合,集合支持key-valueexpire弥补redis list的不足

总共有3个类:

  • GroupCacheFactory 工厂用于获取Group
  • Group 组,存放多个key和value
  • CacheEntity 缓存实体,所有缓存的数据都是以CacheEntity为载体放入Group中

博客

https://www.88cto.com

测试代码:

  1. package com.qikenet.cache;
  2. import java.util.Random;
  3. public class CacheTest {
  4. public static void main(String[] args) {
  5. /**
  6. * 概念:
  7. * 组缓存,在传统redis、memcached 这一类的缓存容器中,都是key-value类型的
  8. * 所谓的组缓存,就是在key-value的外层加一个标识
  9. * 用list来做比较,在redis中,list的结构是这样的,并且list的某一项不能设置存活时间:
  10. * abc
  11. * 1
  12. * 2
  13. * 3
  14. *
  15. * 在GroupCache中结构是这样的 :
  16. * abc
  17. * a 1 10
  18. * b 2 5
  19. * c 3 1
  20. * 第一行:a代表key,1代表value,10代表存活10秒,存活时间以秒为单位
  21. */
  22. //创建一个工厂,暂时不支持持久化
  23. GroupCacheFactory factory=new GroupCacheFactory();
  24. //获取一个组
  25. Group group1=factory.group("group1");
  26. group1.push("a", 123);//默认永久存活
  27. group1.push("b", 321, 10);//存活10秒
  28. //查看还有多久失效
  29. System.out.println("group 1 的元素b 剩余失效时间:"+group1.ttl("b"));
  30. //检测值是否存在
  31. System.out.println("a是否存在:"+group1.exist("a"));
  32. System.out.println("c是否存在:"+group1.exist("c"));
  33. //获取有效的key
  34. System.out.println("group1 keys:"+group1.getKeys());
  35. //获取有效的value
  36. System.out.println("group1 values:"+group1.getValues());
  37. //通过key获取值
  38. System.out.println("通过a获取:"+group1.getValue("a"));
  39. //获取一个组,并设置容量为100,默认容量为1000,不同的group中数据不能共享
  40. Group group2=factory.group("group2",100);
  41. //如果push的数据大于容量,则会丢弃
  42. for(int i=0;i<101;i++){
  43. group2.push(String.valueOf(i), i, new Random().nextInt(10));
  44. }
  45. //获取存活的元素的数量
  46. System.out.println("group2大小:"+group2.size());
  47. //设置元素的存活时间
  48. group2.expire("2", 100);
  49. //删除一个元素
  50. group2.delete("3");
  51. System.out.println("group删除后的元素大小:"+group2.size());
  52. //获取group容量大小
  53. System.out.println("group2容量:"+group2.getCapacity());
  54. System.out.println(group2.getKeys());
  55. }
  56. }