Redis使用

1.定义

Redis是一个基于内存的键值对存储系统,常用作缓存服务
Redis断电关机后会清空内存里的数据
Redis储存在内存中,为保证数据的可靠性,Redis会将数据备份到硬盘上,用于故障发生时的数据恢复(如断电关机等)。

2.特点

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

3.使用场景

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

4.使用方法

1.通过命令行使用Redis

  1. 在虚拟机启动客户端
redis-cli -99999 -h 127.0.0.1 -p 6379 # 安装redis没有指定IP地址和端口号可以省略不写

-a <password> 设置的密码,要是没修改requirepass可以忽略
-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
  1. del删除指定键
    返回值为成功删除键的个数,若删除一个不存在的键,则返回0。
del key1 key2...
  1. exists判断一个键是否存在
    若键存在则返回1,不存在则返回0。
exists key
  1. ttl查询键的剩余过期时间
  • 查询一个定时键的剩余存活时间,返回值以秒为单位。
  • 若查询的键的未设置过期时间,则返回-1
  • 若查询的键不存在,则返回-2
ttl key
  1. select切换数据库
    Redis默认有编号为0~15的16个逻辑数据库,每个数据库之间的数据是相互独立的,所有连接默认使用的都是0号数据库。
    index超出范围,会报错
select index
  1. flushdb清空当前所选用的数据库
flushdb
  1. 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
  1. incr对数值做自增操作
    若key对应的value是整数,则返回自增后的结果,若不是整数则报错,若key不存在则创建并返回1。
INCR key
  1. decr对数值做自减操作
    若key对应的value是整数,则返回自减后的结果,若不是整数则报错,若key不存在则创建并返回-1。
DECR key

3.List类型数据

应用场景:

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

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

  1. lpush向list左侧添加元素
lpush key element1 element2 ...
  1. rpush向list右侧添加元素
    rpush key element1 element2 ...
    
  2. linsert向list指定位置添加元素
    linsert key before|after pivot element
    
  3. lindex获取指定索引位置的元素
    index从左到右依次是0,1,2…,从右到左依次是-1,-2,-3…
lindex key index
  1. lrange获取指定范围内的元素列表
lrange key start stop
  1. lpop移除并返回list左侧元素
    count参数表示移除元素的个数
lpop key [count]
  1. rpop移除并返回list右侧的元素
 rpop key [count]
  1. lrem移除list中的指定元素
    count参数表示要移除element元素的个数(list中可以存在多个相同的元素),count的用法如下
    • 若count>0,则从左到右删除最多count个element元素
    • 若count<0,则从右到左删除最多count(的绝对值)个element元素
    • 若count=0,则删除所有的element元素
    lrem key count element
    
  2. lset修改指定索引位置的元素
 lset key index element
  1. llen查看list长度
llen key

4.Set类型数据

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

  1. sadd向set中添加元素
sadd key element1 element2 ...
  1. smembers查询set中的全部元素
smembers key
  1. srem移除set中的指定元素
srem key element1 element2 ...
  1. spop随机移除并返回set中的n个元素
spop key [count]
  1. srandmember随机返回set中的n个元素(不删除)
srandmember key [count]
  1. scard查询set中的元素个数
scard key
  1. sismember元素是否在set中
sismember key element
  1. sinter计算多个集合的交集
sinter key1 key2...
  1. sunion计算多个集合的并集
sunion key1 key2...
  1. sdiff计算多个集合的差集
sdiff key1 key2...

5.Hash类型数据

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

  1. hset向hash中增加键值对
    key:键
    field:value值里保存的键
    value:value值里保存的值
hset key field1 value1 field2 value2...
  1. hget获取hash中某个键对应的值
hget key field
  1. hdel删除hash中的指定的键值对
hdel key field1 field2...
  1. hlen查询hash中的键值对个数
hlen key
  1. hexists判断hash中的某个键是否存在
hexists key field
  1. hkeys返回hash中所有的键
hkeys key
  1. hvals返回hash中所有的值
hvals key
  1. 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
  1. zscore查看某个元素的分数
zscore key member
  1. zrank按照score的升序排序,名次从0开始。
zrank key member
  1. zrevrank按照score的降序排序,名次从0开始。
zrevrank key member
  1. zrem删除元素
zrem key member1 member2...
  1. zincrby增加元素的分数
zincrby key increment member
  1. 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通用方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值