লাইটওয়েট জাভা অবজেক্ট ক্যাশে এপিআই [বন্ধ]


99

প্রশ্ন

আমি একটি জাভা ইন-মেমোরি অবজেক্ট ক্যাচিং এপিআই খুঁজছি। কোন সুপারিশ? অতীতে আপনি কী সমাধান ব্যবহার করেছেন?

কারেন্ট

এখনই, আমি কেবল একটি মানচিত্র ব্যবহার করছি:

Map cache = new HashMap<String, Object>();
cache.put("key", value);

প্রয়োজনীয়তা

এই জাতীয় বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করতে আমার ক্যাশে বাড়ানো দরকার:

  • সর্বোচ্চ আকার
  • বেঁচে থাকার সময়

তবে, আমার মতো আরও পরিশীলিত বৈশিষ্ট্যগুলির প্রয়োজন নেই:

  • একাধিক প্রক্রিয়া (ক্যাশে সার্ভার) থেকে অ্যাক্সেস
  • অধ্যবসায় (ডিস্কে)

পরামর্শ

মেমোরি ক্যাচিং:

  • পেয়ারা ক্যাশেবিল্ডার - সক্রিয় বিকাশ। এই উপস্থাপনা দেখুন ।
  • LRUMap - API এর মাধ্যমে কনফিগার করুন। টিটিএল নেই। উদ্দেশ্যটি ক্যাচিংয়ের জন্য নির্মিত নয়।
  • whirlycache - XML ​​কনফিগারেশন। মেলিংয়ের তালিকা। সর্বশেষ আপডেট 2006
  • cache4j - এক্সএমএল কনফিগারেশন। রাশিয়ান ভাষায় ডকুমেন্টেশন। সর্বশেষ আপডেট 2006

এন্টারপ্রাইজ ক্যাচিং:

  • জে সি এস - প্রোপার্টি কনফিগারেশন। বিস্তৃত ডকুমেন্টেশন।
  • এহছে - এক্সএমএল কনফিগারেশন। বিস্তৃত ডকুমেন্টেশন। গুগল হিট অনুসারে এখন পর্যন্ত সবচেয়ে জনপ্রিয়।

4
আপনি পেয়ারা ক্যাশে অন্তর্ভুক্ত করতে পরামর্শগুলিতে মেমোরি ক্যাশে বিভাগটি সম্পাদনা করতে পারেন? আমি ঠিক আপনার মতো একটি হালকা ওজনের ক্যাচিং ব্যবস্থা খুঁজছিলাম এবং এই প্রশ্নটি পেয়েছি তবে পেয়ারা খুঁজে পাইনি কারণ এটি নিচে down এখন আমি পেয়ারা ক্যাশে প্যাকেজটি ব্যবহার করছি এবং এটি আশ্চর্যজনক।
andras

4
সম্পন্ন. :-) আপনি এটি পছন্দ করে খুব আনন্দিত!
কেভিন বোউরিলিয়ন

হতে পারে আপনি তুলনামূলকভাবে নতুন ক্যাশে 2 কে যোগ করার বিষয়েও বিবেচনা করতে চান । তাদের বেঞ্চমার্ক পৃষ্ঠায় বলা হয় যে এটির এহচে এবং পেয়ারা তুলনায় অনেক ভাল পারফরম্যান্স রয়েছে।
ব্যবহারকারী 30000

উত্তর:


57

EHCache খুব সুন্দর। আপনি মেমরি ক্যাশে একটি তৈরি করতে পারেন। মেমরি ক্যাশে তৈরির উদাহরণ হিসাবে তাদের কোড নমুনাগুলি পরীক্ষা করে দেখুন । আপনি সর্বোচ্চ আকার এবং বেঁচে থাকার সময় নির্দিষ্ট করতে পারেন।

EHCache কিছু উন্নত বৈশিষ্ট্য সরবরাহ করে, তবে সেগুলি ব্যবহারে আপনার আগ্রহী না হলে - করবেন না। তবে আপনার প্রয়োজনীয়তা যদি কখনও পরিবর্তিত হয় তবে তারা সেখানে আছেন তা জেনে ভাল।

এখানে মেমরি ক্যাশে রয়েছে। কোডে তৈরি হয়েছে, কোনও কনফিগারেশন ফাইল নেই।

CacheManager cacheManager = CacheManager.getInstance();
int oneDay = 24 * 60 * 60;
Cache memoryOnlyCache = new Cache("name", 200, false, false, oneDay, oneDay);
cacheManager.addCache(memoryOnlyCache);

একটি ক্যাশে তৈরি করে যা 200 টি উপাদান রাখে এবং 24 ঘন্টা একটি টিটিএল রাখে।


4
EHCache কি কেবলমাত্র অবজেক্টটির উল্লেখ করে বা এটি সিরিয়ালাইজ করে এবং তার পরিবর্তে অবজেক্টটিকে ডিসরিয়ালাইজ করে?
Phng Nguyễn

4
EHCache একটি হেভিওয়েট সমাধান? অ্যান্ড্রয়েডে একটি এপিআই ক্যাশে প্রয়োগের জন্য আমরা বিদ্যমান ক্যাচিং সমাধানগুলি সন্ধান করছি।
ম্যাথিয়াস

4
এটি অ্যান্ড্রয়েডের পক্ষে খুব ভারী। আমি কিটি ক্যাশে ব্যবহার করছি এবং এটি এত নিখুঁত!
ফিলিপ

@ স্টিভেট কে, আমি এই ক্যাশে প্রযুক্তিটি জানার জন্য দেরি করেছি, তবে আমার ধারণা যে getInstance () সরানো হয়েছে বা পরিবর্তিত হয়েছে।
মেনাই আলা এডিন - আলাদিন

46

আমি গুগল পেয়ারা ( এপিআই ) এর MapMakerসাথে আসা সত্যিই পছন্দ করি

জাভাডকের একটি সুন্দর ঝরঝরে উদাহরণ রয়েছে যা এর ব্যবহারের সহজতা এবং শক্তি উভয়ই দেখায়:

ConcurrentMap<Key, Graph> graphs = new MapMaker()
   .concurrencyLevel(32)
   .softKeys()
   .weakValues()
   .expiration(30, TimeUnit.MINUTES)
   .makeComputingMap(
       new Function<Key, Graph>() {
         public Graph apply(Key key) {
           return createExpensiveGraph(key);
         }
       });

এছাড়াও, পেয়ারা 10.0 প্রকাশ করুন আরও ব্যাপক com.google.common.cacheপ্যাকেজ চালু করেছে ( সেগুলি কীভাবে ব্যবহার করবেন সে সম্পর্কে একটি দুর্দান্ত উইকি এন্ট্রি রয়েছে )।



@ ম্যাক্সটি: ধন্যবাদ, আমি লিঙ্কটি যুক্ত করেছি, এই জাতীয় সংযোজনগুলির জন্য একটি সম্পাদনা নির্দ্বিধায় নির্দ্বিধায়।
জোছিম সউর

10

আপনি এখানে KittyCache নামক আমার ছোট ক্যাশে পাঠাগারটিও দেখতে পারেন:

https://github.com/treeder/kitty-cache

কিছু কর্মক্ষমতা মানদণ্ড বনাম এছছে।

এটি সরলজেপিএ প্রকল্পে দ্বিতীয় স্তরের ক্যাশে হিসাবে ব্যবহৃত হয় ।


4
খুব ভাল, তবে যদি এটিতে টিটিএল থাকে।
রোসদী কাসিম

ধন্যবাদ! আমি যে কোডটি টাইপ করছিলাম তার আগেই আমি ভেবেছিলাম যে কেউ ইতিমধ্যে কিছু
সসার করেছে কি

@ রোসাদিকাসিম এটিতে টিটিএল আসলে পুটে () কল রয়েছে, যেমন: ক্যাশে.পুট ("মাইকি", মান, 500); 500 টিটিএল।
ট্র্যাভিস রেডার

4
@ ট্র্যাভিসআর ভাল ..., তখন টিটিএল ফিরে ছিল না ..: পি
রোসদী কাসিম

আহ্, মন্তব্যটি কত আগে হয়েছিল তা বুঝতে পারিনি।
ট্র্যাভিস রেডার

9

তৃতীয় পক্ষের জার ছাড়াই আপনি একটি সহজ ক্যাশে প্রয়োগ করতে লিংকডহ্যাশম্যাপটি দেখতে পারেন:

    Map <String, Foo> cache = new LinkedHashMap<String, Foo>(MAX_ENTRIES + 1, .75F, true) {

        public boolean removeEldestEntry(Map.Entry<String, Foo> eldest) {
            return size() > MAX_ENTRIES;
        }
    };

তাহলে আপনি ক্যাশে থেকে পেতে পারেন

    Foo foo = cache.get(key);
    if (foo == null && !cache.containsKey(key)) {
        try {
            FooDAO fooDAO = DAOFactory.getFooDAO(conn);
            foo = fooDAO.getFooByKey(key);
            cache.put(key, foo);
        } catch (SQLException sqle) {
            logger.error("[getFoo] SQL Exception when accessing Foo", sqle);
        }
    }

পাঠকের জন্য ব্যায়াম হিসাবে বাকি বাকি :)


4
আমি মনে করি না এই পদ্ধতির টিটিএল ক্ষমতা রয়েছে। যদিও এটি আপনার নিজের রোলিংয়ের দিকে ভাল শুরু হবে।
চেজ সেয়বার্ট

হ্যাঁ, আমি পাঠকের অনুশীলনের অংশ হিসাবে টিটিএল স্টাফ ছেড়ে দেব: পি - এবং অবশ্যই তৃতীয় পক্ষের লিবস আপনার নিজের রোলিংয়ের চেয়ে অনেক বেশি পরীক্ষা করা হবে।
জিবিবি


5

জে সি এস চেষ্টা করা হয়েছে এবং সত্য। যদিও ক্যাশিং প্রক্রিয়াগুলি যতটা হালকা হয় ততই আপনি আসল কোডটি খনন করতে পারেন এবং প্রচ্ছদের নীচে হ্যাশম্যাপের সাহায্যে তারা কী করেন তা নকল করতে পারেন যা আপনার প্রয়োজন এবং ঠিক আর নেই। আপনি যা খুঁজছেন তা সম্পর্কে আপনার কাছে বেশ ভাল ধারণা রয়েছে বলে মনে হয়।


আমি আপনি কি বলতে চান অনুমান এটা না যতটা ক্যাশে মেকানিজম যেতে আলো? যদিও এটি অন্যতম জনপ্রিয় উদ্যোগ হিসাবে মনে হচ্ছে।
চেজ সেবার্ট

3

জাভা জন্য মেমক্যাচ ক্লায়েন্ট আছে। http://www.danga.com/memcached/ কে ক্যাচিং সার্ভার হিসাবে আলাদা প্রক্রিয়া প্রয়োজন তবে শক্তিশালী জিনিস।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.