非关系型数据库-Redis

Redis

     Redis是一个开源的内存数据库系统,其主要用途是作为高速缓存、消息队列和键值存储系统。Redis具有丰富的数据结构和功能,可以支持字符串、哈希、列表、集合和有序集合等数据类型。它以其快速、可扩展和高可用性而闻名,并且具有对事务、发布/订阅和持久化等特性的支持。Redis也被广泛应用于Web应用程序、实时分析、消息传递和数据缓存等领域。

Spring的支持 

步骤1:添加依赖 在你的Spring项目的pom.xml文件中添加Redis依赖。

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

步骤2:配置Redis连接信息 在你的Spring项目的application.properties(或application.yml)文件中配置Redis连接信息。

application.properties:

spring.redis.host=your.redis.host
spring.redis.port=your.redis.port
spring.redis.password=your.redis.password

application.yml:

spring:
  redis:
    host: your.redis.host
    port: your.redis.port
    password: your.redis.password

步骤3:创建Redis配置类 创建一个Redis配置类来设置Redis连接工厂。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Value("${spring.redis.host}")
    private String redisHost;

    @Value("${spring.redis.port}")
    private int redisPort;

    @Value("${spring.redis.password}")
    private String redisPassword;

    @Bean
    public LettuceConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(redisHost, redisPort);
        config.setPassword(RedisPassword.of(redisPassword));
        return new LettuceConnectionFactory(config);
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory());

        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        return template;
    }
}

步骤4:使用RedisTemplate进行操作 现在,你可以使用RedisTemplate对Redis进行操作了。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class RedisService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void setValue(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    public Object getValue(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    public boolean exists(String key) {
        return redisTemplate.hasKey(key);
    }

    public void delete(String key) {
        redisTemplate.delete(key);
    }
    
    // 其他Redis操作
}

使用

    

1.opsForValue()是RedisTemplate类中的方法之一,用于操作字符串类型的数据。它提供了一系列对字符串进行操作的方法,比如设置值、获取值、修改值、删除值等等。

例子:

 redisTemplate.opsForValue().set("key", "value"); //设置键为"key",值为"value"的键值对 String value = redisTemplate.opsForValue().get("key"); //获取键为"key"的值,并赋给变量value

2.opsForList()是RedisTemplate类中的方法之一,用于操作列表类型的数据。它提供了一系列对列表进行操作的方法,比如添加元素、获取范围内的元素、删除元素等等。

例子:

redisTemplate.opsForList().leftPush("list", "value1"); //在名为"list"的列表的左侧添加元素"value1" List<String> values = redisTemplate.opsForList().range("list", 0, -1); //获取名为"list"的列表中所有元素

3.opsForSet()是RedisTemplate类中的方法之一,用于操作集合类型的数据。它提供了一系列对集合进行操作的方法,比如添加元素、获取所有元素、删除元素等等。

例子:

redisTemplate.opsForSet().add("set", "value1", "value2"); //向名为"set"的集合中添加元素"value1"和"value2"

Set<String> values = redisTemplate.opsForSet().members("set"); //获取名为"set"的集合中所有元素

4.opsForZSet()是RedisTemplate类中的方法之一,用于操作有序集合类型的数据。它提供了一系列对有序集合进行操作的方法,比如添加元素、获取排名范围内的元素等等。

例子:

redisTemplate.opsForZSet().add("zset", "value1", 1.0); //向名为"zset"的有序集合中添加元素"value1",并设定它的分值为1.0 Set<String> values = redisTemplate.opsForZSet().range("zset", 0, -1); //获取名为"zset"的有序集合中所有元素

5.opsForHash()是RedisTemplate类中的方法之一,用于操作哈希类型的数据。它提供了一系列对哈希进行操作的方法,比如添加字段和值、获取字段的值等等。

例子:

redisTemplate.opsForHash().put("hash", "field1", "value1"); //在名为"hash"的哈希中添加字段"field1"和对应的值"value1"

String value = (String) redisTemplate.opsForHash().get("hash", "field1"); //获取名为"hash"的哈希中字段"field1"的值

Spring Boot的支持

 

步骤1:添加Redis依赖项 在你的Spring Boot项目的pom.xml文件中添加以下依赖项:

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

步骤2:配置Redis连接 在你的application.properties或application.yml文件中添加以下配置:

application.properties

spring.redis.host=your_redis_host
spring.redis.port=your_redis_port
spring.redis.password=your_redis_password

application.yml

spring:
  redis:
    host: your_redis_host
    port: your_redis_port
    password: your_redis_password

步骤3:创建Redis配置类 创建一个Redis配置类来配置连接工厂和Redis模板。在这个类中,你可以自定义Redis连接池、序列化器等配置。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory();
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

步骤4:使用RedisTemplate操作Redis 现在,你可以在任何Spring Bean中注入RedisTemplate来操作Redis数据库。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class ExampleService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void setKey(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    public Object getValue(String key) {
        return redisTemplate.opsForValue().get(key);
    }
}

总结

  1. 数据结构:Redis支持多种数据结构,包括字符串(string)、哈希表(hash)、列表(list)、集合(set)、有序集合(sorted set)等。这些数据结构可以在内存中高效地存储和操作数据。

  2. 内存存储:Redis将数据存储在内存中,这使得它能够快速地读取和写入数据。同时,Redis还支持将数据持久化到磁盘,以便在重启后能够恢复数据。

  3. 单线程:Redis是单线程的,这意味着它在任何时刻只会执行一个操作。这种设计减少了线程切换的开销,并提高了系统的性能。此外,Redis还通过使用异步IO和多路复用技术来提高并发性能。

  4. 高并发:Redis支持高并发访问,可以同时处理大量的请求。它采用了多种优化策略,如使用连接池、异步IO和多路复用等技术,以提高系统的并发能力。

  5. 发布订阅:Redis支持发布订阅模式,可以实现消息的发布和订阅。当有新的消息发布时,所有订阅者将会收到消息,这使得Redis非常适合构建实时应用。

  6. 事务:Redis支持事务操作,可以将一系列的操作作为一个原子操作进行执行。事务操作可以保证操作的一致性,同时还支持回滚操作。

  7. 丰富的功能:除了基本的数据结构操作,Redis还提供了丰富的功能,如排序、分页、过期策略、持久化、集群等。这些功能使得Redis非常灵活和易于使用。

      

相关推荐

  1. 关系数据库-Redis

    2024-05-04 14:08:04       9 阅读
  2. 关系数据库关系数据库Redis数据库

    2024-05-04 14:08:04       17 阅读
  3. linux系统关系数据库redis

    2024-05-04 14:08:04       33 阅读
  4. NoSQL(关系数据库)之Redis

    2024-05-04 14:08:04       37 阅读
  5. Redis关系数据库

    2024-05-04 14:08:04       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-04 14:08:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-04 14:08:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-04 14:08:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-04 14:08:04       20 阅读

热门阅读

  1. 预积分的推导

    2024-05-04 14:08:04       9 阅读
  2. mongoDB

    2024-05-04 14:08:04       11 阅读
  3. Docker in Docker:深入解析与实战应用

    2024-05-04 14:08:04       10 阅读
  4. 汽车 - 降档补油超车

    2024-05-04 14:08:04       9 阅读
  5. AIGC在汽车软件开发的应用举例

    2024-05-04 14:08:04       9 阅读
  6. 项目使用git开发流程

    2024-05-04 14:08:04       6 阅读
  7. 输入序列太长 gan CGAN

    2024-05-04 14:08:04       7 阅读
  8. Spring Bean Scope

    2024-05-04 14:08:04       14 阅读
  9. 网络工程师----第十九天:

    2024-05-04 14:08:04       9 阅读