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

Redis在項目中的使用(JedisPool方式)

 更新時間:2021年12月24日 11:22:17   作者:HongMaJu  
項目操作redis是使用的RedisTemplate方式,另外還可以完全使用JedisPool和Jedis來操作redis,本文給大家介紹Redis在項目中的使用,JedisPool方式,感興趣的朋友跟隨小編一起看看吧

springboot中redis相關(guān)配置

1、pom.xml中引入依賴

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

2、springboot的習(xí)慣優(yōu)于配置。也在項目中使用了application.yml文件配置mysql的基本配置項。這里也在application.yml里面配置redis的配置項。

spring:
  datasource:
        # 驅(qū)動配置信息
        url: jdbc:mysql://localhost:3306/spring_boot?useUnicode=true&characterEncoding=utf8
        username: root
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver

        # 連接池的配置信息
        filters: stat
        maxActive: 20
        initialSize: 1
        maxWait: 60000
        minIdle: 1
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: select 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxOpenPreparedStatements: 20
  redis:
        host: 127.0.0.1
        port: 6379
        password: pass1234
        pool:
          max-active: 100
          max-idle: 10
          max-wait: 100000
        timeout: 0

springboot中redis相關(guān)類

  • 項目操作redis是使用的RedisTemplate方式,另外還可以完全使用JedisPool和Jedis來操作redis。整合的內(nèi)容也是從網(wǎng)上收集整合而來,網(wǎng)上整合的方式和方法非常的多,有使用注解形式的,有使用Jackson2JsonRedisSerializer來序列化和反序列化key value的值等等,很多很多。這里使用的是我認(rèn)為比較容易理解和掌握的,基于JedisPool配置,使用RedisTemplate來操作redis的方式。

redis單獨放在一個包redis里,在包里先創(chuàng)建RedisConfig.java文件。

RedisConfig.java

@Configuration
@EnableAutoConfiguration
public class RedisConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.redis.pool")
    public JedisPoolConfig getRedisConfig(){
        JedisPoolConfig config = new JedisPoolConfig();
        return config;
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.redis")
    public JedisConnectionFactory getConnectionFactory() {
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setUsePool(true);
        JedisPoolConfig config = getRedisConfig();
        factory.setPoolConfig(config);
        return factory;
    }

    @Bean
    public RedisTemplate<?, ?> getRedisTemplate() {
        JedisConnectionFactory factory = getConnectionFactory();
        RedisTemplate<?, ?> template = new StringRedisTemplate(factory);
        return template;
    }

}
  • 在包里創(chuàng)建RedisService接口的實現(xiàn)類RedisServiceImpl,這個類實現(xiàn)了接口的所有方法。

RedisServiceImpl.java

@Service("redisService")
public class RedisServiceImpl implements RedisService {

    @Resource
    private RedisTemplate<String, ?> redisTemplate;

    @Override
    public boolean set(final String key, final String value) {
        boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
            @Override
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                connection.set(serializer.serialize(key), serializer.serialize(value));
                return true;
            }
        });
        return result;
    }

    @Override
    public String get(final String key) {
        String result = redisTemplate.execute(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                byte[] value = connection.get(serializer.serialize(key));
                return serializer.deserialize(value);
            }
        });
        return result;
    }

    @Override
    public boolean expire(final String key, long expire) {
        return redisTemplate.expire(key, expire, TimeUnit.SECONDS);
    }

    @Override
    public boolean remove(final String key) {
        boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
            @Override
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                connection.del(key.getBytes());
                return true;
            }
        });
        return result;
    }
}

在這里execute()方法具體的底層沒有去研究,只知道這樣能實現(xiàn)對于redis數(shù)據(jù)的操作。
redis保存的數(shù)據(jù)會在內(nèi)存和硬盤上存儲,所以需要做序列化;這個里面使用的StringRedisSerializer來做序列化,不過這個方式的泛型指定的是String,只能傳String進(jìn)來。所以項目中采用json字符串做redis的交互。

到此,redis在springboot中的整合已經(jīng)完畢,下面就來測試使用一下。

5. springboot項目中使用redis

