17 Temmuz 2019 Çarşamba

SpringData Redis HashOperations Sınıfı

Giriş
Redis'te tanımlı ismi belli - örneğin "mymap" olan bir map'e key/value değerleri ekler.
- put() metodu ile nesne eklenir
- get() metodu ile nesneye erişilir
- delete() metodu ile nesne silinir
- entries() metodu ile tüm nesneler alınır

constructor
Örnek
Şöyle yaparız.
RedisTemplate<String, Object> redisTemplate = ...;
HashOperations<String, Long, Customer> hashOperations = redisTemplate.opsForHash();
Örnek
Şöyle yaparız
@Component
public class RedisUtil<T> {
    private RedisTemplate<String, T> redisTemplate;
    private ValueOperations<String, T> valueOperations;
    private ListOperations<String, T> listOperations;
    private SetOperations<String, T> setOperations;
    private HashOperations<String, Integer, T> hashOperations;

  @Autowired
  public RedisUtil(RedisTemplate<String, T> redisTemplate) {
    this.redisTemplate = redisTemplate;
    this.valueOperations = redisTemplate.opsForValue();
    this.listOperations = redisTemplate.opsForList();
    this.setOperations = redisTemplate.opsForSet();
    this.hashOperations = redisTemplate.opsForHash();
  }


  //region Hash
  public void saveHash(String key, Integer id, T value) {
    hashOperations.put(key, id, value);
  }

  public T findInHash(String key, int id) {
    return hashOperations.get(key, id);
  }

  public void deleteHash(String key, int id) {
    hashOperations.delete(key, id);
  }
  //endregion
}
Örnek
Elimizde şöyle bir kod olsun
import org.springframework.data.redis.core.RedisHash; import javax.persistence.Id; import java.io.Serializable; import java.util.UUID; @Data @AllArgsConstructor @NoArgsConstructor @RedisHash("Student") public class Student implements Serializable { @Id private String id = UUID.randomUUID().toString(); private String name; ... }
Şöyle yaparız
@Repository public class StudentRep { @Autowired private RedisTemplate template; private String HASH_KEY = "Student"; public Student addStudent(Student student){ template.opsForHash().put(HASH_KEY, student.getId(), student); return student; } public Student updateStudent(Student student) { template.opsForHash().put(HASH_KEY, student.getId(), student); return student; } public List<Student> getAll(){ return template.opsForHash().values(HASH_KEY); } public Student getStudentId(String id){ return (Student) template.opsForHash().get(HASH_KEY,id); } public String deleteStudent(String id){ try{ template.opsForHash().delete(HASH_KEY, id); return "Student delete"; } catch (Exception e){ return e.toString(); } } }
delete metodu
Örnek
Şöyle yaparız.
@Override
public void delete(Long id) {
  hashOperations.delete(KEY, id);
}
entries metodu
Örnek
Şöyle yaparız.
public final String key = "USER";

@Override
public Map findAll() {
  return hashOperations.entries(key);
}
get metodu
Örnek
Şöyle yaparız.
@Override
public Customer find(Long id) {
  return hashOperations.get(KEY, id);
}
put metodu
Örnek
Şöyle yaparız. RedisTemplate'in varsayılan davranışı JDK native serialization kullanmak. Bunun yerine nesneyi kendimiz json'a çeviriyoruz
TenantDatasource tenantDatasource = ...;
Map ruleHash = new ObjectMapper().convertValue(tenantDatasource, Map.class);
redisTemplate.opsForHash().put("multitenancy", "bd_tenant_a", ruleHash);
Okumak için şöyle yaparız
List<Map<String, Object>> datasourceConfigList = redisTemplate.opsForHash()
.values("multitenancy");
Örnek
Şöyle yaparız.
public final String key = "USER";


@Override
public void save(User user) {
  hashOperations.put(key,user.getId(),user);
}

@Override
public void update(User user) {
  hashOperations.put(key,user.getId(),user);
}

Hiç yorum yok:

Yorum Gönder