最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot淺析Redis訪問操作使用

 更新時(shí)間:2022年11月15日 14:38:46   作者:Decade0712  
Redis是一個(gè)速度非??斓姆顷P(guān)系數(shù)據(jù)庫(kù)(Non-Relational?Database),它可以存儲(chǔ)鍵(Key)與多種不同類型的值(Value)之間的映射(Mapping),可以將存儲(chǔ)在內(nèi)存的鍵值對(duì)數(shù)據(jù)持久化到硬盤,可以使用復(fù)制特性來擴(kuò)展讀性能,還可以使用客戶端分片來擴(kuò)展寫性能

連接操作redis

Spring Boot中操作redis還是需要使用相關(guān)的啟動(dòng)器

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

按照之前的邏輯 我們還是要分析一下這個(gè)啟動(dòng)器的自動(dòng)配置類RedisAutoConfiguration做了什么

@AutoConfiguration
@ConditionalOnClass({RedisOperations.class})
// 將spring.redis開頭的配置和redis進(jìn)行綁定
@EnableConfigurationProperties({RedisProperties.class})
// 引入了兩個(gè)redis連接客戶端,Lettuce(啟動(dòng)器默認(rèn)使用)和Jedis的連接配置類
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
    public RedisAutoConfiguration() {
    }
	// 注入redisTemplate類,認(rèn)定key-value都是Object類型
    @Bean
    @ConditionalOnMissingBean(
        name = {"redisTemplate"}
    )
    @ConditionalOnSingleCandidate(RedisConnectionFactory.class)
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
	// 注入StringRedisTemplate類,認(rèn)定key-value都是String類型
    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnSingleCandidate(RedisConnectionFactory.class)
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
        return new StringRedisTemplate(redisConnectionFactory);
    }
}

分析完之后,我們就可以通過一個(gè)簡(jiǎn)單的demo,來了解Spring Boot是如何連接操作redis的

首先,我們先設(shè)置一下redis客戶端的防火墻,要打開6379端口

firewall-cmd --list-port # 查看所有的開放的端口號(hào)

firewall-cmd --zone=public --add-port=6379/tcp --permanent #將6379端口加入防火墻

systemctl stop firewalld.service #停止firewall

systemctl start firewalld.service #打開firewall

如果不使用Lettuce連接redis,使用Jedis,我們還需要導(dǎo)入相關(guān)依賴

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
</dependency>

然后在配置文件中配置相關(guān)連接參數(shù)

spring:
    redis:
      host: 192.168.153.128
      port: 6379
      client-type: jedis
      jedis:
        pool:
          max-active: 10
#     username: 用戶名
#     password: 密碼

最后測(cè)試一下對(duì)redis的set和get操作

我們創(chuàng)建一個(gè)攔截器,將每次請(qǐng)求的訪問路徑當(dāng)作key,訪問次數(shù)當(dāng)作value放入redis中

package com.decade.interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class RedisInterceptor implements HandlerInterceptor {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 獲取請(qǐng)求路徑,把它當(dāng)作key,每請(qǐng)求一次,這個(gè)key對(duì)應(yīng)的value就自增1
        final String requestURI = request.getRequestURI();
        stringRedisTemplate.opsForValue().increment(requestURI);
        return true;
    }
}

將這個(gè)攔截器通過之前的配置類注冊(cè)到容器中

我們還考慮了一下filter和interceptor的區(qū)別

package com.decade.config;
import com.decade.interceptor.LoginInterceptor;
import com.decade.interceptor.RedisInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyConfig implements WebMvcConfigurer {
	/**
     * filter和interceptor的功能類似,這兩者的區(qū)別在哪?
     * filter:它是servlet定義的原生組件,脫離了spring也可以使用
     * interceptor:它是spring定義的接口,可以使用spring的自動(dòng)裝配等功能
     */
    @Autowired
    private RedisInterceptor redisInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // addPathPatterns:設(shè)置要攔截的請(qǐng)求,如果是/**,那么會(huì)攔截包括靜態(tài)資源在內(nèi)的所有請(qǐng)求
        // excludePathPatterns:設(shè)置不被攔截的請(qǐng)求,這里我們放行登錄頁(yè)請(qǐng)求和靜態(tài)資源
        registry.addInterceptor(new LoginInterceptor())
            .addPathPatterns("/**")
            .excludePathPatterns("/", "/login", "/css/**", "/images/**", "/js/**", "/fonts/**");
        // 這里不能使用new來實(shí)例化,因?yàn)镽edisInterceptor中使用了@Autowired注解,自己new的對(duì)象沒被spring管理,所以它不會(huì)自動(dòng)進(jìn)行依賴注入,所以這里應(yīng)該從容器中拿
        registry.addInterceptor(redisInterceptor)
            .addPathPatterns("/**")
            .excludePathPatterns("/", "/login", "/css/**", "/images/**", "/js/**", "/fonts/**");
    }

最后,在首頁(yè)相關(guān)的接口中獲取訪問次數(shù),并打印出來

