SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis

作者 : admin 本文共9123个字,预计阅读时间需要23分钟 发布时间: 2024-06-17 共1人阅读

🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(1)

文章目录

        1.0 Redis 概述

        1.1 Redis 下载与安装

        2.0 Redis 数据类型

        3.0 Redis 常见五种类型的命令

        3.1 字符串操作命令

        3.2 哈希操作命令

        3.3 列表操作命令

        3.4 集合操作命令

        3.5 有序集合操作命名

        3.6 通用命令

        4.0 在 Java 中操作 Redis

        4.1 Spring Data Redis 环境搭建

        4.2 操作字符串类型的数据

        4.3 操作哈希类型的数据

        4.4 操作列表类型的数据

        4.5 操作集合类型的数据

        4.6 操作有序集合类型的数据


        1.0 Redis 概述

        Redis 是一个基于内存的 key-value 结构数据库。基于内存存储,读写性能高。适合存储热点数据,以便大量用户访问时可以快速得到响应。

        1.1 Redis 下载与安装

        Redis 官网:Redis – The Real-time Data Platform

        Redis 的 Windows 版属于绿色软件。直接解压即可使用,解压目录结构如下:

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(2)

        1)redis.windows.conf:配置文件,用来配置 Redis 服务器的各种参数和选项。

比如:

        port:指定 Redis 服务器监听的端口号,默认为 6379。

        bind:指定Redis服务器监听的IP地址。

        requirepass:设置访问Redis数据库需要的认证密码。

        maxmemory:设置Redis数据库使用的最大内存限制。

        maxclients:设置Redis允许的最大客户端连接数。

        logfile:指定Redis日志文件的位置。

        dir:指定Redis持久化数据文件的存储目录。

        pidfile:指定Redis服务器进程的PID文件位置。

        2)redis-server.exe:Redis 服务端可执行文件,用来启动 Redis 服务端。

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(3)

        3)redis-cli.exe:Redis 客户端可执行文件,用来启动 Redis 客户端。

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(4)

        2.0 Redis 数据类型

        Redis 存储的是 key-value 结构的数据,其中 key 是字符串类型,value 有5 种常用的数据类型:字符串 string、哈希 hash、列表 list、集合 set、有序集合 sorted set/zset 。

各种数据类型的特点:

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

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

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

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

        5)有序集合 zset:集合中每一个元素关联一个分数 score,根据分数升序排序,没有重复元素。

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(5)

        3.0 Redis 常见五种类型的命令

        字符串操作命令、哈希操作命令、列表操作命令、集合操作命令、有序集合操作命令。

        3.1 字符串操作命令

Redis 字符串类型的常用命令:

        1)SET key value:设置指定 key 的值。

        2)GET key:获取指定 key 的值。

        3)SETEX key seconds value:设置指定 key 的值,并将 key 的过期时间设为 seconds 秒。

        4)SETNX key value:只有在 key 不存在时设置 key 的值。

代码演示:

> set id 1
OK
> get id
1
> setex code 30 123456
OK
> setnx id 2
0

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(6)

        3.2 哈希操作命令

        Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

Redis 哈希类型的常用命令:

        1)HSET key field value:将哈希表 key 中的字段 field 的值设为 value 。

        2)HGET key field:获取存储在哈希表中指定字段的值。

        3)HDEL key field:删除存储在哈希表中的指定字段。

        4)HKEYS key:获取哈希表中所有字段。

        5)HVALS key:获取哈希表中所有值。

代码演示:

        存储一个 student 对象信息。

设置字段值:

> HSET student name 小板
1
> HSET student age 22
1
> hset student gender 男
1

运行结果:

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(7)

获取相应字段的值: 

> hget student name
小板
> hget student age
22
> hget student gender
男

        获取字段相对应的值。

获取 student 所有的 field 与 所有的 value:

> hkeys student
name
age
gender
> hvals student
小板
22
男

删除指定的字段:

> hdel student gender
1

运行结果:

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(8)

        3.3 列表操作命令

        Redis 列表是简单的字符串列表,按照插入顺序排序。

Redis 列表类型的常用命令:

        1)LPUSH key value1 [value2]:将一个或多个值插入到列表头部。

        2)LRANGE key start stop:获取列表指定范围内的元素。

        3)RPOP key:移除并获取列表最后一个元素。

        4)LLEN key:获取列表长度。

代码演示:

在列表中插入多个值:

> lpush mylist a b c d
4

运行结果:

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(9)

        该插入的方式为:头插数据。

获取指定全部数据:

> lrange mylist 0 -1
d
c
b
a

删除最后一个元素:

> rpop mylist
a

获取列表中的个数:

> llen mylist
3

        3.4 集合操作命令

        Redis set 是 string 类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据。

