Redis基础

目录

一,基础篇

1.介绍

2.安装与下载

3.客户端的使用

4.补充重点

二,命令篇

2.1String 字符串

操作演示:

2.2.Hash哈希

操作演示:

2.3.List列表

操作演示:

2.4.Set集合

操作演示:

2.5.ZSet集合

操作演示:

2.6通用命令

操作演示:

三,Java操作篇

定义:

环境配置:

实现示例:

1. 字符串 (String)

2. 哈希 (Hash)

3. 列表 (List)

4. 集合 (Set)

5. 有序集合 (Sorted Set)


一,基础篇

1.介绍

Redis 是一个非常流行的开源键值(Key-Value)存储系统Redis,是用C语言开发的一个基于内存的键值对数据库 ,它具有以下特点:
①.高性能:

Redis 提供了非常高的读写速度,每秒可以处理数万次的读写操作。
由于其主要数据结构都存放在内存中,所以访问速度极快。

②.数据结构丰富:

支持多种数据类型如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等。
这些数据结构非常适合用于实现缓存、消息队列、排行榜等多种应用场景。

③.持久化支持:

Redis 支持两种持久化机制:RDB(Redis Database Backup)和 AOF(Append Only File)。
RDB 会在指定的时间间隔内生成数据集的时间点快照。
AOF 会记录每次写入操作,当 Redis 重启时可以通过重放这些写入操作来恢复数据。

④.主从复制:

Redis 支持主从复制,可以轻松搭建高可用架构。
主服务器可以同步数据到一个或多个从服务器,从服务器可以作为备份或者用来分担读取负载。

⑤.事务支持:

Redis 支持事务,可以将多个命令打包成一个单独的序列化操作执行。
事务中的命令会按顺序执行,但不保证原子性。

⑥.Lua 脚本支持:

Redis 内置了对 Lua 脚本的支持,可以在单个请求中执行复杂的操作,提高性能并减少网络往返次数。

⑦.发布/订阅模式:

Redis 支持发布/订阅模式,客户端可以订阅频道接收消息,也可以向频道发布消息。

⑧.跨平台:

Redis 使用 ANSI C 编写,可以在多个操作系统上运行,包括 Linux 和 macOS。

⑨.多语言客户端:

Redis 提供了多种语言的客户端库,方便不同编程语言的应用程序进行集成。

使用场景:

  • 缓存:作为数据库查询结果的缓存层。
  • 会话存储:存储用户的会话数据。
  • 消息队列:利用列表结构实现消息队列。
  • 实时分析:例如统计在线用户数量。
  • 分布式锁:通过设置过期时间的键来实现简单的分布式锁机制。

2.安装与下载

第一步:下载Redis中文网icon-default.png?t=N7T8https://www.redis.net.cn/ 第二步:安装

目录或文件作用
redis-benchmark性能测试工具
redis-check-aofAOF文件修复工具
redis-check-dumpRDB文件检查工具(快照持久化文件)
redis-cli命令行客户端
redis-server启动redis服务器
redis.windows.confredis核心配置文件 (可以通过修改 requirepass 后的默认值修改密码)

第三步:启动服务

出现该标识证明服务启动成功

3.客户端的使用

通过简单的配置可以通过客户端操作Redis

4.补充重点

键值 <String,5种数据类型>

Redis采用的是键值对存储,键的类型只能为字符串,值支持五种数据类型

  • 字符串(string):普通字符串,Redis中最简单的数据类型

  • 哈希(hash):也叫散列,类似于Java中的HashMap结构

  • 列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList

  • 集合(set):无序集合,没有重复元素,类似于Java中的HashSet

  • 有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素


二,命令篇

2.1String 字符串

字符串类型是Redis中最为基础的数据存储类型。

 * 增加数据:set key value
 * 获取数据:get key
 * 删除数据:del key
 ​
 ​
 * 增加数据的时候设置过期时间:setex key 存活时间(单位是s) value
 * 增加的时候判断可以是否存在:setnx key value
 ​
 * 自增(减)操作:incr/decr key      incrby/decrby  key  step

操作演示:

1.增加数据:set key value

2.获取数据与删除数据

获取数据:get key
删除数据:del key

通过再次查询发现数据成功被删除

3.设置过期时间

setex key 存活时间(单位是s) value

4.增加时判断是否存在

setnx key value

