Spring集成Redis

    Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。

​ spring-data-redis针对jedis提供了如下功能:

  1. 连接池自动管理,提供了一个高度封装的“RedisTemplate”类
  2. 针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
  3. ValueOperations:简单K-V操作
  4. SetOperations:set类型数据操作
  5. ZSetOperations:zset类型数据操作
  6. HashOperations:针对map类型的数据操作
  7. ListOperations:针对list类型的数据操作

一、引入依赖

<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>5.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>3.2.4</version>
        </dependency>

    如果存储的是Map<String,Object>需要导入jackson相关的包,存储的时候使用json序列化器存储。如果不导入jackson的包会报错。


		<!-- springMVC支持json包-->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.10.0</version>
		</dependency>

二、配置文件

(1) redis.properties

#redis集群
redis.host=192.168.147.128
redis.port=6379
#
redis.host2=192.168.147.128
redis.port2=6380
#
redis.host3=192.168.147.128
redis.port3=6381

(2)applicationContext-redis.xml

<context:property-placeholder location="classpath:redis.properties"
                                  ignore-unresolvable="true"/>

    <!--    jedis连接配置-->
    <bean id="redisClusterConfiguration" class="org.springframework.data.redis.connection.RedisClusterConfiguration">
        <property name="clusterNodes">
            <set>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="${redis.host}"></constructor-arg>
                    <constructor-arg name="port" value="${redis.port}"></constructor-arg>
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="${redis.host2}"></constructor-arg>
                    <constructor-arg name="port" value="${redis.port2}"></constructor-arg>
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="${redis.host3}"></constructor-arg>
                    <constructor-arg name="port" value="${redis.port3}"></constructor-arg>
                </bean>
            </set>
        </property>
    </bean>

    <!--    redis连接工厂 -->
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <constructor-arg name="clusterConfiguration" ref="redisClusterConfiguration"></constructor-arg>
    </bean>

    <!--    redis操作模版 -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <!--        property 表示set注入 ref 表示引用其他bean对象 -->
        <property name="connectionFactory" ref="jedisConnectionFactory"></property>
        <!-- 这里不配置redis客户端将无法查询到存储数据  -->
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
        </property>
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
        <property name="hashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
        </property>
        <!--开启事务  -->
        <property name="enableTransactionSupport" value="true"></property>
    </bean>

    如果在多个spring配置文件中引入<context:property-placeholder .../>标签,最后需要加上ignore-unresolvable="true",否则会报错。

(3)测试

@Test
	public void test() {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-redis.xml");
		RedisTemplate redisTemplate = context.getBean("redisTemplate", RedisTemplate.class);

		// stringRedisTemplate的操作
		// String读写
		redisTemplate.delete("k1");
		redisTemplate.opsForValue().set("k1", "v1");
		System.out.println(redisTemplate.opsForValue().get("k1"));
		System.out.println("==============");

		// List读写
		redisTemplate.delete("l1");
		redisTemplate.opsForList().rightPush("l1", "1");
		redisTemplate.opsForList().rightPush("l1", "2");
		redisTemplate.opsForList().leftPush("l1", "3");
		List<String> listCache = redisTemplate.opsForList().range("l1", 0, -1);
		for (String s : listCache) {
			System.out.println(s);
		}
		System.out.println("==============");

		// Set读写
		redisTemplate.delete("s1");
		redisTemplate.opsForSet().add("s1", "A");
		redisTemplate.opsForSet().add("s1", "B");
		redisTemplate.opsForSet().add("s1", "C");
		Set<String> setCache = redisTemplate.opsForSet().members("s1");
		for (String s : setCache) {
			System.out.println(s);
		}
		System.out.println("===============");

		// Hash读写
		redisTemplate.delete("h1");
		redisTemplate.opsForHash().put("h1", "address1", "北京");
		redisTemplate.opsForHash().put("h1", "address2", "上海");
		redisTemplate.opsForHash().put("h1", "address3", "河南");
		Map<String, String> hashCache = redisTemplate.opsForHash().entries("h1");
		for (Map.Entry entry : hashCache.entrySet()) {
			System.out.println(entry.getKey() + "-" + entry.getValue());
		}
		System.out.println("===============");
	}

执行结果 

如果本文对您有很大的帮助,还请点赞关注一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游王子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值