Table of Contents
Redis
1. Add redis dependency
2. Configuration file
3. Operation redis API
RedisTemplate<Object, Object> looks more "powerful" than StringRedisTemplate because it does not require that the key and value types must be String.
a. Key expiration
Automatic expiration problem of key. Redis can set a timeout when storing each data. time, the data will be automatically deleted after this time.
6, SpringBoot operates Hash (hash)
Generally when we store a key, it will naturally Using get/set to store is actually not a good idea. Redis will have a minimum memory to store a key. No matter how small the key you store is, it will not be less than this memory. Therefore, reasonable use of Hash can help us save a lot of memory.
Redis List has many application scenarios and is also one of the most important data structures of Redis. You can easily implement a queue using List. A typical application scenario of List is message queue. You can use the Push operation of List to store tasks in the List, and then the worker thread uses the POP operation to take out the task for execution.
The external functions provided by Redis Set are similar to List. It is a list function. The special thing is that Set can automatically deduplicate when you need it. Set is a good choice when storing a list of data and does not want duplicate data, and Set provides an important interface for determining whether a member is in a Set collection, which List cannot provide.
The usage scenarios of Redis ZSet are similar to Set. The difference is that Set is not automatically ordered, and ZSet can provide an additional priority (Score) through the user. ) parameters to sort the members, and it is insertion order, that is, automatic sorting.
Home Database Redis How does Java SpringBoot operate Redis?

How does Java SpringBoot operate Redis?

