रेडिस आणि जावा सह डेटाबेस कॅशिंग

ब्लॉग

Redis आणि Java सह डेटाबेस कॅशिंग एक्सप्लोर करा आणि काही वेगवेगळ्या कॅशिंग स्ट्रॅटेजी पहा.



डेटाबेस कॅशिंग इतके महत्वाचे का आहे?

आपल्याकडे डेटाबेसमध्ये जितकी अधिक माहिती असेल तितकी ती हळूहळू कालांतराने होईल. अगदी डेटाबेस मॅनेजमेंट सिस्टीम जे अनेक समवर्ती विनंत्यांना समर्थन देण्यासाठी चांगल्या प्रकारे डिझाइन केलेले आहेत ते अखेरीस त्यांची मर्यादा गाठतील.

या कामगिरीच्या समस्यांना हाताळण्यासाठी डेटाबेस कॅशिंग ही सर्वात सामान्य रणनीती आहे. कॅशिंगमध्ये डेटाबेस क्वेरीचे परिणाम जलद आणि सुलभ असलेल्या ठिकाणी जतन करणे समाविष्ट आहे. जेव्हा योग्य प्रकारे केले जाते, कॅशिंग क्वेरी प्रतिसाद वेळा कमी करेल, आपल्या डेटाबेसवरील भार कमी करेल आणि खर्च कमी करेल.



तथापि, कॅशेस देखील काळजीपूर्वक हाताळणे आवश्यक आहे कारण ते अनिवार्यपणे वेगळ्या ठिकाणी आपल्या माहितीची दुसरी प्रत बनवतात. डेटाबेस आणि कॅशे दोन्ही सिंक्रोनाइझ आणि अद्ययावत ठेवणे आपल्या अपेक्षेपेक्षा एक कठीण आव्हान असू शकते. पुढील विभागात, आम्ही काही सर्वात सामान्य डेटाबेस कॅशिंग धोरणांवर चर्चा करू.

वेगवेगळ्या कॅशिंग रणनीती काय आहेत?

मॅन्युअल कॅशिंग (ज्याला कॅशे-साइड स्ट्रॅटेजी असेही म्हटले जाते) मध्ये डेटाबेस आणि कॅशे दोन्हीचे थेट व्यवस्थापन समाविष्ट असते. डेटाबेस क्वेरी सुरू करण्यापूर्वी तुमचा अनुप्रयोग कॅशेची तपासणी करतो आणि डेटाबेसमध्ये कोणतेही बदल केल्यानंतर ते कॅशे अपडेट करते.



योग्यरित्या अंमलात आणल्यास प्रभावी असताना, मॅन्युअल कॅशिंग अत्यंत कंटाळवाणे असू शकते, विशेषत: जर आपल्याला एकापेक्षा जास्त डेटाबेसची चौकशी करण्याची आवश्यकता असेल. या कारणांसाठी, विकसकांनी अनेक पर्यायी कॅशिंग धोरणांचा शोध लावला आहे.

वाचा-माध्यमातून कॅशिंग धोरण

रीड-थ्रू कॅशिंगमध्ये, अनुप्रयोग प्रथम कॅशेला विचारतो की त्याला आवश्यक असलेली माहिती आत आहे का. नसल्यास, ती डेटाबेसमधून माहिती पुनर्प्राप्त करते आणि कॅशे अद्यतनित करण्यासाठी वापरते. कॅशे प्रदाता किंवा कॅशे लायब्ररी कॅशे क्वेरी आणि अद्ययावत करण्याच्या तपशीलवार तर्कशास्त्रासाठी जबाबदार आहे.

जेव्हा अनुप्रयोग समान डेटाची वारंवार विनंती करतो तेव्हा रीड-थ्रू स्ट्रॅटेजी रीड-हेवी वर्कलोडसाठी सर्वोत्तम कार्य करते: उदाहरणार्थ, एक न्यूज वेबसाइट जे समान लेख वारंवार लोड करते.

