您现在的位置是:首页 >其他 >Redis详解网站首页其他

Redis详解

慕言要努力 2023-07-10 16:00:04
简介Redis详解

在这里插入图片描述

一、Redis是什么

Redis全称Remote Dictionary Server,是一种高级key-value存储系统,属于NoSQL的一种。Redis支持多种数据结构,包括字符串、哈希表、列表、集合等等,具备高性能、高并发、多线程等特点,能够为Web应用程序提供快速的数据存储和访问能力。
官网:Redis官网

二、Redis的作用

Redis常用于缓存、Session管理、消息队列等方面,其支持的多种数据结构也能满足不同应用场景的需求。Redis的缓存功能能够将经常访问但不经常更改的数据存储在内存中,提高Web应用程序的响应速度和并发能力。Redis的消息队列能够实现异步处理数据的功能,提高了系统的可扩展性和可靠性。

三、Redis的优缺点

优点缺点
数据存取速度快存储容量受限
多种数据结构支持磁盘存储成本相对较高
高并发处理能力数据一致性需要应用程序保证
数据存储在内存中,读写速度极快访问安全性需要应用程序保证
使用方便,支持多种语言集群配置建设和维护相对复杂

四、Redis跟其他的对比

比较对象RedisMemcachedMySQL
数据类型支持多种数据结构只支持key-value支持多种关系型数据
性能读写速度极快,高并发能力读写速度较快,高并发能力读写速度较慢,低并发能力
存储容量受限于内存大小受限于内存大小可以通过文件系统配置
持久化支持AOF及RDB两种方式不支持持久化支持多种持久化方式
扩展性支持分片机制不支持分片机制支持分区机制

五、SpringBoot整合Redis以及使用

SpringBoot对于Redis的支持相当友好,下面分别介绍如何整合Redis及使用Redis。

1. 依赖引入

pom.xml中添加以下依赖:

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

2. Redis配置

在application.yml中添加Redis配置:

spring:
  redis:
    host: localhost
    port: 6379
    password:
    database: 0
    jedis:
      pool:
        max-active: 100
        max-idle: 10
        min-idle: 5
        max-wait: -1ms

3. Redis操作

Redis的操作基本与Java集合类类似,下面分别介绍Redis操作常见的几种数据结构。

3.1 字符串类型
// 字符串类型 SET操作
redisTemplate.opsForValue().set("key", "value", 60, TimeUnit.SECONDS);
// 字符串类型 GET操作
String value = redisTemplate.opsForValue().get("key");
3.2 哈希表类型
// 哈希表类型 HSET操作
redisTemplate.opsForHash().put("key1", "key2", "value");
// 哈希表类型 HGET操作
String value = redisTemplate.opsForHash().get("key1", "key2");
3.3 列表类型
//列表类型 LPUSH操作
redisTemplate.opsForList().leftPush("list", "1");
//列表类型 LRANGE
//获取列表数据
List<Object> list = redisTemplate.opsForList().range("list", 0L, -1L);
3.4 集合类型
// 集合类型 SADD操作
redisTemplate.opsForSet().add("set", "value1", "value2", "value3");
// 集合类型 SMEMBERS操作
Set<Object> set = redisTemplate.opsForSet().members("set");

4. 示例代码

下面提供基于SpringBoot整合Redis的示例代码。

4.1 Redis配置类
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);
        //设置序列化器
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}
4.2 Redis服务类
@Service
public class RedisService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

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

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

    public void delete(String key) {
        redisTemplate.delete(key);
    }

    public void hSet(String key, String field, Object value) {
        redisTemplate.opsForHash().put(key, field, value);
    }

    public Object hGet(String key, String field) {
        return redisTemplate.opsForHash().get(key, field);
    }

    public void delete(String key, String field) {
        redisTemplate.opsForHash().delete(key, field);
    }

    public void lPush(String key, Object value) {
        redisTemplate.opsForList().leftPush(key, value);
    }

    public List<Object> lRange(String key, long start, long end) {
        return redisTemplate.opsForList().range(key, start, end);
    }

    public void add(String key, Object... values) {
        redisTemplate.opsForSet().add(key, values);
    }

    public Set<Object> members(String key) {
        return redisTemplate.opsForSet().members(key);
    }
}
4.3 示例控制器
@RestController
public class RedisController {

    @Autowired
    private RedisService redisService;

    @GetMapping("/set")
    public String set() {
        redisService.set("key", "value");
        return "success";
    }

    @GetMapping("/get")
    public String get() {
        Object value = redisService.get("key");
        return "value: " + value.toString();
    }

    @GetMapping("/hSet")
    public String hSet() {
        redisService.hSet("hashKey", "field1", "value1");
        return "success";
    }

    @GetMapping("/hGet")
    public String hGet() {
        Object value = redisService.hGet("hashKey", "field1");
        return "value: " + value.toString();
    }

    @GetMapping("/lPush")
    public String lPush() {
        redisService.lPush("list", "1");
        return "success";
    }

    @GetMapping("/lRange")
    public String lRange() {
        List<Object> list = redisService.lRange("list", 0, -1);
        String result = "";
        for (Object obj : list) {
            result += obj.toString();
        }
        return "list: " + result;
    }

    @GetMapping("/add")
    public String add() {
        redisService.add("set", "value1", "value2", "value3");
        return "success";
    }

    @GetMapping("/members")
    public String members() {
        Set<Object> set = redisService.members("set");
        String result = "";
        for (Object obj : set) {
            result += obj.toString() + ",";
        }
        return "set: " + result;
    }
}

六、总结

本篇文章介绍了Redis的基本概念、作用、优缺点,以及与其他存储系统的对比。在SpringBoot中整合Redis也是相当简单的,只需要引入并配置好Redis相关依赖即可,在操作Redis方面也提供了多种常见的数据结构,使用起来非常方便。如果需要处理多种数据类型、高并发、分布式等需求,Redis是Web应用程序中一个不可或缺的组件。

当然,在实际使用Redis时,需要注意许多细节,如数据的一致性、安全性等,需要开发者认真设计与考虑。同时,Redis在集群配置建设和维护方面相对复杂,对于大规模分布式应用程序,需要更加慎重地使用Redis,细致地做好配置和调优工作。

以上就是本篇Redis详解的全部内容,全为个人理解、希望对大家了解Redis有所帮助。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。