Rumah >pangkalan data >Redis >Bagaimanakah Java SpringBoot mengendalikan Redis?

Bagaimanakah Java SpringBoot mengendalikan Redis?

PHPz
PHPzke hadapan
2023-06-03 18:01:45606semak imbas

    Redis

    1 Tambah pergantungan redis

    spring Boot menyediakan pakej komponen untuk penyepaduan Redis: spring. -boot-starter-data-redis, yang bergantung pada spring-data-redis dan salad.

    Selain itu, terdapat dua butiran kecil di sini:

    • Dalam era Spring Boot 1.x, lapisan bawah spring-data-redis menggunakan Jedis; era 2.x Digantikan dengan Lettuce.

    • Lettuce bergantung pada commons-pool2

    <!-- springboot整合redis--> 
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- 使用 lettuce 时要加这个包;使用 jedis 时则不需要。-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
    </dependency>

    2. Fail konfigurasi

    ## Redis 服务器地址
    spring.redis.host=localhost
    ## Redis 服务器连接端口
    spring.redis.port=6379
    ## Redis 数据库索引(默认为 0)
    spring.redis.database=0
    
    ## 以下非必须,有默认值
    ## Redis 服务器连接密码(默认为空)
    spring.redis.password=
    ## 连接池最大连接数(使用负值表示没有限制)默认 8
    spring.redis.lettuce.pool.max-active=8
    ## 连接池最大阻塞等待时间(使用负值表示没有限制)默认 -1
    spring.redis.lettuce.pool.max-wait=-1
    ## 连接池中的最大空闲连接 默认 8
    spring.redis.lett	uce.pool.max-idle=8
    ## 连接池中的最小空闲连接 默认 0
    spring.redis.lettuce.pool.min-idle=0

    3

    Dalam ujian unit ini, kami menggunakan redisTemplate untuk menyimpan rentetan

    . "Hello Redis"

    Spring Data Redis telah mengklasifikasikan semula dan merangkum api, merangkum jenis operasi yang sama ke dalam antara muka

    Operasi:

    //解决中文乱码问题
    @Configuration
    public class RedisConfig {
        
        @Bean
        public RedisTemplate redisTemplateInit(RedisConnectionFactory redisConnectionFactory) {
    
            RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
    
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            //设置序列化Key的实例化对象
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            //设置序列化Value的实例化对象
            redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    
            /**
             *
             * 设置Hash类型存储时,对象序列化报错解决
             */
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
            return redisTemplate;
        }
    }
    专有操作 说明
    ValueOperations string 类型的数据操作
    ListOperations list 类型的数据操作
    SetOperations set 类型数据操作
    ZSetOperations zset 类型数据操作
    HashOperations map 类型的数据操作
    4, RedisTemplate dan StringRedisTemplate

    RedisTemplateb272177b2cdcb9ccceef20c389511534 kelihatan lebih "berkuasa" daripada StringRedisTemplate kerana ia tidak memerlukan jenis kunci dan nilai mestilah String.

    Tetapi jelas sekali, ini bertentangan dengan situasi sebenar Redis: pada tahap unit storan terkecil, Redis pada asasnya hanya boleh menyimpan rentetan dan tidak boleh menyimpan jenis lain. Dari sudut pandangan ini, StringRedisTemplate lebih sesuai dengan sifat penyimpanan Redis. Bagaimanakah RedisTemplate menyokong sebarang jenis dengan menyerikan nilai?.

    Apabila menggunakan RedisTemplate untuk menyimpan objek, alamat objek akan disimpan untuk penyahsiran, yang sangat membazirkan ruang storan untuk menyelesaikan masalah ini, gunakan StringRedisTemplate, saya rasa anda mahu memasangkan pensirilan dan penyahserilan secara manual >
     Users users = new Users();
     users.setId(2);
     users.setUsername("李四2");
     redisTemplate.opsForValue().set("user:2", JSON.toJSONString(users)); //存的时候序列化对象
     String u = redisTemplate.opsForValue().get("user:2");  //redis 只能返回字符串
     System.out.println("u="+ JSON.parseObject(u,Users.class));  //使用JSON工具反序化成对象

    Jika kebergantungan spring-boot-starter-web tidak diperkenalkan dalam springboot, anda perlu menambah kebergantungan jackson.

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </dependency>

    5. SpringBoot mengendalikan rentetan String

    a tamat tempoh kunci

    Masalah tamat tempoh automatik Redis boleh menetapkan tamat masa apabila menyimpan setiap data akan dipadamkan secara automatik selepas masa ini.

    Unit masa redis yang biasa digunakan

    MINIT

    : Minit

    SAAT

    : Saat

    DAYS

    : Days

    //给user对象设置10分钟过期时间
    redisTemplate.opsForValue().set("user:1", JSON.toJSONString(users),10,TimeUnit.MINUTES );
    b Padamkan data

     //删除键
     redisTemplate.delete(key);
     //判断键是否存在
     boolean exists = redisTemplate.hasKey(key);
    6 SpringBoot mengendalikan Hash (hash)

    Secara amnya apabila kita menyimpan kunci, ia akan menjadi semula jadi. dapatkan/set untuk menyimpan sebenarnya bukan idea yang baik. Redis akan mempunyai memori minimum untuk menyimpan kunci Tidak kira betapa kecilnya kunci yang anda simpan, ia tidak akan kurang daripada memori ini. Oleh itu, penggunaan Hash yang munasabah boleh membantu kami menjimatkan banyak memori.

    	@Test
        public void testHash() {
            String key = "tom";
            HashOperations<String, Object, Object> operations = redisTemplate.opsForHash();
            operations.put(key, "name", "tom");
            operations.put(key, "age", "20");
            String value= (String) operations.get(key,"name");
            System.out.println(value);
        }

    Menurut kes ujian di atas, didapati tiga parameter perlu dilalui apabila Hash ditetapkan, yang pertama ialah kunci, yang kedua ialah medan, dan yang ketiga ialah nilai yang disimpan. Secara umumnya, Kunci mewakili satu set data, medan ialah atribut yang berkaitan dengan kunci, dan nilai ialah nilai yang sepadan dengan atribut.

    7. SpringBoot mengendalikan jenis koleksi Senarai

    Senarai Redis mempunyai banyak senario aplikasi dan juga merupakan salah satu struktur data terpenting Redis. Anda boleh melaksanakan baris gilir dengan mudah menggunakan Senarai Senario aplikasi biasa Senarai ialah baris gilir mesej Anda boleh menggunakan operasi Tekan Senarai untuk menyimpan tugas dalam Senarai, dan kemudian utas pekerja menggunakan operasi POP untuk mengeluarkan tugasan untuk pelaksanaan.

    /**
         * 测试List
         * leftPush 将数据添加到key对应的现有数据的左边,也就是头部
         * leftPop  取队列最左边数据(从数据库移除)
         * rightPush 将数据添加到key对应的现有数据的右边,也就是尾部
         */
        @Test
        public void testList() {
            final String key = "list";
            ListOperations<String,Object> list = redisTemplate.opsForList();
            list.leftPush(key, "hello");
            list.leftPush(key, "world");
            list.leftPush(key, "goodbye");
          
            Object mete = list.leftPop("list");
            System.out.println("删除的元素是:"+mete); //删除 goodbye 
            String value = (String) list.leftPop(key);
    
            System.out.println(value.toString());
            
            // range(key, 0, 2) 从下标0开始找,找到2下标
            List<Object> values = list.range(key, 0, 2);
            for (Object v : values) {
                System.out.println("list range :" + v);
            }
        }
    }

    Pelaksanaan Senarai Redis ialah senarai terpaut dua hala, yang boleh menyokong carian terbalik dan traversal, menjadikannya lebih mudah untuk dikendalikan Walau bagaimanapun, ia membawa beberapa overhed memori tambahan, banyak pelaksanaan dalam Redis, termasuk menghantar baris gilir penimbal, dsb. Struktur data ini juga digunakan.

    8. SpringBoot mengendalikan jenis koleksi Set

    Fungsi luaran yang disediakan oleh Set Redis adalah serupa dengan Senarai Ia adalah fungsi senarai . Set ialah pilihan yang baik apabila menyimpan senarai data dan tidak mahu data pendua, dan Set menyediakan antara muka yang penting untuk menentukan sama ada ahli berada dalam koleksi Set, yang tidak dapat disediakan oleh Senarai.

     /**
         * 测试Set
         */
        @Test
        public void testSet() {
            final String key = "set";
            SetOperations<String,Object> set = redisTemplate.opsForSet();
            set.add(key, "hello");
            set.add(key, "world");
            set.add(key, "world");
            set.add(key, "goodbye");
            Set<Object> values = set.members(key);
            for (Object v : values) {
                System.out.println("set value :" + v);
            }
           
            Boolean exist = set.isMember(key,"hello") //判断是否存在某个元素
            operations.move("set", "hello", "setcopy"); //把set集合中的hello元素放到setcopy 中
     
        }
    }

    9. SpringBoot mengendalikan jenis koleksi ZSet

    Senario penggunaan Redis ZSet adalah serupa dengan Set Perbezaannya ialah Set tidak dipesan secara automatik, dan ZSet boleh memberikan keutamaan tambahan (Skor ) melalui pengguna. ) parameter untuk mengisih ahli, dan ia adalah susunan sisipan, iaitu pengisihan automatik.

    rreeee

    Atas ialah kandungan terperinci Bagaimanakah Java SpringBoot mengendalikan Redis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam