非关系型数据库-Redis

avatar
作者
猴君
阅读量:3

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非常灵活和易于使用。

      

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!