日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Redis注解方式實(shí)現(xiàn)高效緩存(redis注解式緩存)

Redis是一個(gè)高性能的key-value存儲(chǔ)系統(tǒng),通常用于緩存、消息隊(duì)列等場(chǎng)景,具有快速、可擴(kuò)展、高可靠性的特點(diǎn)。在Java中使用Redis進(jìn)行緩存操作時(shí),最常見(jiàn)的方式是使用Jedis或Lettuce等客戶端庫(kù)。但是,隨著Spring框架的不斷發(fā)展,Spring提供的緩存框架也越來(lái)越成熟,Redis緩存成為了Spring緩存的一個(gè)重要方案。本文將介紹如何使用Redis進(jìn)行緩存,并采用注解方式實(shí)現(xiàn)高效緩存。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國(guó)際域名空間、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、珠暉網(wǎng)站維護(hù)、網(wǎng)站推廣。

1. 添加Redis依賴

在使用Spring中的Redis緩存時(shí),需要添加以下依賴:


org.springframework.boot
spring-boot-starter-data-redis

2. 配置Redis連接

在Spring Boot中,可以通過(guò)application.properties或application.yml配置Redis連接:

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=

3. 定義緩存管理器

Redis緩存需要一個(gè)緩存管理器來(lái)管理緩存操作,可以通過(guò)如下方式定義一個(gè)Redis緩存管理器:

@Configuration
@EnableCaching
PUBLIC class RedisConfig extends CachingConfigurerSupport {

@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}

@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(60))
.prefixKeysWith("my-cache-prefix:")
.disableCachingNullValues();
return RedisCacheManager.builder(factory)
.cacheDefaults(redisCacheConfiguration)
.transactionAware()
.build();
}

@Override
public CacheResolver cacheResolver() {
return new SimpleCacheResolver(cacheManager());
}

@Override
public KeyGenerator keyGenerator() {
return new SimpleKeyGenerator();
}
}

在上述代碼中,我們通過(guò)@Bean注解定義了一個(gè)RedisTemplate對(duì)象和一個(gè)CacheManager對(duì)象,RedisTemplate用于操作Redis緩存,CacheManager用于管理緩存。同時(shí)還重寫(xiě)了CachingConfigurerSupport類中的cacheResolver()和keyGenerator()方法,用于自定義緩存的生成策略。

4. 使用緩存注解

使用Spring緩存框架,我們可以在需要緩存的方法上添加注解來(lái)實(shí)現(xiàn)緩存。常用的緩存注解有以下幾種:

– @Cacheable:在方法執(zhí)行前,先檢查緩存中是否有數(shù)據(jù),如果有數(shù)據(jù)則直接返回緩存數(shù)據(jù),否則再執(zhí)行方法并將執(zhí)行結(jié)果緩存起來(lái)。

– @CachePut:表示無(wú)論如何都會(huì)執(zhí)行方法,并將執(zhí)行結(jié)果緩存起來(lái)。

– @CacheEvict:表示清除某個(gè)緩存。

用注解方式實(shí)現(xiàn)緩存非常簡(jiǎn)單,只需在需要使用緩存的方法上添加相應(yīng)的注解即可,代碼如下:

@Service
public class userServiceImpl implements UserService {

@Autowired
private UserRepository userRepository;

@Cacheable(value = "user-list")
@Override
public List findAllUsers() {
// 查詢所有用戶
List userList = userRepository.findAll();
return userList;
}

@Cacheable(value = "user-detl", key = "#id.toString()")
@Override
public User findUserById(Long id) {
// 查詢單個(gè)用戶
User user = userRepository.findById(id).orElse(null);
return user;
}

@CachePut(value = "user-detl", key = "#user.id.toString()")
@Override
public User saveUser(User user) {
// 保存用戶
User savedUser = userRepository.save(user);
return savedUser;
}

@CacheEvict(value = "user-detl", key = "#id.toString()")
@Override
public void deleteUserById(Long id) {
// 刪除用戶
userRepository.deleteById(id);
}
}

