前5個(gè)基于Redis的Java對象
Redis具有很多值得推薦的功能,包括速度,可伸縮性和可用性。但是,有一個(gè)問題是Redis不包括對Java之類的編程語言的內(nèi)置支持。相反,用戶需要為Redis安裝第三方Java客戶端,例如Redisson。
Redisson是Redis Java客戶端,其中包含許多熟悉的Java對象,接口和集合,這使Java開發(fā)人員比以往任何時(shí)候都更容易地開始使用Redis。下面,我們將討論Radisson用戶所依賴的5個(gè)基于Redis的優(yōu)秀Java對象。
1.Map
Java中的Map接口用于將鍵映射到值的對象。
Redisson使用RMap接口在Redis中實(shí)現(xiàn)Map 。旋轉(zhuǎn)地圖實(shí)現(xiàn)了所有的Redis的熟悉地圖的方法:containsKey(),containsValue(),get(),isEmpty(),keySet(),put(),putIfAbsent(),remove(),replace(),values(),等等。
以下是有關(guān)如何在Redisson中使用RMap接口的快速示例:
- RMap<String, SomeObject> map = redisson.getMap("anyMap");
- SmeObject prevObject = map.put("123", new SomeObject());
- 3
- SomeObject currentObject = map.putIfAbsent("323", new SomeObject());
- 4
- SomeObject obj = map.remove("123");
RMap接口包括對Async,Reactive和RxJava2的支持。此外,RMap還具有本地緩存和數(shù)據(jù)分區(qū)等功能,因此可以極大地加快讀取操作并提高可伸縮性。
2.Set
Java中的Set接口用于無重復(fù)值的元素的無序集合。
Redisson器具設(shè)置在Redis的與RSET接口。RSET實(shí)現(xiàn)所有的Redis的熟悉的設(shè)置方法:add(),addAll(),clear(),contains(),containsAll(),equals(),isEmpty(),remove(),removeAll(),size(),等等。
以下是有關(guān)如何在Redisson中使用RSet接口的快速示例:
- RSet<SomeObject> set = redisson.getSet("anySet");
- set.add(new SomeObject());
- set.remove(new SomeObject());
與RMap一樣,RSet也支持?jǐn)?shù)據(jù)分區(qū),以提高性能并加快讀/寫操作。另外,用戶可以為RMap中的元素定義驅(qū)逐策略(即每個(gè)條目的生存時(shí)間)。
3.holder
Java中的Holder類用于存儲指定類型的值,同時(shí)允許對該值進(jìn)行副作用修改(例如,為了在Java中實(shí)現(xiàn)按引用調(diào)用)。
Redisson通過RBucket接口在Redis中實(shí)現(xiàn)了Holder類,該接口可以容納任何類型的對象。RBucket工具方法,如compareAndSet(),get(),getAndDelete(),getAndSet(),set(),size(),trySet(),等等。對象的最大大小為512兆字節(jié)。
以下是有關(guān)如何在Redisson中使用RBucket接口的快速示例:
- RBucket<AnyObject> bucket = redisson.getBucket("anyObject");
- bucket.set(new AnyObject(1));
- AnyObject obj = bucket.get();
- bucket.trySet(new AnyObject(3));
- bucket.compareAndSet(new AnyObject(4), new AnyObject(5));
- bucket.getAndSet(new AnyObject(6));
RBucket接口包括對Async,Reactive和RxJava2的支持。
4.Lock
Java中的Lock類用于“鎖定”對共享資源的訪問,以同步多個(gè)線程。鎖是多線程和分布式編程的關(guān)鍵部分,這就是為什么鎖在Redisson用戶中也很受歡迎的原因。
Redisson通過RLock接口在Redis中實(shí)現(xiàn)Lock類。RLOCK實(shí)現(xiàn)所有的Redis的熟悉鎖方法:lock(),lockInterruptibly(),tryLock(),unlock(),等等。
以下是有關(guān)如何在Redisson中使用RLock接口的快速示例:
- RLock lock = redisson.getLock("myLock");
- //傳統(tǒng)的鎖定方法
- lock.lock();
- // 或獲取鎖定,并在10秒后自動將其解鎖
- lock.lock(10, TimeUnit.SECONDS);
- //或等待鎖獲取長達(dá)100秒
- //并在10秒后自動將其解鎖
- boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
- if (res) {
- try {
- ...
- } finally {
- lock.unlock();
- }
- }
RLock接口包括對Async,Reactive和RxJava2的支持。Redisson還實(shí)現(xiàn)了各種類型的鎖,例如公平鎖,MultiLock,Redlock和ReadWriteLocks。
5.ExecutorService
Java中的ExecutorService接口用于異步執(zhí)行Runnable和Callable對象。
Redisson實(shí)現(xiàn)了Redis的的ExecutorService的接口與RExecutorService接口。RExecutorService實(shí)現(xiàn)所有的Redis的熟悉的ExecutorService方法:invokeAll(),invokeAny(),isShutdown(),isTerminated(),shutdown(),shutdownNow(),submit(),等等。
以下是有關(guān)如何在Redisson中使用RExecutorService接口的快速示例:
- RExecutorService executorService = redisson.getExecutorService("myExecutor", options);
- executorService.submit(new RunnableTask(123));
- RExecutorService executorService = redisson.getExecutorService("myExecutor", options);
- Future<Long> future = executorService.submit(new CallableTask());
- Long result = future.get();
RExecutorService接口包括對Runnable和Callable對象,Lambda任務(wù)以及Spring Bean任務(wù)的支持。
結(jié)論
Redisson內(nèi)置了對Redis中許多最常見Java對象的內(nèi)置支持,包括Map,Set,Objectholder,Lock和ExecutorService。