zoukankan      html  css  js  c++  java
  • Ehcache学习笔记(二) 根据条件筛选缓存中的数据

    Ehcache学习笔记(二)  根据条件筛选缓存中的数据

     

    Ehcache提供了很方便的索引机制,有的时候我们需要根据一些其他的条件对缓存中的数据进行索引,而不是简单根据KEY来进行索引。

     

    这是实体类 没什么好说的

    package com.epkj.test;
    
    import java.util.Date;
    
    public class User implements java.io.Serializable {
    
        private int id;
        
        private String name;
        
        private int age;
        
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        private Date brithray;
        
        private double money;
    
        public User() {
            super();
        }
    
        public User(int id, String name, int age, Date brithray, double money) {
            super();
            this.id = id;
            this.name = name;
            this.age = age;
            this.brithray = brithray;
            this.money = money;
        }
    
        @Override
        public String toString() {
            return this.id + "====" + this.age;
        }
        
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Date getBrithray() {
            return brithray;
        }
    
        public void setBrithray(Date brithray) {
            this.brithray = brithray;
        }
    
        public double getMoney() {
            return money;
        }
    
        public void setMoney(double money) {
            this.money = money;
        }
    }

     主要看XML

    <?xml version="1.0" encoding="UTF-8"?>
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
             updateCheck="true" monitoring="autodetect"
             dynamicConfig="true">
             
        <diskStore path="F:/"/>
        
        <cache 
            name="sampleCache" 
            maxElementsInMemory="1000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            memoryStoreEvictionPolicy="LRU"
        >
            <searchable>
                <searchAttribute name="name"/>
                <searchAttribute name="age" expression="value.getAge()"/>
            </searchable>
        </cache>
        
        <!-- 
            //定义查询的属性 可以有多重方式,这里不一一举例
            <searchable>
                <searchAttribute name="name"/>
                <searchAttribute name="age" expression="value.getAge()"/>
            </searchable>
            
            <searchable>
                <searchAttribute name="age" expression="value.person.getAge()"/>
            </searchable>
            
            <searchable>
                 <searchAttribute name="name" expression="element.toString()"/>
              </searchable>
         -->
    </ehcache>
    View Code

     查询的代码

    package com.epkj.test;
    
    import java.util.Date;
    import java.util.List;
    
    import net.sf.ehcache.CacheManager;
    import net.sf.ehcache.Ehcache;
    import net.sf.ehcache.Element;
    import net.sf.ehcache.search.Attribute;
    import net.sf.ehcache.search.Query;
    import net.sf.ehcache.search.Result;
    import net.sf.ehcache.search.Results;
    
    public class SerachTest {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            
            CacheManager manager = CacheManager.getInstance();
            
            Ehcache cache = manager.getCache("sampleCache");
            //创建测试数据放入缓存
            for (int i = 0; i < 50; i++) {
                Element element = null;
                if(i <= 20) {
                    element = new Element(i, new User(1, "Txxxxxx" + i, i, new Date(), 3500));
                } else {
                    element = new Element(i, new User(1, "Yxxxxxx" + i, i, new Date(), 3500));
                }
                cache.put(element);
            }
            
            //创建Query接口 用法跟hibernate的Query类似
            Query query = cache.createQuery();
            //取得属性
            Attribute<Integer> age = cache.getSearchAttribute("age");
            
            Attribute<String> name = cache.getSearchAttribute("name");
            
            //可以任务组合查询条件
            query.addCriteria(name.ilike("T*").and(age.between(10, 20)));
            
            //根据查询的条件 引入结果集
            query.includeValues().end();
            
            Results results = query.execute();
            
            List<Result> list = results.all();
            
            for (Result result : list) {
                System.out.println(result.getValue());
            }
        }
    
    }
    View Code

    以上是对Ehcache缓存元素的条件查询的一个总结。

  • 相关阅读:
    文本内容超长显示省略号,鼠标移上自动显示全部内容(适用于EasyUI DataGrid)
    Spring注入静态变量的方法,以及CXF如何获取客户端IP
    Agile PLM 表结构说明
    session_start() failed: .......No space left on device问题解决
    如何配置sublime xdebug进行远程调试
    宝塔面板for linux
    Ubuntu 16.04下ssh启用root登录
    mysql- Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
    表单重复提交、大并发库存超卖?面试官提出了一个老生常谈的问题,让我陷入了沉思...
    ubuntu16.04 wordpress建站教程
  • 原文地址:https://www.cnblogs.com/daxin/p/3095740.html
Copyright © 2011-2022 走看看