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

Java與SpringBoot對redis的使用方式

 更新時(shí)間:2022年08月03日 16:27:08   作者:青檸果  
這篇文章主要介紹了Java與SpringBoot對redis的使用方式,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下

1.Java連接redis

redis支持哪些語言可以操作 (去redis官網(wǎng)查詢)

1.1 使用Jedis

 (1)添加jedis依賴

<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <!--只能在測試類中使用-->
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.6.0</version>
        </dependency>

(2)代碼測試

public class TestJedis {
    @Test
    public void test01(){
        //連接redis--必須保證你的redis服務(wù)運(yùn)行遠(yuǎn)程連接
        //該對象把每個(gè)redis命令封裝成對應(yīng)的方法
        //注意端口號
        //xshell中的redis要運(yùn)行起來,注意防火墻釋放端口號,注意配置文件的修改
        Jedis jedis=new Jedis("192.168.1.16",6379);
        //對于字符串操作的命令
        String set = jedis.set("k1", "v1");
        System.out.println(set);
        String set1 = jedis.set("k2", "v2");
        System.out.println(set1);
        String set2 = jedis.set("k3", "v3");
        System.out.println(set2);

        //對于hash的操作
        jedis.hset("k4","name","小花");
        Long hset = jedis.hset("k4", "age", "18");
        System.out.println(hset);

       Map<String ,String> map=new HashMap<>();
        map.put("name","小明");
        map.put("age","20");
        Long k = jedis.hset("k5", map);
        System.out.println(k);
        jedis.close();
    }
}

1.2 使用連接池連接redis

 @Test
    public void test02(){
        //創(chuàng)建連接池的配置類
        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(20);
        jedisPoolConfig.setMinIdle(5);
        jedisPoolConfig.setMaxWait(Duration.ofMillis(3000));
        JedisPool jedisPool=new JedisPool(jedisPoolConfig,"192.168.1.16",6379);
        long start = System.currentTimeMillis();

        for (int i = 0; i < 1000; i++) {
            //從jedis連接池獲取資源
            Jedis jedis=jedisPool.getResource();
            String ping = jedis.ping();
            jedis.close();//是否關(guān)閉池子
        }
        long end=System.currentTimeMillis();
        //是為了比較使用池子還是不使用快,結(jié)論是使用池子快
        System.out.println("總耗時(shí):"+(end-start));
    }

1.3 java連接redis集群模式

連接集群時(shí)要保證集群里面沒有存值, 要是存值需要?jiǎng)h除之前生成的文件(注意刪除干凈)

還有就是放行對應(yīng)的端口:6001、6002、6003、6004、6005、6006,因?yàn)橹胺判械膶?shí)在10000端口,注意以上兩點(diǎn),才可以使用idea創(chuàng)建成功。

@Test
    public void test03(){
      Set<HostAndPort> nodes=new HashSet<>();
      nodes.add(new HostAndPort("192.168.227.175",6001));
      nodes.add(new HostAndPort("192.168.227.175",6002));
      nodes.add(new HostAndPort("192.168.227.175",6003));
      nodes.add(new HostAndPort("192.168.227.175",6004));
      nodes.add(new HostAndPort("192.168.227.175",6005));
      nodes.add(new HostAndPort("192.168.227.175",6006));
        JedisCluster jedisCluster=new JedisCluster(nodes);
      jedisCluster.set("k6", "小老虎和小兔子");
        jedisCluster.close();
    }

 2.SpringBoot整合redis

springboot對redis的操作封裝了兩個(gè)StringRedisTemplate和RedisTemplate類,StringRedisTemplate是RedisTemplate的子類,StringRedisTemplate它只能存儲(chǔ)字符串類型,無法存儲(chǔ)對象類型。要想用StringRedisTemplate存儲(chǔ)對象必須把對象轉(zhuǎn)為json字符串。

springboot整合redis時(shí)提供了兩個(gè)模板工具類,StringRedisTemplate和RedisTemplate。

2.1 StringRedisTemplate

(1) 引入相關(guān)的依賴

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