Redis 集合类型的常用命令:

        1)SADD key member1 [member2]:向集合添加一个或多个成员。

        2)SMEMBERS key:返回集合中的所有成员。

        3)SCARD key:获取集合的成员数。

        4)SINTER key1 [key2]:返回给定所有集合的交集。

        5)SUNION key1 [key2]:返回所有给定所有集合的并集。

        6)SREM key member1 [member2]:删除集合中一个或多个成员。

代码演示:

向集合中添加元素:

> sadd set1 a b c d
4
> sadd set2 a b x y
4

        需要注意的是,添加顺序不等于存储之后的顺序。这里就可以体现出了无序性。

获取所有的成员:

> smembers set1
a
d
c
b
> smembers set2
a
x
y
b

获取集合中成员的个数:

> scard set1
4
> scard set2
4

获取两个集合的交集:

> sinter set1 set2
a
b

获取两个集合的并集:

> sunion set1 set2
a
x
y
d
c
b

        3.5 有序集合操作命名

        Redis 有序集合是 string 类型元素的集合,且不允许有重复成员。每一个元素都会关联一个 double 类型的分数。

Redis 有序集合类型的常用命令:

        1)ZADD key score1 member1 [score2 member2]:向有序集合添加一个或多个成员。

        2)ZRANGE key start stop[WITHSCORE]:通过索引区间返回有序集合中指定区间的成员。

        3)ZINCRBY key increment member:有序集合中对指定成员的分数加上增量 increment 。

        4)ZREM key member1 [member2]:移除有序集合中的一个或多个成员。

代码演示:

向有序集合中添加成员:

> zadd zset 10 a 11 b 12 c
3

运行结果:

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(10)

获取全部成员:

> zrange zset 0 -1
a
b
c

也可以带上分数:

> zrange zset 0 -1 WITHSCORES
a
10
b
11
c
12

对 zet 集合中的指定成员的 score 增加:

> zincrby zset 5 a
15

运行结果:

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(11)

移除集合中指定的成员:

> zrem zset c
1

运行结果:

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(12)

        3.6 通用命令

        Redis 的通用命令是不分数据类型的,都可以使用命令。

Redis 通用的常用命令:

        1)KEYS pattern:查找所有符合给定模式(pattern)的 key 。

        2)EXISTS key:检查给定 key 是否存在。

        3)TYPE key:返回 key 所存储的值的类型。

        4)DEL key:该命令用于在 key 存在则删除 key 。

代码演示:

KEYS *,匹配所有的 key:

> keys *
id
STUDENT
set2
zset
set1
student
mylist
list

检查是否存在 set1:

> exists set1
1
> exists set3
0

        存在则返回 1;不存在则返回 0 。

判断类型:

> type set1
set
> type list
list
> type student
hash
> type id
string
> type zset
zset

删除 list:

> del list
1
> keys *
id
STUDENT
set2
zset
set1
student
mylist

        4.0 在 Java 中操作 Redis

        Redis 的 Java 客户端很多,常用的几种:Jedis、Lettuce、Spring Data Redis 。在 Spring Data Redis 是 Spring 的一部分,对 Redis 底层开发进行了高度封装,在 Spring 项目中,可以使用 Spring Data Redis 来简化操作。

        4.1 Spring Data Redis 环境搭建

        1)导入 Spring Data Redis 的 maven 坐标。

        
            org.springframework.boot
            spring-boot-starter-data-redis
        

        2)配置 Redis 数据源。

  redis:
    host: localhost
    port: 6379
    password: 123456
    database: 0

        host:主机号、port:端口号、password:密码、database:数据库。

        这里的数据库指定是 Redis 中的数据库,一共有 16 个数据库,默认会自动选择 0 号的数据库。

        3)编写配置类,创建 RedisTemplate 对象。

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.StringRedisSerializer;

@Configuration
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        //创建 redis 模板对象
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置 redis 的连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置 redis key 的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

        4)通过 RedisTemplate 对象操作 Redis 。

        完成以上的步骤,就可以通过 RedisTemplate 对象来获取五种类型的操作对象了。

代码演示:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;

@SpringBootTest
public class test {

    @Autowired
    RedisTemplate redisTemplate;

    @Test
    public void test(){
        System.out.println(redisTemplate);

        //获取到 string 类型的操作对象
        ValueOperations valueOperations = redisTemplate.opsForValue();

        //获取到 hash 类型的操作对象
        HashOperations hashOperations = redisTemplate.opsForHash();
        
        //获取到 list 类型的操作对象
        ListOperations listOperations = redisTemplate.opsForList();
        
        //获取到 set 类型的操作对象
        SetOperations setOperations = redisTemplate.opsForSet();
        
        //获取到有序集合 zset 类型的操作对象
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

    }
}

        4.2 操作字符串类型的数据

常见的方法:

        1)set(key,value):设置键值对 k v 。

        2)set(key,value,timeout,unit):设置有效时间的键值对。

        3)get(key):根据键来获取值。

        4)setIfAbsent(key,value):设置一个键值对,只有在 key 不存在时设置 key 的值。