5.自增与自减

 自增(减)操作:incr/decr key      incrby/decrby  key  step

2.2.Hash哈希

Hash类型极其类似于java中的Map,值里面可以存放一组组的键值对,该类型非常适合于存储对象类型的信息。

 * 增加数据:hset key hkey hvalue
 ​
 * 获取数据(单个):hget key hkey
 * 获取数据(所有):hgetall key
 * 获取所有hkey:   hkeys key 
 * 获取所有hvalue: hvals key 
 ​
 * 删除数据(单个): hdel key hkey
 * 删除数据(所有): del key

操作演示:

1.增加数据

增加数据:hset key hkey hvalue

2.获取:数据,hkeys,hvals 

获取数据(单个):hget key hkey        获取数据(所有):hgetall key
获取所有hkey:   hkeys key                 获取所有hvalue: hvals key

3.删除数据

删除数据(单个): hdel key hkey
从列表中可以看出:name,age,sex 变为只有 age,sex

删除数据(所有): del key

从列表中可以看出已经没有a的数据

2.3.List列表

List类型底层是一个双向字符串链表,里面的元素是有序的,可重复的,我们可以从链表的任何一端进行元素的增删。

 * 添加数据:lpush(rpush)  key  value
 * 查询数据:lrange key  [开始索引  结束索引]
 * 列表长度:llen key
 * 删除数据:lpop(rpop)  key
 ​
 * 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止:BRPOP key timeout 

操作演示:

1.数据的添加与查询

  • 添加数据:lpush(rpush)  key  value
  • 查询数据:lrange key  [开始索引  结束索引]

列表长度:llen key

2.删除数据

  • 删除数据:lpop(rpop)  key
  • 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止:BRPOP key timeout   

初始list                        删除后                                                                        

                

2.4.Set集合

Set类型底层是一张hash表,里面的元素是无序的,不可重复的。

 * 添加数据:sadd key value
 * 查看数据:smembers key
 * 获取元素数量:scard key
 * 移除集合元素:srem  key value 

操作演示:

1.数据的添加与查询

  •  添加数据:sadd key value
  •  查看数据:smembers key
  •  获取元素数量:scard key

2.数据的移除

移除集合元素:srem  key value 

2.5.ZSet集合

ZSet,也称sortedSet,在Set的基础上,加入了有序功能,在添加元素的时候,允许指定一个分数,它会按照这个分数排序。

 * 添加数据:zadd key score value
 * 查询数据:zrange key [开始索引  结束索引]
 * 删除数据:zrem key value

操作演示:

1.数据的添加与查询

  • 添加数据:zadd key score value
  • 查询数据:zrange key [开始索引  结束索引]  以0为初始节点

2.数据的删除

删除数据:zrem key value

首先用大于集合长度的范围查询集合中元素 可以看出集合中只有 a,b,c

2.6通用命令

通用命令指的是不受数据类型限制的一批命令

 1. 模糊查询键:keys 模糊匹配规则      
 2. 根据键判断记录是否存在:exists key  
 3. 根据键判断值类型:type key     
 4. 返回key的剩余生存时间:TTL key
 5. 选择数据库: select 库索引[从0开始]      
 6. 清空当前数据库: flushdb      
 7. 清空所有数据库: flushall

操作演示:

三,Java操作篇

定义:

        Redis 提供了多种数据结构,每种数据结构都有其特定的使用场景。在 Java 中,通常使用 Redis 客户端库来与 Redis 交互。常见的 Redis 客户端有 Jedis 和 Lettuce,还有 Spring Data Redis 等高级封装。

环境配置:

1.添加依赖

在 pom.xml 文件中添加 Spring Boot 的 Redis Starter 依赖:

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

 2.添加配置项

在 application.properties 或 application.yml 文件中配置 Redis 的基本信息:

spring:
  redis:
    host: localhost
    port: 6379
    password: 1234
    database: 0 # 操作的是0号数据库

3.提供配置类

创建一个配置类来配置 RedisTemplate 和 StringRedisTemplate:

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

@Configuration
public class RedisConfig {

    private final RedisConnectionFactory factory;

    public RedisConfig(RedisConnectionFactory factory) {
        this.factory = factory;
    }

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

        // 设置 key 和 value 的序列化方式
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
        template.afterPropertiesSet();