(2)注入StringRedisTemplate該類對象

 @Autowired
 private StringRedisTemplate redisTemplate;

(3)使用StringRedisTemplate

該類把對每種數(shù)據(jù)類型的操作,單獨(dú)封了相應(yīng)的內(nèi)部類。

此處不會(huì)有亂碼,因?yàn)橐呀?jīng)給它序列化方式和反序列化方式換成為String型。

@Autowired
    private StringRedisTemplate stringRedisTemplate;
 @Test
    public void test01(){
        //對hash類型的操作
        HashOperations<String, Object, Object> forHash = stringRedisTemplate.opsForHash();
        forHash.put("k1","name","張三");
        forHash.put("k1","age","15");
        Map<String,String> map=new HashMap<>();
        map.put("name","李四");
        map.put("age","25");
        forHash.putAll("k36",map);
 
        Object o = forHash.get("k1", "name");
        System.out.println(o);
 
        Set<Object> k1 = forHash.keys("k1");
        System.out.println(k1);
 
        List<Object> k11 = forHash.values("k1");
        System.out.println(k11);
 
        //獲取k1對于的所有的field和value
        Map<Object, Object> k12 = forHash.entries("k1");
        System.out.println(k12);
    }
    @Test
    void contextLoads() {
        //刪除指定的key
       // stringRedisTemplate.delete("k");
        //查看所有的key
        //stringRedisTemplate.keys("k");
        //是否存在指定的key
        //stringRedisTemplate.hasKey("k");
        //對字符串?dāng)?shù)據(jù)類型的操作ValueOperations
        ValueOperations<String, String> forValue = stringRedisTemplate.opsForValue();
        //存儲(chǔ)字符串類型--key value long uint  setex()
        forValue.set("k1","張三",30, TimeUnit.SECONDS);
        //等價(jià)于setnx 存入成功返回true ,失敗返回false
        Boolean absent = forValue.setIfAbsent("k11", "李四", 30, TimeUnit.SECONDS);
        System.out.println(absent);
        //append拼接
        Integer append = forValue.append("k11", "真好看");
        String k11 = forValue.get("k11");
        System.out.println(k11);
 
    }

2.2 RedisTemplate

此處會(huì)有亂碼,因?yàn)樗蛄谢绞胶头葱蛄谢绞侥J(rèn)為JDK。

@SpringBootTest
class SbredisApplicationTests02 {
    //當(dāng)你存儲(chǔ)的value類型為對象類型使用redisTemplate
    //存儲(chǔ)的value類型為字符串。StringRedisTemplate 驗(yàn)證碼
    @Autowired
    private RedisTemplate redisTemplate;
 
    @Test
    public void test01(){
        //必須認(rèn)為指定序列化方式
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
 
        //對String類型操作類
        ValueOperations forValue = redisTemplate.opsForValue();
        //redis中key和value都變成了亂碼
        //key和value都沒有指定序列化方式,默認(rèn)采用jdk的序列化方式
        forValue.set("k1","張三");
 
        //value默認(rèn)采用jdk,類必須實(shí)現(xiàn)序列化接口
        forValue.set("k44",new User(1,"haha",12));
    }
}

上面的RedisTemplate需要每次都指定key value以及field的序列化方式,能不能搞一個(gè)配置類,已經(jīng)為RedisTemplate指定好序列化。以后再用就無需指定。

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        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.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化  filed value
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.setHashKeySerializer(redisSerializer);
        return template;
    }
}

