Redis使用

1.定义

Redis是一个基于内存 的键值对存储系统,常用作缓存服务

Redis断电关机后会清空内存里的数据

Redis储存在内存中,为保证数据的可靠性,Redis会将数据备份到硬盘上,用于故障发生时的数据恢复(如断电关机等)。

2.特点

  1. 高性能:Redis主要将数据存储在内存中,因此读写速度非常快,适合对速度有较高要求的场景。
  2. 支持多种数据结构:Redis中键值对的值(Value)支持多种数据结构,如字符串、哈希表、列表、集合等。
  3. 持久化 :Redis可以通过定期快照 或者实时记录写操作日志的方式将内存中的数据持久化到硬盘,确保数据在重启后不会丢失。
  4. 灵活的数据过期策略:可以为每个键设置过期时间,一旦过期,Redis会自动删除

3.使用场景

Redis最为常见的一个应用场景就是用作缓存 ,缓存可以显著提升访问速度,降低数据库压力。

4.使用方法

1.通过命令行使用Redis

  1. 在虚拟机启动客户端

    redis-cli -h 127.0.0.1 -p 6379 # 安装redis没有指定IP地址和端口号可以省略不写

-h <hostname>选项用于声明Redis服务器的主机名或IP地址,默认值为127.0.0.1
-p <port>选项用于声明Redis服务器监听的端口号,默认值为6379

  1. 测试链接状态

    ping # 返回PONG连接正常
    quit # 断开客户端与服务端的连接,并退出客户端

2.通过图形化工具使用Redis

  1. 下载并安装图形化工具RedisInsight 官网地址
    RedisInsight 是Redis官方推荐的图形化工具,开源免费,且功能强大
    • 根据步骤进行下载,下载后直接进行下一步安装

  2. 使用图形化工具
    新版本与老版本界面有所不同
    • 打开图形化工具,点击添加数据库

    • 设置添加数据库配置

    • 创建后会有对应的数据库

    • 点击对应的数据库进入数据主页

5.Redis常用数据类型及命令

[ ]包着的属性时可选的,可以不传

命令可以在虚拟机或图形化工具里使用

1.通用命令

概述: 所有数据类型都可用

  1. keys查看所有键

    keys pattern

pattern用于匹配key,其中*表示任意个任意字符,?表示一个任意字符
注意:该命令会遍历Redis服务器中保存的所有键,因此当键很多时会影响整个Redis服务的性能,线上环境需要谨慎使用。

  1. dbsize查看键的总数
    返回总键数

    dbsize

  2. del删除指定键
    返回值为成功删除键的个数,若删除一个不存在的键,则返回0。

    del key1 key2...

  3. exists判断一个键是否存在
    若键存在则返回1,不存在则返回0。

    exists key

  4. ttl查询键的剩余过期时间

  • 查询一个定时键的剩余存活时间,返回值以秒为单位。

  • 若查询的键的未设置过期时间,则返回-1

  • 若查询的键不存在,则返回-2

    ttl key

  1. select切换数据库
    Redis默认有编号为0~15的16个逻辑数据库,每个数据库之间的数据是相互独立的,所有连接默认使用的都是0号数据库。
    index超出范围,会报错

    select index

  2. flushdb清空当前所选用的数据库

    flushdb

  3. flushall清空0~15号所有的数据库

    flushall

2.String类型数据

应用场景: 常用于缓存、计数器等场景
概述: string类型保存的是字节序列,因此任意类型的数据,只要经过序列化之后都可以保存到Redis的string类型中,包括文本、数字甚至是一个对象。

  1. set添加string类型的键值对

    SET key value [NX|XX] [EX seconds|PX milliseconds]

各选项含义如下

  • NX:仅在key不存在时set
  • XX:仅在key存在时set
  • EX:设置过期时间,单位为秒
  • PX:设置过期时间,单位为毫秒
  1. get获取某个string类型的键对应的值

    GET key

  2. incr对数值做自增操作
    若key对应的value是整数,则返回自增后的结果,若不是整数则报错,若key不存在则创建并返回1。

    INCR key

  3. decr对数值做自减操作
    若key对应的value是整数,则返回自减后的结果,若不是整数则报错,若key不存在则创建并返回-1。

    DECR key