在這里就直接使用springboot項目中自帶的單元測試類SpringbootApplicationTests進(jìn)行測試。

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

    private JSONObject json = new JSONObject();

    @Autowired
    private RedisService redisService;

    @Test
    public void contextLoads() throws Exception {
    }


    /**
     * 插入字符串
     */
    @Test
    public void setString() {
        redisService.set("redis_string_test", "springboot redis test");
    }

    /**
     * 獲取字符串
     */
    @Test
    public void getString() {
        String result = redisService.get("redis_string_test");
        System.out.println(result);
    }

    /**
     * 插入對象
     */
    @Test
    public void setObject() {
        Person person = new Person("person", "male");
        redisService.set("redis_obj_test", json.toJSONString(person));
    }

    /**
     * 獲取對象
     */
    @Test
    public void getObject() {
        String result = redisService.get("redis_obj_test");
        Person person = json.parseObject(result, Person.class);
        System.out.println(json.toJSONString(person));
    }

    /**
     * 插入對象List
     */
    @Test
    public void setList() {
        Person person1 = new Person("person1", "male");
        Person person2 = new Person("person2", "female");
        Person person3 = new Person("person3", "male");
        List<Person> list = new ArrayList<>();
        list.add(person1);
        list.add(person2);
        list.add(person3);
        redisService.set("redis_list_test", json.toJSONString(list));
    }

    /**
     * 獲取list
     */
    @Test
    public void getList() {
        String result = redisService.get("redis_list_test");
        List<String> list = json.parseArray(result, String.class);
        System.out.println(list);
    }

    @Test
    public void remove() {
        redisService.remove("redis_test");
    }

}

class Person {
    private String name;
    private String sex;

    public Person() {

    }

    public Person(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

在這里先是用@Autowired注解把redisService注入進(jìn)來,然后由于是使用json字符串進(jìn)行交互,所以引入fastjson的JSONObject類。然后為了方便,直接在這個測試類里面加了一個Person的內(nèi)部類。

一共測試了:對于string類型的存取,對于object類型的存取,對于list類型的存取,其實本質(zhì)都是轉(zhuǎn)成了json字符串。還有就是根據(jù)key來執(zhí)行remove操作。

獲取字符串:

獲取對象:

獲取list:

redis管理客戶端數(shù)據(jù):

到此,測試完成,對于常用的一些數(shù)據(jù)類型的轉(zhuǎn)換存取操作也基本調(diào)試通過。所以本文對于springboot整合redis到此結(jié)束。

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

相關(guān)文章

  • Redis 徹底禁用RDB持久化操作

    Redis 徹底禁用RDB持久化操作

    這篇文章主要介紹了Redis 徹底禁用RDB持久化的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Redis 的查詢很快的原因解析及Redis 如何保證查詢的高效

    Redis 的查詢很快的原因解析及Redis 如何保證查詢的高效

    由于redis是內(nèi)存數(shù)據(jù)庫,歸功于它的數(shù)據(jù)結(jié)構(gòu)所以查詢效率非常高,今天通過本文給大家介紹下Redis 的查詢很快的原因解析及Redis 如何保證查詢的高效,感興趣的朋友一起看看吧
    2022-03-03
  • Redis6 主從復(fù)制及哨兵機制的實現(xiàn)

    Redis6 主從復(fù)制及哨兵機制的實現(xiàn)

    本文主要介紹了Redis6 主從復(fù)制及哨兵機制的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Django使用Redis進(jìn)行緩存詳細(xì)步驟

    Django使用Redis進(jìn)行緩存詳細(xì)步驟

    這篇文章主要介紹了Django使用Redis進(jìn)行緩存詳細(xì)流程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 基于Redis實現(xiàn)API接口訪問次數(shù)限制

    基于Redis實現(xiàn)API接口訪問次數(shù)限制

    日常開發(fā)中會有一個常見的需求,需要限制接口在單位時間內(nèi)的訪問次數(shù),比如說某個免費的接口限制單個IP一分鐘內(nèi)只能訪問5次,該怎么實現(xiàn)呢,本文小編給大家介紹了如何基于Redis實現(xiàn)API接口訪問次數(shù)限制,需要的朋友可以參考下
    2024-11-11
  • 最新評論

    紫云| 方城县| 深州市| 台山市| 康定县| 莎车县| 营口市| 乾安县| 灌南县| 武冈市| 镇远县| 白水县| 潞城市| 子长县| 苏尼特右旗| 泗洪县| 肇州县| 莎车县| 英德市| 婺源县| 南陵县| 巴里| 姜堰市| 石林| 固原市| 邵阳县| 天津市| 辽宁省| 合川市| 文安县| 祁东县| 南郑县| 西平县| 凤冈县| 高碑店市| 班玛县| 嘉定区| 名山县| 衢州市| 昆明市| 武清区|