到此這篇關(guān)于Java與SpringBoot對redis的使用方式的文章就介紹到這了,更多相關(guān)Java redis 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot修改內(nèi)置tomcat版本的操作步驟

    SpringBoot修改內(nèi)置tomcat版本的操作步驟

    生產(chǎn)環(huán)境使用的外部部署Tomcat還是內(nèi)置Tomcat由于版本安全漏洞,往往需要升級到指定的安全版本,本文演示一下SpringBoot升級內(nèi)置的Tomcat版本,感興趣的小伙伴跟著小編一起來看看吧
    2024-07-07
  • Spring的BeanUtils.copyProperties屬性復(fù)制避坑指南

    Spring的BeanUtils.copyProperties屬性復(fù)制避坑指南

    這篇文章主要介紹了Spring的BeanUtils.copyProperties屬性復(fù)制避坑指南,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java動(dòng)態(tài)規(guī)劃篇之線性DP的示例詳解

    Java動(dòng)態(tài)規(guī)劃篇之線性DP的示例詳解

    這篇文章主要通過幾個(gè)例題為大家詳細(xì)介紹一些Java動(dòng)態(tài)規(guī)劃中的線性DP,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-11-11
  • hadoop實(shí)現(xiàn)grep示例分享

    hadoop實(shí)現(xiàn)grep示例分享

    這篇文章主要介紹了hadoop實(shí)現(xiàn)grep示例,可從文檔中提取包含某些字符串的行,需要的朋友可以參考下
    2014-03-03
  • Java網(wǎng)絡(luò)編程之基于TCP協(xié)議

    Java網(wǎng)絡(luò)編程之基于TCP協(xié)議

    本文主要將Java基于TCP的網(wǎng)絡(luò)編程主要分解成5個(gè)功能:功能分解1:單向通信功能分解,2:雙向通信功能分解,3:對象流傳送功能分解,4:加入完整的處理異常方式功能分解,5:多線程接收用戶請求,需要的朋友可以參考下
    2021-05-05
  • Java中BigDecimal,DateFormatter?和迭代器的"陷阱"

    Java中BigDecimal,DateFormatter?和迭代器的"陷阱"

    這篇文章主要介紹了Java中BigDecimal,DateFormatter?和迭代器的"陷阱",文章圍繞主題展開詳細(xì)的內(nèi)容介紹,感興趣的小伙伴可以參考一下
    2022-06-06
  • 一文詳解Java中的動(dòng)態(tài)填充Html模版并轉(zhuǎn)PDF

    一文詳解Java中的動(dòng)態(tài)填充Html模版并轉(zhuǎn)PDF

    在后端技術(shù)中,模板引擎和PDF生成工具是兩個(gè)非常重要的領(lǐng)域,Thymeleaf和wkhtmltopdf是這兩個(gè)領(lǐng)域的杰出代表,下面就來詳細(xì)介紹一下Thymeleaf和wkhtmltopdf的技術(shù)特點(diǎn)吧
    2023-12-12
  • 關(guān)于springboot2整合lettuce啟動(dòng)卡住問題的解決方法

    關(guān)于springboot2整合lettuce啟動(dòng)卡住問題的解決方法

    Lettuce和Jedis的都是連接Redis Server的客戶端程序,下面這篇文章主要給大家介紹了關(guān)于springboot2整合lettuce啟動(dòng)卡住問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • IDE 搭配 Lombok 注解的配置方法

    IDE 搭配 Lombok 注解的配置方法

    Lombok是一個(gè)Java庫,通過注解簡化代碼編寫,減少樣板代碼,在使用IDE如IntelliJ IDEA或Eclipse結(jié)合Lombok時(shí),需要先添加Lombok依賴,然后在IDE中配置,以啟用注解處理器,配置完成后,使用Lombok注解來簡化Java類的編寫,本文介紹IDE搭配Lombok注解的配置,感興趣的朋友一起看看吧
    2025-03-03
  • 聊一聊Java的JVM類加載機(jī)制

    聊一聊Java的JVM類加載機(jī)制

    這篇文章主要介紹了聊一聊Java的JVM類加載機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評論

通州区| 喀什市| 明光市| 沐川县| 嘉善县| 德阳市| 祁阳县| 赣州市| 大埔区| 嘉黎县| 永修县| 靖安县| 神农架林区| 亳州市| 平阳县| 手机| 曲松县| 井冈山市| 西畴县| 尼勒克县| 习水县| 迁西县| 阜平县| 贵南县| 梨树县| 永川市| 木里| 三河市| 肇东市| 梁河县| 西青区| 石狮市| 会泽县| 深水埗区| 桐庐县| 金阳县| 德阳市| 承德县| 龙州县| 婺源县| 西乌珠穆沁旗|