메이븐에 아래 의존 라이브러리를 추가하고
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
아래처럼 pool 객체를 생성 하여 제어한다
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
JedisPool pool = new JedisPool(jedisPoolConfig, "192.168.0.31", 6379, 1000, "alaneoqkr!@#");
Jedis jedis = pool.getResource();
String test = jedis.get("aaa");
System.out.println(test);
if (jedis != null) {
jedis.close();
}
pool.close();
하지만 이와같은 방법은 매번 close 작업을 해야하고
value 값을 json 형태로 저장 했을때 매번 vo 또는 map 객체로 컨버팅 작업이 필요하다
즉, 코딩양이 늘어난다
그럼 xml 파일을 통해 bean 을 설정 하는 방법을 알아보자
일단 필요한 의존 라이브러리를 pom.xml 에 추가한다
<!-- redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.6.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
그다음 WEB-INF 디렉토리 하위에 root-context.xml 파일을 수정한다.
<!-- jedis poolConfig bean 등록 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig" />
<!-- jedis jedisConnectionFactory 설정 -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="usePool" value="true" /> pool 사용여부
<property name="hostName" value="192.168.0.31" /> 호스트
<property name="port" value="6379" /> 포트
<property name="poolConfig" ref="jedisPoolConfig" /> 위에서 생성한 pool
<property name="password" value="*******" /> 비밀번호
</bean>
<!-- redis 템플릿 설정 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<!-- 위에서 생성한 jedisConnectionFactory 를 꽂아줌 -->
<property name="connectionFactory" ref="jedisConnectionFactory" />
<!-- 키는 string, value 는 Object 로 설정 -->
<!-- keySerializer, hashKeySerializer 는 StringRedisSerializer 로 잡고 -->
<!-- valueSerializer, hashValueSerializer 는 GenericJackson2JsonRedisSerializer -->
<!-- 로 잡은후 생성자로 Object 객체를 넣어주었다. -->
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer">
<constructor-arg value="java.lang.Object" />
</bean>
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
<constructor-arg value="java.lang.Object" />
</property>
</bean>
spring 코드
controller 또는 service 에 ( 보통은 service) redisTemplate 객체를 선언하고 사용할 Operation 을 선언한다 난 일단 다 했다
@Autowired
RedisTemplate<String, Object> redisTemplate;
@Resource(name="redisTemplate")
private ValueOperations<String, Object> valueOps;
@Resource(name="redisTemplate")
private SetOperations<String, String> setOps;
@Resource(name="redisTemplate")
private ListOperations<String, Object> listOps;
@Resource(name="redisTemplate")
private ZSetOperations<String, String> zSetOps;
@Resource(name="redisTemplate")
private HashOperations<String, String, Object> hashOps;
...
HashMap<String,Object> resultMap = new HashMap<String,Object>();
//vo 객체를 가져왔다
AdminVo adminVo= adminDao.selectAdminByAccount(adminVo);//데이터 넣기
valueOps.set("user", adminVo); //set 명령어와 동일
hashOps.put("USER:LIST", result.getAdminAccount(), adminVo); //hset
listOps.leftPush("list", adminVo); //lpush
setOps.add("set", "1", "2", "3", "1"); //set
zSetOps.add("zSet", "1", 1); //zset
//데이터 꺼내기
resultMap.put("get", valueOps.get("user"));
resultMap.put("hGet", hashOps.get("USER:LIST", result.getAdminAccount()));
resultMap.put("rightPop", listOps.rightPop("list"));
resultMap.put("set", setOps.members("set"));
resultMap.put("zSet", zSetOps.range("zSet", 0, -1));
데이터 넣을시 root 컨텍스트에서 설정한 Object type 으로 설정 하면
{"java.lang.Object":"somepackage.AdminVo"..............."}
위와 같은 형태로 데이터 형이정보도 같이 저장되어
바로 HashMap 또는 vo 객채로 다운캐스팅이 가능해진다.
...
이런식으로
AdminVo redisGetUserObject = (AdminVo)valueOps.get("user");
만약 redis pool 객체를 얻지 못할경우는
레디스 설정 파일에 bind 부분을 0.0.0.0 으로 바꾸고 protec~~ yes 값을 no 로 바꾸고 레디스를 재시작 해준다.
댓글 없음:
댓글 쓰기