Jun 03, 2023 pm 06:01 PM
java redis springboot

    Redis

    1. Add redis dependency

    spring Boot provides a component package for Redis integration: spring-boot-starter-data-redis, which depends on spring-data-redis and lettuce.

    In addition, there are two small details here:

    • In the Spring Boot 1.x era, the bottom layer of spring-data-redis used Jedis; in the 2.x era Replaced with Lettuce.

    • Lettuce depends on 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>
    Copy after login

    2. Configuration file

    ## 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
    Copy after login

    3. Operation redis API

    In this unit test, we use redisTemplate to store a string "Hello Redis".

    Spring Data Redis has reclassified and encapsulated the api, encapsulating the same type of operations into Operation interface:

    ##ValueOperationsData operations of string typeListOperationslist type data operationSetOperationsset type data operationZSetOperations zset type data operationHashOperationsmap type data operation##
    //解决中文乱码问题
    @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;
        }
    }
    Copy after login
    4, RedisTemplate and StringRedisTemplate
    Proprietary operationsDescription

    RedisTemplate looks more "powerful" than StringRedisTemplate because it does not require that the key and value types must be String.

    But obviously, this is contrary to the actual situation of Redis: at the smallest storage unit level, Redis can essentially only store strings and cannot store other types. From this point of view, StringRedisTemplate is more in line with the storage nature of Redis. How does RedisTemplate support any type by serializing values?.

    When using RedisTemplate to store objects, the address of the object will be saved for deserialization, which will greatly waste storage space. To solve this problem, use StringRedisTemplate, thinking that manual serialization and deserialization are required

     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工具反序化成对象
    Copy after login

    If the spring-boot-starter-web dependency is not introduced in springboot, you need to add the jackson dependency.

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

    5. SpringBoot operates String string

    a. Key expiration

    Automatic expiration problem of key. Redis can set a timeout when storing each data. time, the data will be automatically deleted after this time.

    Commonly used redis time units

    MINUTES

    : Minutes

    SECONDS

    : Seconds

    DAYS

    : Day

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

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

    Generally when we store a key, it will naturally Using get/set to store is actually not a good idea. Redis will have a minimum memory to store a key. No matter how small the key you store is, it will not be less than this memory. Therefore, reasonable use of Hash can help us save a lot of memory.

    	@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);
        }
    Copy after login

    According to the above test case, it is found that three parameters need to be passed in during Hash set. The first is key, the second is field, and the third is the stored value. Generally speaking, Key represents a set of data, field is the attribute related to key, and value is the value corresponding to the attribute.

    7. SpringBoot operates List collection type

    Redis List has many application scenarios and is also one of the most important data structures of Redis. You can easily implement a queue using List. A typical application scenario of List is message queue. You can use the Push operation of List to store tasks in the List, and then the worker thread uses the POP operation to take out the task for execution.

    /**
         * 测试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);
            }
        }
    }
    Copy after login

    Redis List is implemented as a two-way linked list, which can support reverse search and traversal, making it more convenient to operate. However, it brings some additional memory overhead, many implementations within Redis, including sending buffer queues, etc. This data structure is also used.

    8. SpringBoot operates Set collection type

    The external functions provided by Redis Set are similar to List. It is a list function. The special thing is that Set can automatically deduplicate when you need it. Set is a good choice when storing a list of data and does not want duplicate data, and Set provides an important interface for determining whether a member is in a Set collection, which List cannot provide.

     /**
         * 测试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 中
     
        }
    }
    Copy after login

    9. SpringBoot operates ZSet collection type

    The usage scenarios of Redis ZSet are similar to Set. The difference is that Set is not automatically ordered, and ZSet can provide an additional priority (Score) through the user. ) parameters to sort the members, and it is insertion order, that is, automatic sorting.

    	/**
         * 测试ZSet
         * range(key, 0, 3) 从开始下标到结束下标,score从小到大排序
         * reverseRange  score从大到小排序
         * rangeByScore(key, 0, 3); 返回Score在0至3之间的数据
         */
        @Test
        public void testZset() {
            final String key = "lz";
            ZSetOperations<String,Object> zset = redisTemplate.opsForZSet();
            zset.add(key, "hello", 1);
            zset.add(key, "world", 6);
            zset.add(key, "good", 4);
            zset.add(key, "bye", 3);
    
            Set<Object> zsets = zset.range(key, 0, 3);
            for (Object v : zsets) {
                System.out.println("zset-A value :"+v);
            }
            
            System.out.println("=======");
            Set<Object> zsetB = zset.rangeByScore(key, 0, 3);
            for (Object v : zsetB) {
                System.out.println("zset-B value :"+v);
            }
        }
    }
    Copy after login

    The above is the detailed content of How does Java SpringBoot operate Redis?. For more information, please follow other related articles on the PHP Chinese website!

    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    Video Face Swap

    Video Face Swap

    Swap faces in any video effortlessly with our completely free AI face swap tool!

    Hot Tools

    Notepad++7.3.1

    Notepad++7.3.1

    Easy-to-use and free code editor

    SublimeText3 Chinese version

    SublimeText3 Chinese version

    Chinese version, very easy to use

    Zend Studio 13.0.1

    Zend Studio 13.0.1

    Powerful PHP integrated development environment

    Dreamweaver CS6

    Dreamweaver CS6

    Visual web development tools

    SublimeText3 Mac version

    SublimeText3 Mac version

    God-level code editing software (SublimeText3)

    Hot Topics

    Java Tutorial
    1664
    14
    PHP Tutorial
    1268
    29
    C# Tutorial
    1246
    24
    PHP's Impact: Web Development and Beyond PHP's Impact: Web Development and Beyond Apr 18, 2025 am 12:10 AM

    PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

    How to use the Redis cache solution to efficiently realize the requirements of product ranking list? How to use the Redis cache solution to efficiently realize the requirements of product ranking list? Apr 19, 2025 pm 11:36 PM

    How does the Redis caching solution realize the requirements of product ranking list? During the development process, we often need to deal with the requirements of rankings, such as displaying a...

    Redis's Role: Exploring the Data Storage and Management Capabilities Redis's Role: Exploring the Data Storage and Management Capabilities Apr 22, 2025 am 12:10 AM

    Redis plays a key role in data storage and management, and has become the core of modern applications through its multiple data structures and persistence mechanisms. 1) Redis supports data structures such as strings, lists, collections, ordered collections and hash tables, and is suitable for cache and complex business logic. 2) Through two persistence methods, RDB and AOF, Redis ensures reliable storage and rapid recovery of data.

    Laravel8 optimization points Laravel8 optimization points Apr 18, 2025 pm 12:24 PM

    Laravel 8 provides the following options for performance optimization: Cache configuration: Use Redis to cache drivers, cache facades, cache views, and page snippets. Database optimization: establish indexing, use query scope, and use Eloquent relationships. JavaScript and CSS optimization: Use version control, merge and shrink assets, use CDN. Code optimization: Use Composer installation package, use Laravel helper functions, and follow PSR standards. Monitoring and analysis: Use Laravel Scout, use Telescope, monitor application metrics.

    What should I do if the Redis cache of OAuth2Authorization object fails in Spring Boot? What should I do if the Redis cache of OAuth2Authorization object fails in Spring Boot? Apr 19, 2025 pm 08:03 PM

    In SpringBoot, use Redis to cache OAuth2Authorization object. In SpringBoot application, use SpringSecurityOAuth2AuthorizationServer...

    Title: How to use Composer to solve distributed locking problems Title: How to use Composer to solve distributed locking problems Apr 18, 2025 am 08:39 AM

    Summary Description: Distributed locking is a key tool for ensuring data consistency when developing high concurrency applications. This article will start from a practical case and introduce in detail how to use Composer to install and use the dino-ma/distributed-lock library to solve the distributed lock problem and ensure the security and efficiency of the system.

    Redis: Understanding Its Architecture and Purpose Redis: Understanding Its Architecture and Purpose Apr 26, 2025 am 12:11 AM

    Redis is a memory data structure storage system, mainly used as a database, cache and message broker. Its core features include single-threaded model, I/O multiplexing, persistence mechanism, replication and clustering functions. Redis is commonly used in practical applications for caching, session storage, and message queues. It can significantly improve its performance by selecting the right data structure, using pipelines and transactions, and monitoring and tuning.

    Why is the return value empty when using RedisTemplate for batch query? Why is the return value empty when using RedisTemplate for batch query? Apr 19, 2025 pm 10:15 PM

    Why is the return value empty when using RedisTemplate for batch query? When using RedisTemplate for batch query operations, you may encounter the returned results...

    See all articles