3.List类型数据

应用场景:

  • 社交应用中,可使用list缓存每个用户发布的最新的N条记录。
  • list可用作异步消息队列

概述: list类型可用于存储多个string类型的元素,并且所有元素按照被添加的顺序存储

  1. lpush向list左侧添加元素

    lpush key element1 element2 ...

  2. rpush向list右侧添加元素

    复制代码
    rpush key element1 element2 ...
  3. linsert向list指定位置添加元素

    复制代码
    linsert key before|after pivot element
  4. lindex获取指定索引位置的元素
    index从左到右依次是0,1,2...,从右到左依次是-1,-2,-3...

    lindex key index

  5. lrange获取指定范围内的元素列表

    lrange key start stop

  6. lpop移除并返回list左侧元素
    count参数表示移除元素的个数

    lpop key [count]

  7. rpop移除并返回list右侧的元素

    rpop key [count]

  8. lrem移除list中的指定元素
    count参数表示要移除element元素的个数(list中可以存在多个相同的元素),count的用法如下

    • 若count>0,则从左到右删除最多count个element元素

    • 若count<0,则从右到左删除最多count(的绝对值)个element元素

    • 若count=0,则删除所有的element元素

      lrem key count element

  9. lset修改指定索引位置的元素

    lset key index element

  10. llen查看list长度

    llen key

4.Set类型数据

应用场景: 用于计算共同关注好友,随机抽奖系统等等
概述: 和list类型相似,set类型也可用来存储多个string类型的元素,但与list类型不同,set中的元素是无序的,且set中不会包含相同元素。

  1. sadd向set中添加元素

    sadd key element1 element2 ...

  2. smembers查询set中的全部元素

    smembers key

  3. srem移除set中的指定元素

    srem key element1 element2 ...

  4. spop随机移除并返回set中的n个元素

    spop key [count]

  5. srandmember随机返回set中的n个元素(不删除)

    srandmember key [count]

  6. scard查询set中的元素个数

    scard key

  7. sismember元素是否在set中

    sismember key element

  8. sinter计算多个集合的交集

    sinter key1 key2...

  9. sunion计算多个集合的并集

    sunion key1 key2...

  10. sdiff计算多个集合的差集

    sdiff key1 key2...

5.Hash类型数据

应用场景: 可用于缓存对象
概述: hash类型类似于Java语言中的HashMap,可用于存储键值对。

  1. hset向hash中增加键值对
    key:键
    field:value值里保存的键
    value:value值里保存的值

    hset key field1 value1 field2 value2...

  2. hget获取hash中某个键对应的值

    hget key field

  3. hdel删除hash中的指定的键值对

    hdel key field1 field2...

  4. hlen查询hash中的键值对个数

    hlen key

  5. hexists判断hash中的某个键是否存在

    hexists key field

  6. hkeys返回hash中所有的键

    hkeys key

  7. hvals返回hash中所有的值

    hvals key

  8. hgetall返回hash中所有的键与值

    hgetall key

6.Zset类型数据