रीड-थ्रू स्ट्रॅटेजीचा एक नकारात्मक भाग असा आहे की कॅशेला प्रथम क्वेरी नेहमी गहाळ होईल कारण विनंती केलेली माहिती आत नसण्याची हमी आहे. या समस्येला सामोरे जाण्यासाठी, डेव्हलपर्स अनेकदा वापरकर्त्यांकडून विनंती करण्याची शक्यता असलेल्या माहितीसह कॅशे उबदार करतात.

लिहा-माध्यमातून कॅशिंग धोरण

राईट-थ्रू कॅशिंगमध्ये, प्रथम कॅशे आणि डेटाबेसमध्ये दुसरे अपडेट केले जातात. अनुप्रयोगापासून कॅशेपर्यंत आणि कॅशेपासून डेटाबेसपर्यंत थेट रेषा आहे. रीड-थ्रू कॅशिंगसह एकत्रित केल्यावर, लेखन-माध्यमातून धोरण हमी देते की आपला डेटा सुसंगत असेल, मॅन्युअल कॅशे अवैध करण्याची आवश्यकता काढून टाकेल.

कॅशिंग धोरण मागे लिहा

लेखन-मागे कॅशिंगमध्ये (राईट-बॅक कॅशिंग म्हणूनही ओळखले जाते), अनुप्रयोग प्रथम कॅशेवर डेटा लिहितो. एका विलंब कालावधीनंतर, कॅशे ही माहिती डेटाबेसवर देखील लिहितो. राईट-बॅक कॅशे राईट-हेवी वर्कलोडसाठी सर्वोत्तम आहेत आणि काही अपयश आणि डाउनटाइमसह देखील चांगले काम करू शकतात.

रेडिसनसह जावा-आधारित रेडिस कॅशिंग

रेडिस डेटा संग्रहित करण्यासाठी की-व्हॅल्यू सिस्टम वापरून NoSQL डेटाबेससाठी सर्वात लोकप्रिय पर्यायांपैकी एक आहे. रेडिसन, जावा प्रोग्रामिंग भाषेतील रेडिससाठी क्लायंट लायब्ररी, सर्व परिचित जावा संग्रह वापरून रेडिस वैशिष्ट्यांमध्ये प्रवेश करणे सोपे करते.

रेडिसन आपल्याला बाह्य स्टोरेजमध्ये नकाशे मध्ये डेटा ठेवण्याची परवानगी देते. आपण डेटाबेस, वेब सेवा किंवा इतर कोणत्याही डेटा स्त्रोतासाठी कॅशिंग लागू करण्यासाठी ही कार्यक्षमता वापरू शकता.

Redis मध्ये वाचा-माध्यमातून कॅशिंग

रेडिसनसह रेडिसमध्ये रीड-थ्रू कॅशिंग कसे वापरावे याचे जावा उदाहरण खाली आहे.

कॅशेमध्ये विनंती केलेली एंट्री अस्तित्वात नसल्यास, ती लोड केली जाईल मॅपलोडर ऑब्जेक्ट:

MapLoader mapLoader = new MapLoader() { @Override public Iterable loadAllKeys() { List list = new ArrayList(); Statement statement = conn.createStatement(); try { ResultSet result = statement.executeQuery('SELECT id FROM student'); while (result.next()) { list.add(result.getString(1)); } } finally { statement.close(); } return list; } @Override public String load(String key) { PreparedStatement preparedStatement = conn.prepareStatement('SELECT name FROM student where id = ?'); try { preparedStatement.setString(1, key); ResultSet result = preparedStatement.executeQuery(); if (result.next()) { return result.getString(1); } return null; } finally { preparedStatement.close(); } } };

कॉन्फिगरेशन उदाहरण:

MapLoader mapLoader = new MapLoader() { @Override public Iterable loadAllKeys() { List list = new ArrayList(); Statement statement = conn.createStatement(); try { ResultSet result = statement.executeQuery('SELECT id FROM student'); while (result.next()) { list.add(result.getString(1)); } } finally { statement.close(); } return list; } @Override public String load(String key) { PreparedStatement preparedStatement = conn.prepareStatement('SELECT name FROM student where id = ?'); try { preparedStatement.setString(1, key); ResultSet result = preparedStatement.executeQuery(); if (result.next()) { return result.getString(1); } return null; } finally { preparedStatement.close(); } } };