package com.decade.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import javax.servlet.http.HttpSession;
@Controller
@Slf4j
public class IndexController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    /**
     * 去main頁(yè)面
     * @return 跳轉(zhuǎn)主頁(yè)面
     */
    @GetMapping("/main.html")
    public String mainPage(HttpSession session,Model model){
        final ValueOperations opsForValue = stringRedisTemplate.opsForValue();
        final Object visitTimes = opsForValue.get("/main.html");
        log.info("訪問首頁(yè)次數(shù)為:{}", visitTimes);
        return "main";
    }
}

訪問幾次首頁(yè)之后,后端打印結(jié)果如下

redis客戶端查詢結(jié)果如下

注意:如果出現(xiàn)報(bào)錯(cuò)如下報(bào)錯(cuò)

org.springframework.dao.InvalidDataAccessApiUsageException: 
DENIED Redis is running in protected mode because protected mode is enabled and no password is set for the default user...

這就說明,redis處于保護(hù)模式,這是默認(rèn)開啟的,報(bào)錯(cuò)信息中會(huì)提供好幾種解決方式

因?yàn)椴┲魈摂M機(jī)上的redis只有自己使用,所以選擇了比較省事的一種,那就是關(guān)掉保護(hù)模式

在redis.conf中搜索protected-mode,將后面的值設(shè)置為no即可

到此這篇關(guān)于SpringBoot淺析Redis訪問操作使用的文章就介紹到這了,更多相關(guān)SpringBoot Redis訪問操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • jvm虛擬機(jī)類加載機(jī)制詳解

    jvm虛擬機(jī)類加載機(jī)制詳解

    本文主要介紹了 jvm虛擬機(jī)類加載機(jī)制詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java注釋代碼執(zhí)行方法解析

    Java注釋代碼執(zhí)行方法解析

    這篇文章主要介紹了Java注釋代碼執(zhí)行方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • nacos在liunx系統(tǒng)中啟動(dòng)成功瀏覽器卻訪問不了的解決方法

    nacos在liunx系統(tǒng)中啟動(dòng)成功瀏覽器卻訪問不了的解決方法

    在linux下搭建nacos,現(xiàn)在想要啟動(dòng),訪問nacos頁(yè)面,訪問不了,所以本文小編將給大家介紹nacos在liunx系統(tǒng)中啟動(dòng)成功,瀏覽器卻訪問不了?全面的解決辦法,需要的朋友可以參考下
    2023-09-09
  • 詳解Java設(shè)計(jì)模式編程中的訪問者模式

    詳解Java設(shè)計(jì)模式編程中的訪問者模式

    這篇文章主要介紹了Java設(shè)計(jì)模式編程中的訪問者模式,訪問者模式的合理利用可以避免項(xiàng)目中出現(xiàn)大量重復(fù)的代碼,需要的朋友可以參考下
    2016-02-02
  • java中rss解析器(rome.jar和jdom.jar)示例

    java中rss解析器(rome.jar和jdom.jar)示例

    這篇文章主要介紹了java中rss解析器(rome.jar和jdom.jar)示例,需要的朋友可以參考下
    2014-03-03
  • Java詳解HashMap實(shí)現(xiàn)原理和源碼分析

    Java詳解HashMap實(shí)現(xiàn)原理和源碼分析

    這篇文章主要介紹了Java關(guān)于HashMap的實(shí)現(xiàn)原理并進(jìn)行源碼分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java如何使用httpclient檢測(cè)url狀態(tài)及鏈接是否能打開

    Java如何使用httpclient檢測(cè)url狀態(tài)及鏈接是否能打開

    這篇文章主要介紹了Java如何使用httpclient檢測(cè)url狀態(tài)及鏈接是否能打開,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Idea 同一窗口導(dǎo)入多個(gè)項(xiàng)目的實(shí)現(xiàn)步驟

    Idea 同一窗口導(dǎo)入多個(gè)項(xiàng)目的實(shí)現(xiàn)步驟

    本文主要介紹了Idea 同一窗口導(dǎo)入多個(gè)項(xiàng)目的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Spring Security UserDetails實(shí)現(xiàn)原理詳解

    Spring Security UserDetails實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了Spring Security UserDetails實(shí)現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java編程語言特性和優(yōu)勢(shì)

    Java編程語言特性和優(yōu)勢(shì)

    這篇文章主要介紹了Java編程語言特性和優(yōu)勢(shì),Java是一門面向?qū)ο缶幊陶Z言,不僅吸收了C++語言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,同時(shí)也增加了垃圾回收機(jī)制,釋放掉不被使用的內(nèi)存空間,解決了管理內(nèi)存空間的煩惱,下面來聊聊Java編程語言特性和優(yōu)勢(shì)吧
    2022-01-01

最新評(píng)論

乡城县| 衡山县| 庆元县| 措美县| 洛南县| 韶山市| 仁化县| 巴青县| 黄陵县| 贡嘎县| 太白县| 白银市| 林周县| 淮滨县| 白河县| 衡东县| 宜兴市| 武清区| 张掖市| 长沙市| 永济市| 清镇市| 宁海县| 台湾省| 田东县| 宁武县| 林周县| 昌图县| 金阳县| 呼和浩特市| 南华县| 天长市| 彰化县| 定安县| 晋城| 西林县| 鞍山市| 石阡县| 宿松县| 荥经县| 麻阳|