应用场景: 主要用于各种排行榜
概述: zset被称为有序集合,同set相似,zset中也不会包含相同元素,但不同的是,zset中的元素是有序的。并且zset中的元素并非像list一样按照元素的插入顺序排序,而是按照每个元素的分数(score)排序。

  1. zadd向zset中添加元素
  • NX:仅当member不存在时才add

  • XX:仅当member存在时才add

    ZADD key [NX|XX] score member

  1. zcard计算zset中的元素个数

    zcard key

  2. zscore查看某个元素的分数

    zscore key member

  3. zrank按照score的升序排序,名次从0开始。

    zrank key member

  4. zrevrank按照score的降序排序,名次从0开始。

    zrevrank key member

  5. zrem删除元素

    zrem key member1 member2...

  6. zincrby增加元素的分数

    zincrby key increment member

  7. zrange查询指定区间范围的元素

  • start/stop:用于指定查询区间,但是在不同模式下,其代表的含义也不相同

    • 默认模式下,start~stop表示的是名次区间,且该区间为闭区间。名次从0开始,且可为负数,-1表示倒数第一,-2表示倒数第二,以此类推。
    • byscore模式下(声明了byscore参数),则start~stop表示的就是分数区间,该区间默认仍为闭区间。在该模式下,可以在startstop前增加(来表示开区间,例如(1 (5,表示的就是(1,5)这个开区间。除此之外,还可以使用-inf+inf表示负无穷和正无穷。
  • byscore:用于切换到分数模式

  • rev:表示降序排序。在byscore模式下使用rev参数需要注意查询区间,start应大于stop。

  • limit:该选项只用于byscore模式,作用和sql语句中的limit一致

  • withscores:用于打印分数

    zrange key start stop [byscore] [rev] [limit offset count] [withscores]

6.Spring Boot连接Redis使用

1.Spring Data Redis介绍

Spring Data Redis 是Spring大家族中的一个子项目,主要用于Spring程序和Redis的交互。它基于的Redis Java客户端(JedisLettuce)做了抽象,提供了一个统一的编程模型,使得Spring程序与Redis的交互变得十分简单。
Spring Data Redis 中有一个十分重要的类------RedisTemplate,它封装了与Redis进行的交互的各种方法,我们主要用使用它与Redis进行交互。

2.使用方法

1.创建SpringBoot项目

2.选择安装Spring Data Redis依赖

要是创建项目没有安装,需要在pom.xml文件里添加依赖配置,然后使用Maven下载依赖

复制代码
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

3.修改application.properties文件后缀为application.yml

4.在application.yml文件里添加Redis配置
注意修改host为虚拟机的IP地址

5.在项目里简单的使用

创建一个测试类,在内部调用方法

复制代码
package com.redis.java_06_redis.redisTest;

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.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;

@SpringBootTest
public class TestRedisTemplate {
    @Autowired
    private StringRedisTemplate redisTemplate;
    
    @Test
    public void testSet(){
        redisTemplate.opsForValue().set("key1", "value1");
    }

    @Test
    public void testGet(){
        String result = redisTemplate.opsForValue().get("key1");
        System.out.println(result);
    }

    @Test
    public void testDel(){
        redisTemplate.delete("key1");
    }
}

6.根据Redis的数据类型,RedisTemplate对各种交互方法做了分组,以下是常用的几个分组

分组 说明
redisTemplate.opsForValue() 操作string类型的方法
redisTemplate.opsForList() 操作list类型的方法
redisTemplate.opsForSet() 操作set类型的方法
redisTemplate.opsForHash() 操作hash类型的方法
redisTemplate.opsForZSet() 操作zset类型的方法
redisTemplate 通用方法
相关推荐
betazhou2 小时前
记一次Oracle REDO在线日志损坏故障修复
数据库·oracle·redo·ora-00600
一只小bit2 小时前
Redis 初步入门教程:简单介绍和安装配置
数据库·redis·缓存
ChatInfo2 小时前
Etsy 把 1000 个 MySQL 分片迁进 Vitess:425TB 数据背后的真正问题不是性能,而是运维规模
数据库·人工智能·mysql
SPC的存折2 小时前
6、MySQL设置TLS加密访问
linux·运维·服务器·数据库·mysql
老苏畅谈运维2 小时前
DBA分析 ORA 报错的利器,errorstack让 Oracle 错误现原形
数据库·oracle·dba
紫青宝剑3 小时前
向量数据库 Milvus
数据库·milvus
雪碧聊技术3 小时前
数据库系统基础知识
数据库
Elastic 中国社区官方博客3 小时前
如何使用 LogsDB 降低 Elasticsearch 日志存储成本
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索·可用性测试
Dreamboat-L3 小时前
HBase远程访问配置(详细教程)
大数据·数据库·hbase