रेडिसमध्ये लिहा-माध्यमातून कॅशिंग

रेडिसनसह रेडिसमध्ये रेडिसमध्ये राईट-थ्रू कॅशिंग कसे वापरावे याचे जावा उदाहरण खाली आहे.

जोपर्यंत कॅशे आणि डेटाबेस दोन्ही अद्ययावत केले जात नाहीत तोपर्यंत कॅशे अपडेट पद्धत परत येणार नाही MapWriter ऑब्जेक्ट:

MapLoader mapLoader = new MapLoader() { @Override public Iterable loadAllKeys() { List list = new ArrayList(); Statement statement = conn.createStatement(); try { ResultSet result = statement.executeQuery('SELECT id FROM student'); while (result.next()) { list.add(result.getString(1)); } } finally { statement.close(); } return list; } @Override public String load(String key) { PreparedStatement preparedStatement = conn.prepareStatement('SELECT name FROM student where id = ?'); try { preparedStatement.setString(1, key); ResultSet result = preparedStatement.executeQuery(); if (result.next()) { return result.getString(1); } return null; } finally { preparedStatement.close(); } } };

कॉन्फिगरेशन उदाहरण:

MapLoader mapLoader = new MapLoader() { @Override public Iterable loadAllKeys() { List list = new ArrayList(); Statement statement = conn.createStatement(); try { ResultSet result = statement.executeQuery('SELECT id FROM student'); while (result.next()) { list.add(result.getString(1)); } } finally { statement.close(); } return list; } @Override public String load(String key) { PreparedStatement preparedStatement = conn.prepareStatement('SELECT name FROM student where id = ?'); try { preparedStatement.setString(1, key); ResultSet result = preparedStatement.executeQuery(); if (result.next()) { return result.getString(1); } return null; } finally { preparedStatement.close(); } } };

Redis मध्ये कॅशिंग मागे लिहा

MapWriter इंटरफेसचा वापर मॅप ऑब्जेक्ट (कॅशे) आणि बाह्य स्टोरेज (डेटाबेस) मध्ये अतुल्यकालिकपणे अपडेट करण्यासाठी केला जातो. बॅकग्राउंड राईट ऑपरेशन एक्झिक्युशन सेटमध्ये वापरल्या जाणाऱ्या थ्रेड्सची रक्कम writeBehindThreads सेटिंग

खाली, आम्ही रेडिसनमध्ये रेडिस-आधारित लेखन-मागे कॅशिंग अंमलबजावणीसाठी कॉन्फिगरेशनचे जावा उदाहरण पाहतो:

MapLoader mapLoader = new MapLoader() { @Override public Iterable loadAllKeys() { List list = new ArrayList(); Statement statement = conn.createStatement(); try { ResultSet result = statement.executeQuery('SELECT id FROM student'); while (result.next()) { list.add(result.getString(1)); } } finally { statement.close(); } return list; } @Override public String load(String key) { PreparedStatement preparedStatement = conn.prepareStatement('SELECT name FROM student where id = ?'); try { preparedStatement.setString(1, key); ResultSet result = preparedStatement.executeQuery(); if (result.next()) { return result.getString(1); } return null; } finally { preparedStatement.close(); } } };

सर्व चर्चा केलेली रणनीती RMap, RMapCache, RLocalCachedMap आणि RLocalCachedMapCache ऑब्जेक्ट्ससाठी उपलब्ध आहेत. रेडिसन . या नंतरच्या दोन ऑब्जेक्टचा वापर केल्याने रेडिसमध्ये 45 पट जलद रीड ऑपरेशन्स होऊ शकतात.

मिस्ट एनएफटी रिलीज डेट

#डेटाबेस #रेडिस #जावा

dzone.com

रेडिस आणि जावा सह डेटाबेस कॅशिंग

Redis आणि Java सह डेटाबेस कॅशिंग एक्सप्लोर करा आणि काही वेगवेगळ्या कॅशिंग स्ट्रॅटेजी पहा.