springboot——redis

目录

 

一、redis win7 安装配置

二、redis实现缓存

1)配置RedisConfig 继承 CachingConfigurerSupport,重写cacheManager,使用redisTemplate

2)通过spring boot提供的数据访问框架Spring Data Redis实现

三、redis实现session共享


一、redis win7 安装配置

详解:https://jingyan.baidu.com/album/86fae346e132363c49121aac.html?picindex=3

二、redis实现缓存

注意:redis实现缓存有2种方式

1)配置RedisConfig 继承 CachingConfigurerSupport,重写cacheManager,使用redisTemplate

参考RedisUtils工具类,该工具类支持redis的其他业务场景】 

实现code

@Component
public class RedisUtil {
	@Autowired
	private RedisTemplate redisTemplate;

	/**
	 * @Description: 批量删除缓存
	 * @Author: hj
	 * @Date: 17:13 2017/10/24
	 */
	public void remove(final String... keys) {
		for (String key : keys) {
			remove(key);
		}
	}

	/**
	 * @Description: 批量删除缓存(通配符)
	 * @Author: hj
	 * @Date: 16:52 2017/10/24
	 */
	public void removePattern(final String pattern) {
		Set<Serializable> keys = redisTemplate.keys(pattern);
		if (keys.size() > 0)
			redisTemplate.delete(keys);
	}

	/**
	 * @Description: 删除缓存
	 * @Author: hj
	 * @Date: 16:51 2017/10/24
	 */
	public void remove(final String key) {
		if (exists(key)) {
			redisTemplate.delete(key);
		}
	}

	/**
	 * @Description: 判断缓存中是否有对应的value
	 * @Author: hj
	 * @Date: 16:50 2017/10/24
	 */
	public boolean exists(final String key) {
		return redisTemplate.hasKey(key);
	}

	/**
	 * @Description: 读取缓存
	 * @Author: hj
	 * @Date: 16:49 2017/10/24
	 */
	public Object get(final String key) {
		return redisTemplate.opsForValue().get(key);
	}

	/**
	 * @Description: 写入缓存
	 * @Author: hj
	 * @Date: 16:48 2017/10/24
	 */
	public boolean set(final String key, Object value) {
		boolean result = false;
		try {
			redisTemplate.opsForValue().set(key, value);
			result = true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * @Description: 写入缓存(可以配置过期时间)
	 * @Author: hj
	 * @Date: 16:46 2017/10/24
	 */
	public boolean set(final String key, Object value, Long expireTime) {
		boolean result = false;
		try {
			redisTemplate.opsForValue().set(key, value);
			redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
			result = true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;

	}
}
@Configuration
public class RedisConfig extends CachingConfigurerSupport {

	@Value("${redis-timeout}")
	private Long redisTimeout;

	// 缓存管理器
	@Bean
	public CacheManager cacheManager(RedisTemplate redisTemplate) {
		RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
		// 设置缓存过期时间
		cacheManager.setDefaultExpiration(redisTimeout);
		return cacheManager;
	}

	@Bean
	public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
		StringRedisTemplate template = new StringRedisTemplate(factory);
		//setSerializer(template);// 设置序列化工具
		//template.afterPropertiesSet();
		return template;
	}

	private void setSerializer(StringRedisTemplate template) {
		Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
		ObjectMapper om = new ObjectMapper();
		//om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
		om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
		jackson2JsonRedisSerializer.setObjectMapper(om);
		template.setValueSerializer(jackson2JsonRedisSerializer);
	}

}
    @Autowired
	private RedisUtil redisUtil;

	@Test
	public void contextLoads() {
		System.out.println(redisUtil.get("key01"));
	}

2)通过spring boot提供的数据访问框架Spring Data Redis实现

通过在方法上添加缓存注解实现只支持redis作为缓存管理时使用

实现CODE

依赖

<dependency><!-- redis依赖-->
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-data-redis</artifactId>
		    <version>1.5.7.RELEASE</version>
		</dependency>
		
		<dependency><!-- 缓存依赖 -->
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-cache</artifactId>
		</dependency>

配置

主类添加:开启缓存
@EnableCaching
spring.cache.type=redis
spring.cache.cache-names=dataCenter,datahub

# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
# 缓存过期时间
redis-timeout=10
业务service代码上添加
@Cacheable(value = "dataCenter", key = "#root.methodName + '_' + #root.methodName.concat(#id)")

三、redis实现session共享

实现code

依赖

<dependency><!-- 使用redis存储session,达到session共享 -->
		      <groupId>org.springframework.session</groupId>
		      <artifactId>spring-session-data-redis</artifactId>
		</dependency>

配置

#session共享存储在redis内
spring.session.store-type=redis

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Spring Boot中集成Redis分布式锁可以使用Redisson来实现。Redisson是一个基于Redis的分布式对象和服务框架,内部已经实现了Redis的分布式锁,使用起来更加方便和稳定。通过Redisson,可以使用RedLock算法来实现分布式锁,确保锁的正确性和可靠性。在Redis集群环境下,可能存在锁失效或死锁的问题,但使用Redisson的分布式锁可以解决这个问题。此外,分布式锁是为了解决分布式系统中控制共享资源访问的问题,因为在分布式系统中,多线程、多进程分布在不同机器上,传统的并发控制锁策略失效。因此,通过集成Redis分布式锁,可以有效地控制共享资源的访问。 #### 引用[.reference_title] - *1* *2* [springboot集成redis 分布式锁(redistemplate,lua,redisson)](https://blog.csdn.net/jun2571/article/details/130382023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Springboot集成Redis——实现分布式锁](https://blog.csdn.net/tang_seven/article/details/126769580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值