        return template;
    }

    @Bean
    public RedisTemplate<String, String> stringRedisTemplate() {
        RedisTemplate<String, String> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);

        // 设置 key 和 value 的序列化方式
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());
        template.afterPropertiesSet();

        return template;
    }
}

实现示例:

1. 字符串 (String)

字符串是最简单的数据类型,可以用来存储简单的键值对。
实现示例:

import redis.clients.jedis.Jedis;

public class StringExample {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        
        // 设置 key-value
        jedis.set("key", "value");
        
        // 获取 value
        String value = jedis.get("key");
        System.out.println("Value: " + value);
        
        // 关闭连接
        jedis.close();
    }
}

2. 哈希 (Hash)

哈希允许将多个字段值映射存储在一个键下。

实现示例:

import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.Map;

public class HashExample {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        
        // 设置 hash
        Map<String, String> fields = new HashMap<>();
        fields.put("field1", "value1");
        fields.put("field2", "value2");
        jedis.hset("hashKey", fields);
        
        // 获取所有字段
        Map<String, String> allFields = jedis.hgetAll("hashKey");
        System.out.println("All Fields: " + allFields);
        
        // 关闭连接
        jedis.close();
    }
}

3. 列表 (List)

列表是按照插入顺序排列的字符串集合。
实现示例:

import redis.clients.jedis.Jedis;

public class ListExample {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        
        // 向列表添加元素
        jedis.lpush("listKey", "element1", "element2");
        
        // 获取列表中的所有元素
        List<String> elements = jedis.lrange("listKey", 0, -1);
        System.out.println("Elements: " + elements);
        
        // 关闭连接
        jedis.close();
    }
}

4. 集合 (Set)

集合是无序且不重复的字符串集合。
实现示例:

import redis.clients.jedis.Jedis;

public class SetExample {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        
        // 添加元素到集合
        jedis.sadd("setKey", "element1", "element2", "element1");
        // "element1" 重复,只存储一次
        
        // 获取集合中的所有元素
        Set<String> members = jedis.smembers("setKey");
        System.out.println("Members: " + members);
        
        // 关闭连接
        jedis.close();
    }
}

5. 有序集合 (Sorted Set)

有序集合类似于集合,但是每个成员都关联了一个分数,用于排序。
实现示例:

import redis.clients.jedis.Jedis;

public class SortedSetExample {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        
        // 添加元素到有序集合
        jedis.zadd("sortedSetKey", 1.0, "element1");
        jedis.zadd("sortedSetKey", 2.0, "element2");
        
        // 获取有序集合中的所有元素
        Set<String> sortedMembers = jedis.zrange("sortedSetKey", 0, -1);
        System.out.println("Sorted Members: " + sortedMembers);
        
        // 关闭连接
        jedis.close();
    }
}

  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于学习Redis基础知识,可以按照以下思路进行学习: 1. 了解Redis的概念和特点:首先需要了解Redis是什么,它的主要特点是什么,它为什么被广泛应用于缓存、消息队列、会话管理等场景。 2. 安装和配置Redis:根据你的操作系统,安装Redis并进行相关配置。可以参考Redis官方文档或其他教程来完成这一步。 3. 学习Redis的数据结构:Redis支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。了解每种数据结构的特点、用途和操作命令,并通过实际操作来加深理解。 4. 掌握Redis的常用命令:学习Redis的常用命令,如get、set、hget、hset、lpush、lrange、sadd、smembers等,了解每个命令的具体用法和参数含义。 5. 理解Redis的持久化机制:了解Redis的RDB和AOF两种持久化方式,以及它们的优缺点。学习如何进行备份和恢复数据。 6. 学习Redis的事务和Lua脚本:了解Redis事务的基本概念和使用方法,以及如何使用Lua脚本来进行复杂的操作。 7. 深入了解Redis的性能优化和高可用方案:学习如何优化Redis的性能,包括配置调优、使用合适的数据结构、合理地使用缓存等。同时了解Redis的高可用方案,如主从复制、哨兵模式和集群模式。 8. 学习Redis与其他技术的结合:了解Redis如何与其他技术进行结合,如与Python、Java等编程语言的配合使用,以及与Spring、Django等框架的整合。 以上是学习Redis基础知识的一个思路,你可以根据自己的实际情况和需求进行学习和拓展。推荐参考一些经典的Redis教程和实战案例,通过实际操作和项目实践来提升自己的技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啵啵薯条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值