[REDIS] 레디 스 사용 RedisTemplate에서 설정 값을 가져옵니다
REDIS레디 스 사용 RedisTemplate에서 설정 값을 가져옵니다
나는 Jedis를 사용하여 레디 스에서 값을 검색 할 수 있어요 :
public static void main(String[] args) {
Jedis jedis = new Jedis(HOST, PORT);
jedis.connect();
Set<String> set = jedis.smembers(KEY);
for (String s : set) {
System.out.println(s);
}
jedis.disconnect();
jedis.close();
}
나는 봄의 RedisTemplate를 사용하려고 할 때, 나는 모든 데이터를 받고 있지 않다. 내 데이터 세트로 레디 스에 저장됩니다.
// inject the actual template
@Autowired
private RedisTemplate<String, Object> template;
// inject the template as SetOperations
@Resource(name="redisTemplate")
private SetOperations<String,String> setOps;
public String logHome() {
Set<String> set = setOps.members(KEY);
for(String str:set){
System.out.println(str); //EMPTY
}
Set<byte[]> keys = template.getConnectionFactory().getConnection().keys("*".getBytes());
Iterator<byte[]> it = keys.iterator();
while(it.hasNext()){
byte[] data = (byte[])it.next();
System.out.println(new String(data, 0, data.length)); //KEYS are printed.
}
Set<Object> mySet = template.boundSetOps(KEY).members();
System.out.println(mySet); //EMPTY
return "";
}
누군가가 내가 놓친 거지 무엇을 나에게 지적시겠습니까?
편집 : RedisTemplate에 대한 나의 XML을 설정.
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
p:connection-factory-ref="jedisConnectionFactory"/>
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:host-name="myhostname" p:port="6379" />
해결법
-
==============================
1.당신은 구성의 시리얼에 있습니다.
당신은 구성의 시리얼에 있습니다.
레디 스 템플릿은 키 값과 해시 키 / 값을 시리얼을 사용합니다. 시리얼은 레디 스에 저장되어있는 표현으로 Java 입력을 변환하는 데 사용됩니다. 당신은 아무것도, JdkSerializationRedisSerializer에 시리얼 기본값을 구성하지 않으면. 당신은 당신의 자바 코드에서 핵심 키를 요청 그렇다면, 시리얼 라이저의 변환을하는
"\xac\xed\x00\x05t\x00\x03key"
봄 데이터 레디 스 쿼리 레디 스의 핵심으로 그 바이트를 사용합니다.
당신은 봄 데이터 레디 스 데이터를 추가 할 수 있습니다 그리고 그것은 레디 스-CLI를 사용하여 쿼리 :
template.boundSetOps("myKey").add(new Date());
다음의 레디 스-CLI
127.0.0.1:6379> keys * 1) "\xac\xed\x00\x05t\x00\x05myKey" 127.0.0.1:6379> SMEMBERS "\xac\xed\x00\x05t\x00\x05myKey" 1) "\xac\xed\x00\x05sr\x00\x0ejava.util.Datehj\x81\x01KYt\x19\x03\x00\x00xpw\b\x00\x00\x01N\xcf#\x9cHx"
보시다시피, 문자열 및 날짜는 자바 직렬화 된 오브젝트를 표현 어떤 미친 바이트로 직렬화된다.
귀하의 코드는 문자열 기반의 키와 값을 저장할 제안합니다. 그냥 RedisTemplate에 StringRedisSerializer을 설정
자바 구성
redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new StringRedisSerializer());
XML 구성
<bean id="stringSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="jedisConnectionFactory"> <property name="keySerializer" ref="stringSerializer"/> <property name="valueSerializer" ref="stringSerializer"/> </bean> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="myhostname" p:port="6379"/>
다음과 같은 코드의 외모를 실행 한 후 출력 :
value key [value]
봄 데이터 레디 스 다양한 시스템 간의 메시지 교환을 허용 몇 가지 흥미로운 시리얼있다. 당신은 시리얼 라이저 내장에서 하나를 선택할 수 있습니다
또는 당신의 자신을 만들 수 있습니다.
나는 당신의 질문의 결과를 확인하기 위해 스프링 데이터 레디 스 1.5.1.RELEASE 및 jedis 2.6.2을 사용했다. HTH, 마크
또한 읽기 :
-
==============================
2.당신은 Redisson으로 훨씬 쉽게 할 수 있습니다 :
당신은 Redisson으로 훨씬 쉽게 할 수 있습니다 :
public static void main(String[] args) { Config conf = new Config(); conf.useSingleServer().setAddress(host + ":" + port); RedissonClient redisson = Redisson.create(conf); RSet<String> set = redisson.getSet(KEY) for (String s : set.readAllValues()) { System.out.println(s); } redisson.shutdown(); }
연결이 framewrok 핸들 직렬화 및 작업은 매번 그것을 처리 할 필요가 없습니다. 당신은 자바 객체 (설정,지도, 목록 ...)와 작업에 사용되는 레디 스와 작업 할 수 있습니다. 너무 많은 인기 코덱을 지원합니다.
from https://stackoverflow.com/questions/31608394/get-set-value-from-redis-using-redistemplate by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 어떻게하면 (즉,이 Sidekiq에 대한 인증을 필요로 :: 웹 도구) 내 / sidekiq 경로를 암호로 보호 할 수 있습니까? (0) | 2020.01.12 |
---|---|
[REDIS] 캐시 SQL 결과에 레디 스를 사용하여 (0) | 2020.01.12 |
[REDIS] '서버에서 라인을 읽는 동안 오류'Predis을주고있다 (0) | 2020.01.12 |
[REDIS] Memcache의 비교가, 레디 스 분산 캐싱 프레임 워크으로 Ehcache [폐쇄] (0) | 2020.01.12 |
[REDIS] AWS 마이크로 인스턴스 레디 스를 설치 (0) | 2020.01.12 |