redis实战---基础篇

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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
目录
相关文章
|
1月前
|
NoSQL 安全 测试技术
Redis游戏积分排行榜项目中通义灵码的应用实战
Redis游戏积分排行榜项目中通义灵码的应用实战
52 4
|
2月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
90 5
|
2月前
|
缓存 NoSQL Java
Spring Boot与Redis:整合与实战
【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
130 2
|
6月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
246 0
|
3月前
|
缓存 NoSQL 应用服务中间件
Redis实战篇
Redis实战篇
|
4月前
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
4月前
|
NoSQL 算法 安全
Redis6入门到实战------ 四、Redis配置文件介绍
这篇文章详细介绍了Redis配置文件中的各种设置,包括单位定义、包含配置、网络配置、守护进程设置、日志记录、密码安全、客户端连接限制以及内存使用策略等。
Redis6入门到实战------ 四、Redis配置文件介绍
|
4月前
|
NoSQL Redis 数据安全/隐私保护
Redis6入门到实战------ 二、Redis安装
这篇文章详细介绍了Redis 6的安装过程,包括下载、解压、编译、安装、配置以及启动Redis服务器的步骤。还涵盖了如何设置Redis以在后台运行,如何为Redis设置密码保护,以及如何配置Redis服务以实现开机自启动。
Redis6入门到实战------ 二、Redis安装
|
4月前
|
NoSQL Java Redis
Redis6入门到实战------思维导图+章节目录
这篇文章提供了Redis 6从入门到实战的全面学习资料,包括思维导图和各章节目录,涵盖了NoSQL数据库、Redis安装配置、数据类型、事务、持久化、主从复制、集群等核心知识点。
Redis6入门到实战------思维导图+章节目录
|
4月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)