在上述代碼中,我們定義了一個(gè)名為UserServiceImpl的類,并實(shí)現(xiàn)了UserService接口。在方法上添加注解后,就可以實(shí)現(xiàn)相應(yīng)的緩存操作。例如,findAllUsers()方法上添加了@Cacheable注解,表示查詢所有用戶時(shí),先檢查緩存中是否有數(shù)據(jù),如果有則直接返回緩存數(shù)據(jù),否則再執(zhí)行findAllUsers()方法,并將執(zhí)行結(jié)果緩存起來(lái)。

5. 測(cè)試緩存效果

我們可以簡(jiǎn)單測(cè)試一下緩存效果,代碼如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisCacheTest {

@Autowired
UserService userService;

@Test
public void testFindAllUsers() {
// 第一次查詢所有用戶
List userList = userService.findAllUsers();
System.out.println(userList);
// 第二次查詢所有用戶
userList = userService.findAllUsers();
System.out.println(userList);
}

@Test
public void testFindUserById() {
// 第一次查詢單個(gè)用戶
User user = userService.findUserById(1L);
System.out.println(user);
// 第二次查詢單個(gè)用戶
user = userService.findUserById(1L);
System.out.println(user);
}

@Test
public void testSaveUser() {
// 保存用戶
User user = new User();
user.setId(1L);
user.setName("張三");
user.setAge(20);
user.setEml("zhangsan@qq.com");
userService.saveUser(user);
// 查詢單個(gè)用戶
user = userService.findUserById(1L);
System.out.println(user);
}

@Test
public void testDeleteUserById() {
// 刪除用戶
userService.deleteUserById(1L);
// 查詢單個(gè)用戶
User user = userService.findUserById(1L);
System.out.println(user);
}
}

運(yùn)行測(cè)試方法后,可以看到控制臺(tái)輸出緩存結(jié)果,如下所示:

2020-10-09 11:15:20.131  INFO 69256 --- [           mn] c.s.test.RedisCacheTest                  : Starting RedisCacheTest on lichangdeMacBook-Pro.local with PID 69256 (started by lichang in /Users/lichang/myproject/redis-test)
2020-10-09 11:15:20.132 INFO 69256 --- [ mn] c.s.test.RedisCacheTest : No active profile set, falling back to default profiles: default
2020-10-09 11:15:21.728 INFO 69256 --- [ mn] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
2020-10-09 11:15:21.729 INFO 69256 --- [ mn] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet ''
2020-10-09 11:15:21.734 INFO 69256 --- [ mn] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 5 ms
2020-10-09 11:15:21.968 INFO 69256 --- [ mn] c.s.t.s.UserServiceImpl : No cache entry for key 'user-list' in cache(s) [user-list]; invoking method findAllUsers
2020-10-09 11:15:22.312 INFO 69256 --- [ mn] c.s.t.s.UserServiceImpl : Cache 'user-list' miss for key 'user-list'; creating cache entry
2020-10-09 11:15:22.489 INFO 69256 --- [ mn] c.s.t.s.UserServiceImpl : Cache 'user-list' miss for key 'user-list'; creating cache entry
[User{id=1, name='張三', age=20, eml='zhangsan@qq.com'}, User{id=2, name='李四', age=25, eml='lisi@qq.com'}, User{id=3, name='王五', age=30, eml='wangwu@qq.com'}]
[User{id=1, name='張三', age=20, eml='zhangsan@qq.com'}, User{id=2, name='李四', age=25, eml='lisi@qq.com'}, User{id=3, name='王五', age=30, eml='wangwu@qq.com'}]
2020-10-09 11:15:22.598 INFO 69256 --- [ mn] c.s.t.s.UserServiceImpl : No cache entry for

創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌網(wǎng)站設(shè)計(jì),成都高端網(wǎng)站制作開(kāi)發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營(yíng)銷讓企業(yè)網(wǎng)站產(chǎn)生價(jià)值。


分享文章:Redis注解方式實(shí)現(xiàn)高效緩存(redis注解式緩存)
本文鏈接:http://www.dlmjj.cn/article/cojdode.html