redis实战---基础篇

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: redis实战---基础篇

redis基础

四:总结

一:背景

最近在进行redis的学习,打算出一个实战系列文章,本篇文章,作为开篇,是一篇基础性文章。主要内容会介绍一下redis的数据结构,以及这些数据结构的使用方法。后续的文章将会结合具体业务进行更新。


二: Redis是什么?

Redis是一种高性能的NoSQL数据库,支持多种基本数据类型,包括字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(sorted set)等等。下面我会简要介绍每种数据类型以及在Java中如何使用它们。


三: 各个数据类型

3.1.字符串(string)

3.1.1 概念

字符串是Redis最基本的数据类型,也是最常用的一种数据类型。字符串类型的值可以是任何二进制数据,例如图片、序列化对象等。在Redis中,字符串类型的值最大可以存储512MB的数据。


3.1.2 实例

下面是SpringBoot中如何使用Redis字符串实例代码

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@Component
public class RedisStringExample {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    public void setValue() {
        stringRedisTemplate.opsForValue().set("name", "Tom");
    }
    public String getValue() {
        return stringRedisTemplate.opsForValue().get("name");
    }
}

上面的代码中,我们使用了SpringBoot提供的StringRedisTemplate来操作Redis数据库。通过opsForValue()方法可以获取到操作字符串类型数据的对象。我们使用set方法设置了一个键为name,值为Tom的字符串类型的数据。然后,我们使用get方法获取了键为name的字符串类型的值,并返回它。


3.1.3 应用场景

适用于缓存一些简单的字符串类型的数据,比如存储一个键值对,其中键是一个字符串,值也是一个字符串。


3.2.哈希(hash)

3.2.1 概念

哈希类型是Redis中的一种键值对数据类型,它可以存储多个键值对。在Redis中,每个哈希类型的值最多可以包含2^32-1个键值对。


3.2.2 实例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class RedisHashExample {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    public void setValue() {
        HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
        Map<String, String> map = new HashMap<>();
        map.put("name", "Tom");
        map.put("age", "20");
        hashOperations.putAll("user", map);
    }
    public String getValue() {
        HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
        String name = hashOperations.get("user", "name");
        String age = hashOperations.get("user", "age");
        return name + ", " + age;
    }
}

上面的代码中,我们通过opsForHash()方法可以获取到操作哈希类型数据的对象。我们使用putAll方法设置了一个键为user的哈希类型的数据,其中包含了name和age两个键值对。然后,我们使用get方法分别获取了name和age的值,并返回它们的拼接。需要注意的是,在Redis中,哈希类型的键名和键值都是字符串类型的。


3.2.3 应用场景

适用于存储一些复杂的数据结构,比如存储一个用户对象,其中包含了多个字段,每个字段又包含了多个属性。


3.3 列表(list)

3.3.1 概念

列表类型是Redis中的一种基本数据类型,它可以存储多个有序的字符串类型的值。在Redis中,列表类型的值最多可以包含2^32-1个元素。


3.3.2 实例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class RedisListExample {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    public void setValue() {
        ListOperations<String, String> listOperations = redisTemplate.opsForList();
        listOperations.rightPush("queue", "a");
        listOperations.rightPush("queue", "b");
        listOperations.rightPush("queue", "c");
    }
    public List<String> getValue() {
        ListOperations<String, String> listOperations = redisTemplate.opsForList();
        return listOperations.range("queue", 0, -1);
    }
}

3.3.3 应用场景

适用于实现队列和栈等数据结构,比如存储一个任务队列,每个任务可以是一个字符串类型的数据。


3.4 集合(set)

3.4.1 概念

集合类型是Redis中的一种基本数据类型,它可以存储多个无序的字符串类型的值,每个值都是唯一的。在Redis中,集合类型的值最多可以包含2^32-1个元素。


3.4.2 实例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.stereotype.Component;
import java.util.Set;
@Component
public class RedisSetExample {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    public void setValue() {
        SetOperations<String, String> setOperations = redisTemplate.opsForSet();
        setOperations.add("set", "a", "b", "c");
    }
    public Set<String> getValue() {
        SetOperations<String, String> setOperations = redisTemplate.opsForSet();
        return setOperations.members("set");
    }
}

上面的代码中,我们通过opsForSet()方法可以获取到操作集合类型数据的对象。我们使用add方法向一个键为set的集合类型的数据中,插入了三个元素,分别为a、b、c。然后,我们使用members方法获取了键为set的集合类型数据中的所有元素,并返回它们。


