2 Aralık 2020 Çarşamba

Jedis Sınıfı

Giriş
Şu satırı dahil ederiz
import redis.clients.jedis.Jedis;
constructor - host + port
Daha sonra auth() metodunu çağırmak gerekir

Örnek
Şöyle yaparız
Jedis jedis = new Jedis(host, port);
jedis.auth(password);

flushAll metodu
Tüm Redis önbelliğini temizler.

Örnek
Şöyle yaparız
public void clearAll() {
  Jedis jedis = null;
  try {
    jedis = acquireJedisInstance();
    jedis.flushAll();
  } catch (Exception e) {
    logger.error("Error occured while flushing all data from the cache ", e.getMessage());
    releaseJedisInstance(jedis);
    throw new RuntimeException(e);
  } finally {
    releaseJedisInstance(jedis);
  }
}
1. String Veri Yapısı
Key olarak string, value olarak string kullanılır. 
get() ve set() kullanılır

get metodu
Örnek
Şöyle yaparız
Jedis jedis = new Jedis(host, port);
jedis.auth(password);
jedis.set("welcome", "world");
String value = jedis.get("welcome");
Örnek
Şöyle yaparız
public Employee retrieveEmployee(String employeeId) {
  Jedis jedis = null;
  try {
    jedis = acquireJedisInstance();
    String employeeJson = jedis.get(employeeId);
    if (StringUtils.hasText(employeeJson)) {
      return gson.fromJson(employeeJson, Employee.class);
    }
  } catch (Exception e) {
    logger.error("Error occured while retrieving data from the cache ", e.getMessage());
    releaseJedisInstance(jedis);
    throw new RuntimeException(e);
  } finally {
    releaseJedisInstance(jedis);
  }
  return null;
}
keys metodu
Örnek
Şöyle yaparız
Set<String> keys = jedis.keys("test:sites:info:*");
set metodu
Kullanımı şöyle
jedis.set("key", "value");
Örnek
Şöyle yaparız. Burada nesneye TTL değeri de veriliyor.
//TTL(Time to live) of session data in seconds 
@Value("${redis.sessiondata.ttl}")
private int sessiondataTTL;

public Employee storeEmployee(String employeeId, Employee employee) {
  Jedis jedis = null;
  try {
    jedis = acquireJedisInstance();
    String json = gson.toJson(employee);
    jedis.set(employeeId, json);
    jedis.expire(employeeId, sessiondataTTL);
  } catch (Exception e) {
    logger.error("Error occured while storing data to the cache ", e.getMessage());
    releaseJedisInstance(jedis);
    throw new RuntimeException(e);
  } finally {
    releaseJedisInstance(jedis);
  }
  return employee;
}
setnx metodu
setnx metodu yazısına taşıdım

2. List Veri Yapısı
Key olarak string, liste elemanları olarak string kullanılır. Listedeki key değeri bilenen bir nesneye yine get() metodu ile erişebiliriz. 

lpush(), rpop() kullanılır. 

del metodu - String
Örnek
Şöyle yaparız
Jedis jedis = ...;
String keyPattern = ...;
Set<String> keysToDelete = jedis.keys(keyPattern);
for (String key : keysToDelete) {
  jedis.del(key);
}

del metodu - Array<String>
Belirtilen key'leri siler

Örnek
Şöyle yaparız. Burada employeeId listesindeki tüm key'ler alınıyor
public void flushEmployeeCache(String employeeId) {
  Jedis jedis = null;
  try {
    jedis = acquireJedisInstance();
    List<String> keys = jedis.lrange(employeeId, 0, -1);
    if (!CollectionUtils.isEmpty(keys)) {
      // add the list key in as well
      keys.add(employeeId);
      // delete the keys and list
      jedis.del(keys.toArray(new String[keys.size()]));
    }
  } catch (Exception e) {
    logger.error("Error while flushing specific data from the cache ", e.getMessage());
    releaseJedisInstance(jedis);
    throw new RuntimeException(e);
  } finally {
    releaseJedisInstance(jedis);
  }
}
lrange metodu
balls listesine "cricket_160","football_450","volleyball_270" eklenebilir. 
Örnek
Şöyle yaparız. Burada balls listesindeki ilk 2 eleman alınıyor.
String key = "balls";
long start = 0;
long stop = 2;
List<String> list = jedis.lrange(key, start, stop);

3. Set Veri Yapısı
Key olarak string, set elemanları olarak string kullanılır
sadd() smembers(),sismember() kullanılır

4. HashVeri Yapısı
İsmi olan bir nesne ve nesneye ait property'ler gibi düşünülür. Key olarak string, Nesne Property/Value olarak string kullanılır

hset(), hget(), hgetAll() kullanılır

Örnek - hgetAll()
Şöyle yaparız
String key = ...;
Map<String, String> fields = jedis.hgetAll(key);

5. Sorted Set Veri Yapısı
Map olarak <String,Double> gibi bir şey kullanılır.
put(), zrevrange(), zrevrank() kullanılır

6. Stream
Örnek - Processor
Şöyle yaparız
Jedis conn = ...;
String consumerName = ...;
String streamName = ...;
List<Entry<String, List<StreamEntry>>> results = conn.xreadGroup(
  consumerGroupName, 
  consumerName, 
  500,
  15000, 
  false, 
  Map.entry(streamName, StreamEntryID.UNRECEIVED_ENTRY));
Sonra şöyle yaparız
for (Entry<String, List<StreamEntry>> result : results) {
  List<StreamEntry> entries = result.getValue();
  for (StreamEntry entry : entries) {

    String tweetid = entry.getFields().get("id");
    String hashName = "tweet:" + tweetid;

    try {
      // simulate random failure/anomaly. ~ 20% will NOT be processed and ACKed. this
      // will cause these entries to added to pending-entry-list (obtained via XPENDING)
      if (!(random.nextInt(5) == 0)) {
        conn.hset(hashName, entry.getFields());
        System.out.println("saved tweet to hash " + hashName);

        conn.xack(streamName, consumerGroupName, entry.getID());
      } else {
        System.out.println("not processed - " + hashName);
      }
    } catch (Exception e) {
      ...
    }
  }
}

Transactions
Örnek ver

Pipelining
Örnek
Şöyle yaparız
Pipeline pipeline = jedis.pipelined();
pipeline.set("key1", "value1");
pipeline.set("key2", "value2");
pipeline.sync();
Publish/Subscribe
Örnek ver



Hiç yorum yok:

Yorum Gönder