redis配置文件
##redis
#IP\u5730\u5740
redis.pool.host=localhost
#\u7AEF\u53E3\u53F7
redis.pool.port=6379
#redis.pool.pass=123456
#\u6700\u5927\u80FD\u591F\u4FDD\u6301idel\u72B6\u6001\u7684\u5BF9\u8C61\u6570
redis.pool.maxIdle=300
#\u6700\u5927\u5206\u914D\u7684\u5BF9\u8C61\u6570
redis.pool.maxTotal=600
#\u591A\u957F\u65F6\u95F4\u68C0\u67E5\u4E00\u6B21\u8FDE\u63A5\u6C60\u4E2D\u7A7A\u95F2\u7684\u8FDE\u63A5
redis.pool.timeBetweenEvictionRunsMillis=30000
#\u7A7A\u95F2\u8FDE\u63A5\u591A\u957F\u65F6\u95F4\u540E\u4F1A\u88AB\u6536\u56DE
redis.pool.minEvictableIdleTimeMillis=30000
#\u5F53\u8C03\u7528borrow Object\u65B9\u6CD5\u65F6\uFF0C\u662F\u5426\u8FDB\u884C\u6709\u6548\u6027\u68C0\u67E5
redis.pool.testOnBorrow=true
########reids\u7F16\u7801\u683C\u5F0F
redis.encode=utf-8
######\u7F13\u5B58\u8FC7\u671F\u65F6\u95F4 \u79D2 1000*60*60*24*7 \u4E03\u5929
redis.expire=604800000
####\u662F\u5426\u5F00\u542FRedis\u670D\u52A1\u5E94\u7528
redis.unlock=false
spring 配置文件
<!-- Redis缓存配置 -->
<bean id="jedisConnFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName"><value>${redis.pool.host}</value></property>
<property name="port"><value>${redis.pool.port}</value> </property>
<property name="poolConfig" ref="jedisPoolConfig" />
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
p:connection-factory-ref="jedisConnFactory" />
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxActive"><value>${redis.pool.maxTotal}</value></property>
<property name="maxIdle"><value>${redis.pool.maxIdle}</value></property>
<property name="timeBetweenEvictionRunsMillis"><value>${redis.pool.timeBetweenEvictionRunsMillis}</value></property>
<property name="minEvictableIdleTimeMillis"><value>${redis.pool.minEvictableIdleTimeMillis}</value></property>
<property name="testOnBorrow" ><value>${redis.pool.testOnBorrow}</value></property>
</bean>
代码实现
1.保存——HMSET
- @Override
- public void save(final User user) {
- redisTemplate.execute(new RedisCallback<Object>() {
- @Override
- public Object doInRedis(RedisConnection connection)
- throws DataAccessException {
- byte[] key = redisTemplate.getStringSerializer().serialize(
- "uc.user.info.uid." + user.getUid());
- BoundHashOperations<Serializable, byte[], byte[]> boundHashOperations = redisTemplate
- .boundHashOps(key);
- boundHashOperations.put(redisTemplate.getStringSerializer()
- .serialize("mobile"), redisTemplate
- .getStringSerializer().serialize(user.getMobile()));
- boundHashOperations.put(redisTemplate.getStringSerializer()
- .serialize("address"), redisTemplate
- .getStringSerializer().serialize(user.getAddress()));
- boundHashOperations.put(redisTemplate.getStringSerializer()
- .serialize("postCode"), redisTemplate
- .getStringSerializer().serialize(user.getPostCode()));
- connection.hMSet(key, boundHashOperations.entries());
- return null;
- }
- });
- }
这里用到:
- BoundHashOperations<Serializable, byte[], byte[]> boundHashOperations = redisTemplate.boundHashOps(key);
- boundHashOperations.put(redisTemplate.getStringSerializer().serialize("mobile"), redisTemplate.getStringSerializer().serialize(user.getMobile()));
看着就有点肿。。。Map封装完以后,用HMSET命令:
- connection.hMSet(key, boundHashOperations.entries());
这时候就完成了哈希表的保存操作,可以在控制台看到相应的数据了。
1) "\xe4\xb8\x8a\xe6\xb5\xb7"
2) "13800138000"
3) "100859"
2.获取——HMGET
这一刻,我彻底崩溃了!取出来的值是个List,还得根据取得顺序,逐个反序列化,得到内容。
- @Override
- public User read(final String uid) {
- return redisTemplate.execute(new RedisCallback<User>() {
- @Override
- public User doInRedis(RedisConnection connection)
- throws DataAccessException {
- byte[] key = redisTemplate.getStringSerializer().serialize(
- "uc.user.info.uid." + uid);
- if (connection.exists(key)) {
- List<byte[]> value = connection.hMGet(
- key,
- redisTemplate.getStringSerializer().serialize(
- "address"),
- redisTemplate.getStringSerializer().serialize(
- "mobile"), redisTemplate
- .getStringSerializer()
- .serialize("postCode"));
- User user = new User();
- String address = redisTemplate.getStringSerializer()
- .deserialize(value.get(0));
- user.setAddress(address);
- String mobile = redisTemplate.getStringSerializer()
- .deserialize(value.get(1));
- user.setMobile(mobile);
- String postCode = redisTemplate.getStringSerializer()
- .deserialize(value.get(2));
- user.setPostCode(postCode);
- user.setUid(uid);
- return user;
- }
- return null;
- }
- });
- }
这个实现,跟Redis的命令几乎一模一样,指定Key,指定field,获取其值。
- List<byte[]> value = connection.hMGet(key,redisTemplate.getStringSerializer().serialize("address"),
- redisTemplate.getStringSerializer().serialize("mobile"),
- redisTemplate.getStringSerializer().serialize("postCode"));
- User user = new User();
- String address = redisTemplate.getStringSerializer().deserialize(value.get(0));
- user.setAddress(address);
- String mobile = redisTemplate.getStringSerializer().deserialize(value.get(1));
- user.setMobile(mobile);
- String postCode = redisTemplate.getStringSerializer().deserialize(value.get(2));
- user.setPostCode(postCode);
相关推荐
在本项目中,我们关注的是 Redis 的客户端连接、Spring Boot 整合以及分布式锁的实现。 首先,Redis 客户端连接是与 Redis 服务器进行交互的基础。常见的 Redis 客户端库有 Jedis 和 Lettuce。Jedis 是一个用 Java ...
总的来说,"redis与spring整合"项目展示了如何在Spring环境中利用Redis进行高效的数据缓存,通过注解简化开发流程,并结合MyBatis实现数据库操作与缓存的协同。这不仅提高了应用性能,还增强了系统的可维护性和扩展...
在Maven项目中,可以在pom.xml文件中添加`spring-data-redis`和`jedis`库,这两个库分别提供了Spring对Redis的支持和Jedis,一个Java客户端连接Redis。 ```xml <groupId>org.springframework.data <artifactId>...
将Redis与Spring整合,可以充分利用Redis的高速缓存能力,提升应用程序的性能。本文将详细介绍如何在Spring应用中集成Redis,以及如何操作String、list、set、map四种基本数据类型。 一、整合步骤 1. **环境配置**...
将Spring与Redis进行整合,可以有效地提升应用的性能和响应速度,特别是在数据读写频繁的应用中。 "Spring3.0整合redis相关jar"这个主题主要涉及的是如何在Spring 3.0版本中集成Redis作为数据存储或缓存解决方案。...
这个"Redis+spring-data-redis jar包"整合包就是为了解决将Redis与Spring框架无缝结合的需求。 在Spring框架中整合Redis,首先需要引入`spring-data-redis`的依赖,这个jar包包含了Spring对Redis的各种支持。Jedis...
本文将深入探讨如何将Spring与Redis进行整合,为新手提供一个简单易懂的实践指南。 一、Spring与Redis整合的背景及优势 Spring框架提供了丰富的集成支持,使得与其他技术的整合变得非常方便。整合Spring和Redis...
它支持Jedis和Lettuce两种Redis客户端库,提供了Template和Reactive API供开发者选择。 二、Spring Boot与Redis集成 在Spring Boot项目中整合Redis更加简便,只需在`pom.xml`或`build.gradle`文件中添加相关依赖,...
在本案例中,我们将深入探讨如何在Spring框架中整合Redis数据存储系统,使用Jedis作为客户端库。Redis是一个高性能的键值对存储系统,适用于缓存、消息队列等多种应用场景。而Spring是Java领域广泛使用的应用程序...
Redis 和 Spring 的整合主要涉及到如何在 Spring 应用中利用 Redis 实现缓存功能,以减轻数据库的负担。本文将详细介绍这一过程。 首先,我们来理解整合的目标。使用 Redis 缓存数据的主要目的是减少对数据库的频繁...
在Java应用中,我们可以使用Jedis或者Lettuce等客户端库与Redis通信。在SSH框架中,Redis常用于缓存session、查询结果或者频繁更新的数据,提高数据读取速度。 5. **整合过程**: - 配置Redis连接:在Spring配置...
5. **测试代码**:在`RedisDemo`中,可能会有测试类或者方法,用来验证Redis集群与Spring的整合是否成功,例如存储和检索数据,检查数据分布情况,以及进行故障转移的测试。 6. **数据分布与槽管理**:由于是关于...
Redis客户端则是与服务端交互的工具,Java中常见的客户端有Jedis和Lettuce,它们提供了丰富的API用于执行各种Redis命令。 四、Spring整合Redis 在Java应用中,Spring框架提供了方便的Redis集成方式: 1. 添加Spring...
4. `jedis`: Redis的Java客户端库,Spring Data Redis通过Jedis与Redis服务器通信。 5. `redis-server`: Redis服务器本身,需要运行在本地或远程服务器上。 6. `lettuce`: 另一个可选的Redis Java客户端,也可以与...
1. **相关Jar文件**:为了实现SSH与Redis的整合,需要引入Redis客户端Jedis的jar包(如jedis-2.3.1.jar)以及Spring对Redis支持的相关jar包(如spring-data-redis-1.3.4.RELEASE.jar)。此外,还需要连接池管理的库...
Jedis是早期常用的Redis客户端,而Lettuce则提供了更现代的、基于Netty的非阻塞I/O支持,为高并发环境提供了更好的性能。 2. **Reactive支持**:1.7.6版本开始,Spring Data Redis引入了对Reactive编程模型的支持,...
- 提供了对不同Redis客户端的整合(Lettuce和Jedis) - 提供了RedisTemplate统一API来操作Redis - 支持Redis的发布订阅模型 - 支持Redis哨兵和Redis集群 - 支持基于Lettuce的响应式编程 - 支持基于JDK、JSON、字符串...
该项目的主要目标是在`SpringBoot`应用中集成`Lettuce`作为Redis客户端,实现对Redis的高效访问和操作。同时,通过自定义配置和注入不同的`RedisTemplate`实例,可以轻松实现多库切换,满足不同场景下的需求。 2. **...
标题 "Redis 和 spring 的整合" 涉及到的是在Java开发中如何将Redis缓存系统与Spring框架集成,以提升应用性能。Redis是一个高性能的键值存储系统,常用于缓存、消息队列等场景;Spring是Java企业级应用开发的主流...
Spring Data Redis是Spring Data项目的一部分,它提供了一套完整的Redis客户端API,包括连接池管理、事务支持以及对Redis多种数据结构(如字符串、哈希、列表、集合和有序集合)的操作。通过Spring的Template和...