3.4.3 应用场景

适用于实现队列和栈等数据结构,比如存储一个任务队列,每个任务可以是一个字符串类型的数据。


3.5 有序集合(sorted set)

3.5.1 概念

有序集合类型是Redis中的一种基本数据类型,

它可以存储多个有序的字符串类型的值,每个值都可以有一个分数(score),根据分数的大小,可以对值进行排序。在Redis中,有序集合类型的值最多可以包含2^32-1个元素。


3.5.2 实例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Component;
import java.util.Set;
@Component
public class RedisZSetExample {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    public void setValue() {
        ZSetOperations<String, String> zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("zset", "a", 1);
        zSetOperations.add("zset", "b", 2);
        zSetOperations.add("zset", "c", 3);
    }
    public Set<String> getValue() {
        ZSetOperations<String, String> zSetOperations = redisTemplate.opsForZSet();
        return zSetOperations.range("zset", 0, -1);
    }
}

上面的代码中,我们通过opsForZSet()方法可以获取到操作有序集合类型数据的对象。我们使用add方法向一个键为zset的有序集合类型的数据中,插入了三个元素,分别为a、b、c,并为每个元素指定了一个分数,分别为1、2、3。然后,我们使用range方法获取了键为zset的有序集合类型数据中的所有元素,并返回它们。


3.5.3 应用场景

适用于需要按照一定顺序排序的场景,比如存储一个热搜榜单,每个热搜词可以是一个字符串类型的数据,并为其指定一个分数,分数越高则热度越高,可以使用有序集合类型来实现排序和排行榜功能。


四:总结

总之,Redis提供了多种基本数据类型,包括字符串、哈希、列表、集合和有序集合。这些数据类型具有不同的特点和使用场景,我们可以根据具体的业务需求来选择合适的数据类型。同时,SpringBoot提供了RedisTemplate和相应的操作接口,方便开发者使用这些数据类型来操作Redis数据库。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
缓存 监控 NoSQL
Redis - 在电商购物车场景下的实战分析
Redis - 在电商购物车场景下的实战分析
181 0
|
3月前
|
消息中间件 NoSQL Java
Redis List:打造高效消息队列的秘密武器【redis实战 一】
Redis List:打造高效消息队列的秘密武器【redis实战 一】
114 0
|
3月前
|
消息中间件 NoSQL Java
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
278 1
|
8天前
|
监控 NoSQL 算法
探秘Redis分布式锁:实战与注意事项
本文介绍了Redis分区容错中的分布式锁概念,包括利用Watch实现乐观锁和使用setnx防止库存超卖。乐观锁通过Watch命令监控键值变化,在事务中执行修改,若键值被改变则事务失败。Java代码示例展示了具体实现。setnx命令用于库存操作,确保无超卖,通过设置锁并检查库存来更新。文章还讨论了分布式锁存在的问题,如客户端阻塞、时钟漂移和单点故障,并提出了RedLock算法来提高可靠性。Redisson作为生产环境的分布式锁实现,提供了可重入锁、读写锁等高级功能。最后,文章对比了Redis、Zookeeper和etcd的分布式锁特性。
108 16
探秘Redis分布式锁:实战与注意事项
|
11天前
|
存储 NoSQL Java
Spring Boot与Redis:整合与实战
【4月更文挑战第29天】Redis,作为一个高性能的键值存储数据库,广泛应用于缓存、消息队列、会话存储等多种场景中。在Spring Boot应用中整合Redis可以显著提高数据处理的效率和应用的响应速度。
26 0
|
14天前
|
存储 缓存 NoSQL
node实战——koa给邮件发送验证码并缓存到redis服务(node后端储备知识)
node实战——koa给邮件发送验证码并缓存到redis服务(node后端储备知识)
19 0
|
15天前
|
存储 缓存 NoSQL
Redis入门到通关之Redis缓存数据实战
Redis入门到通关之Redis缓存数据实战
21 0
|
2月前
|
存储 NoSQL 前端开发
【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群指令分析—实战篇)
【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群指令分析—实战篇)
12 0
|
2月前
|
缓存 NoSQL 前端开发
【Redis技术专区】「实战案例」谈谈使用Redis缓存时高效的批量删除的几种方案
【Redis技术专区】「实战案例」谈谈使用Redis缓存时高效的批量删除的几种方案
47 0
|
2月前
|
NoSQL Redis
Netty实战:模拟Redis的客户端
Netty实战:模拟Redis的客户端
15 0