J2Cache中二级缓存在redis服务器查询不到

发布于 2021-11-30 15:07:17 字数 173 浏览 859 评论 6

@红薯 你好,我把代码下载下来可以运行,但是我在redis服务器无法查询到我设置的key和value,对于二级缓存,region代表的是什么?我这里看不懂,麻烦你了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

复古式 2021-12-01 18:18:52
package net.oschina.j2cache.util;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * @author Vincent Zhao
 * @version 1.0.0
 * @Time 2015/4/13 10:19
 */
public class LockMapUtil {
    private final static ConcurrentMap<Integer,Object> lockMap=new ConcurrentHashMap<Integer, Object>();

    /**
     * 添加锁到锁集合中
     * @param key  hash键值
     */
    public static Object addLock(int key){
        return lockMap.putIfAbsent(key,new Object());
    }

    /**
     * 根据键值获取锁对象
     * @param key
     * @return
     */
    public static Object getLock(int key){
        return lockMap.get(key);
    }

}

眼眸 2021-12-01 18:03:14
public CacheObject get(String region, Object key) {

        int keyCode = (region + key).hashCode();
        Object lock = LockMapUtil.addLock(keyCode);
        if (lock == null) {
            lock = LockMapUtil.getLock(keyCode);
        }

        CacheObject obj = new CacheObject();

        obj.setRegion(region);
        obj.setKey(key);

        if ((region != null) && (key != null)) {
            Object value1 = CacheManager.get(LEVEL_1, region, key);
            if (value1 == null) {
                synchronized (lock) {
                    value1 = CacheManager.get(LEVEL_1, region, key);
                    if (value1 != null) {
                        obj.setLevel(LEVEL_1);
                        obj.setValue(value1);
                        return obj;
                    }
                    Object value2 = CacheManager.get(LEVEL_2, region, key);
                    if (value2 != null) {
                        obj.setValue(value2);
                        obj.setLevel(LEVEL_2);
                        CacheManager.set(LEVEL_1, region, key, obj.getValue());
                    }
                }
            } else {
                obj.setValue(value1);
                obj.setLevel(LEVEL_1);
            }
        }
        return obj;
    }

狼亦尘 2021-12-01 15:46:05

我刚从重新看了 是region和key的组合 然后转为byte字节数组组成的key

怎言笑 2021-12-01 14:56:36

回复

流心雨 2021-12-01 14:27:05

回复
我刚从测试了下,出现一个问题:10000个线程同时从缓存取,大约前面10个左右都是从L2取得,后面都是从L1取得;我把get方法添加锁,只有第一个从L2取,剩下的都是从L1取,测试效率差距不大

半世蒼涼 2021-11-30 21:33:34

二级缓存里没有 region 的东西哦

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文