代码演示:

    @Test
    public void test1(){
        //先获取到操作字符串类型的对象
        ValueOperations valueOperations = redisTemplate.opsForValue();
        //设置键值对 k v
        valueOperations.set("cls","1");

        //根据键来获取值
        String cls = (String) valueOperations.get("cls");

        //设置有效时间的键值对,设置一个有效时间为 3 分钟的键值对
        valueOperations.set("code","123456",3, TimeUnit.MINUTES);

        //设置一个键值对,只有在 key 不存在时设置 key 的值
        valueOperations.setIfAbsent("bee","2");
        //因为已经存在bee键,所以值依然是3
        valueOperations.setIfAbsent("bee","3");

    }

运行结果:

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(13)

        4.3 操作哈希类型的数据

常见的方法:

        1)put(key,field,value):新增数据。

        2)get(key,field):获取数据。

        3)keys(key):获取 key 中的全部字段。

        4)values(key):获取 key 中的全部值。

        5)delete(key,field):删除 key 中 field 的字段。

代码演示:

    @Test
    public void test2(){

        //先获取到操作哈希的对象
        HashOperations hashOperations = redisTemplate.opsForHash();
        //新增数据
        hashOperations.put("student","id","1");
        hashOperations.put("student","name","小扳手");
        hashOperations.put("student","age","22");

        //根据字段来获取值
        String id = (String) hashOperations.get("student", "id");
        String name = (String) hashOperations.get("student", "name");
        System.out.println(id + " " + name);

        //获取student中的全部键
        Set student = hashOperations.keys("student");
        System.out.println(student);

        //获取student中的全部值
        List student1 = hashOperations.values("student");
        System.out.println(student1);

        //删除指定的字段
        hashOperations.delete("student","age");
    }

运行结果:

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(14)

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(15)

        4.4 操作列表类型的数据

常见的方法:

        1)leftPushAll(key,values):批量增加数据。

        2)leftPush(key,value):新增数据。

        3)range(key,start,end):获取指定范围的数据。

        4)rightPop(key):删除最后一个数据。

        5)size(key):获取列表中的数据个数。

代码演示:

    @Test
    public void test3(){
        ListOperations listOperations = redisTemplate.opsForList();

        //批量增加数据
        listOperations.leftPushAll("mylist","1","2","3");
        //新增单个数据
        listOperations.leftPush("mylist","4");

        //获取范围内的数据
        List mylist = listOperations.range("mylist", 0, -1);
        System.out.println(mylist);

        //删除最后一个数据
        String date = (String) listOperations.rightPop("mylist");
        System.out.println(date);

        //获取列表中的数据个数
        Long len = listOperations.size("mylist");
        System.out.println(len);
    }

运行结果:

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(16)

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(17)

        4.5 操作集合类型的数据

常见的方法:

        1)add(key,values):新增单个数据或者批量新增数据。

        2)members(key):获取 Key 中的全部成员。

        3)size(key):获取 key 中的成员个数。

        4)intersect(key1,key2):获取两个集合中的交集。

        5)union(key1,key2):获取两个集合中的并集。

        6)remove(key,values):删除 key 中指定的 value ,可以是一个 value 也可以是多个 value 。

代码如下:

    @Test
    public void test4(){
        SetOperations setOperations = redisTemplate.opsForSet();
        
        //批量新增数据
        setOperations.add("set1","a","b","c");
        setOperations.add("set2","a","x","y");
        
        //获取key中的成员
        Set member = setOperations.members("set1");
        System.out.println(member);
        
        //获取key中的成员个数
        Long len = setOperations.size("set2");
        System.out.println(len);
        
        //两个集合的交集
        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);
        
        //获取两个集合的并集
        Set union = setOperations.union("set1", "set2");
        System.out.println(union);
        
        //删除成员
        setOperations.remove("set1","c");

    }

运行结果:

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(18)

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(19)

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(20)

        4.6 操作有序集合类型的数据

常见的方法:

        1)add(key,value,score):新增数据。

        2)range(key,start,end):获取指定范围的数据。

        3)incrementScore(key,value,delta):给指定的数据的分数增加 dalta 。

        4)remove(key,values):删除数据。可以删除单个数据,也可以批量删除数据。

代码演示:

    @Test
    public void test5(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //新增数据
        zSetOperations.add("z","a",10);
        zSetOperations.add("z","b",15);
        zSetOperations.add("z","c",20);
        
        //获取指定范围的数据
        Set z = zSetOperations.range("z", 0, -1);
        System.out.println(z);
        
        //给指定的数据增加分数
        zSetOperations.incrementScore("z","a",10);

        //删除数据
        zSetOperations.remove("z","c");
    }

运行结果:

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(21)

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(22)

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis插图(23)

本站无任何商业行为
个人在线分享 » SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis
E-->