关于Session缓存简单原理和实现


                        Session缓存简单原理:

        以前做过很多类是的缓存机制。比方说数据量比较多且基本变化和基本每次都需要的、不是很频繁变更的数据这类。我们都会做成缓存形式,保证访问速度。


        比放我们登录用户的数据一般就都是放在session当中。其实很多这类数据都可以直接放session中。


下面帖一篇不是本人自己的代码。基本差不多,原理是一样的可以看看


    private static Map<String, List<ProvinceGroup>> provinceCacheMap  = new HashMap<String, List<ProvinceGroup>>();


    private static Map<String, List<CategoryGroup>> categoryCacheMap  = new HashMap<String, List<CategoryGroup>>();


    private static Map<String, Date>                cacheTime = new HashMap<String, Date>();


public class DataCacheServiceImp implements DataCacheService {


    private static Map<String, List<ProvinceGroup>> provinceCacheMap  = new HashMap<String, List<ProvinceGroup>>();


    private static Map<String, List<CategoryGroup>> categoryCacheMap  = new HashMap<String, List<CategoryGroup>>();


    private static Map<String, Date>                cacheTime = new HashMap<String, Date>();
    
    private static Map<String, Object>           marketIndexDataCache = new HashMap<String ,Object>();//批发市场首页缓存数据


    private CircleDAO                               circleDAO;


    @Override
    public List<ProvinceGroup> listProvinceGroupsByCatId(String catId, String circleCat) {


        String key = catId == null || catId.equals("") ? "allCategory" : catId;


        List<ProvinceGroup> provinceGroups = provinceCacheMap.get(key);


        Date date = new Date();


        if (provinceGroups == null || provinceGroups.size() <= 0
                || DateUtil.isInAnHour(cacheTime.get(key), date)) {
            // 需要重新获取数据
            provinceGroups = circleDAO.groupProvinceByCategory(catId, circleCat);


            provinceCacheMap.put(key, provinceGroups);


            cacheTime.put(key,date);
        }


        return provinceGroups;
    }


    @Override
    public List<CategoryGroup> listCategoryGroupsByProvince(String province, String circleCat) {


        String key = province == null || province.equals("") ? "allProvince"
                : province;


        List<CategoryGroup> categoryGroups = categoryCacheMap.get(key);


        Date date = new Date();


        if (categoryGroups == null || categoryGroups.size() <= 0
                || DateUtil.isInAnHour(cacheTime.get(key), date)) {
            // 需要重新获取数据
            categoryGroups = circleDAO.groupCategoryByProvince(province,
                    circleCat);


            categoryCacheMap.put(key, categoryGroups);


            cacheTime.put(key, date);
        }


        return categoryGroups;
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值