Redis部署及相关常用命令

在Linux上部署Redis

        安装版本为redis-7.0.13

1、安装Redis yum仓库

        下载yum仓库

wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

        安装yum仓库

rpm -ivh remi-release-7.rpm

2、安装Redis 

yum --enablerepo=remi -y install redis-7.0.13

3、配置Redis允许远程访问

Redis服务默认只允许本地访问,若需要进行远程访问,需要做出以下配置。

        修改Redis配置文件

vim /etc/redis/redis.conf

        修改如下参数

#监听所有网络接口,默认只监听localhost
bind 0.0.0.0

#关闭保护模式,默认开启。开始保护模式后,远程访问必须进行认证后才能访问。
protected-mode no

4、启动Redis

        执行以下命令启动Redis

systemctl start redis

        执行以下命令查看Redis的运行状态

systemctl status redis

        执行以下命令设置Redis开机自启

systemctl enable redis

Redis概述

1、Redis定义

Redis(Remote Dictionary Server)是一个基于内存的键值对存储系统,常用作缓存服务。由于Reids将数据都保存在内存中,因此其读写性能十分惊人,同时,为保证数据的可靠性,Redis会将数据备份到硬盘上,用于故障发生时的数据恢复。

2、Redis特点

  • 高性能:Redis主要将数据存储在内存中,因此读写速度非常快,适合对速度有较高要求的场景。

  • 支持多种数据结构:Redis中键值对的值(Value)支持多种数据结构,如字符串、哈希表、列表、集合等,这使得它可以应用于多种不同的场景。

  • 持久化:Redis可以通过定期快照或者实时记录写操作日志的方式将内存中的数据持久化到硬盘,确保数据在重启后不会丢失。

  • 灵活的数据过期策略:可以为每个键设置过期时间,一旦过期,Redis会自动删除。

Reids客户端

1、命令行客户端

Reids提供了一个命令行客户端redis-cli,我们可以使用它连接到Redis服务器,然后通过命令与服务器进行各种交互。

(1)、启动客户端

redis-cli -h 127.0.0.1 -p 6379
  • -h <hostname>选项用于声明Redis服务器的主机名或IP地址,默认值为127.0.0.1

  • -p <port>选项用于声明Redis服务器监听的端口号,默认值为6379

    测试连接:ping命令,若连接正常,则会返回pong

 (2)、退出客户端

 quit命令可用于断开客户端与服务端的连接,并退出客户端

2、图形化客户端

Redis官方推荐的图形化客户端为RedisInsight,该客户端开源免费,且功能强大

(1)、选择配置数据库连接

(2)、填写连接信息,并测试连接,通过后保存连接

(3)、点击创建好的连接

工作界面如下

Redis常用数据类型及命令

通用命令

        查看所有键

keys pattern

pattern用于匹配key,其中若pattern为 表示任意个任意字符,为 表示一个任意字符。

        查看键总数

dbsize

若该键存在则返回1,不存在则返回0 

         判断键是否存在

exists key

        删除键

del key [key ...]

 返回值为删除键的个数,若删除一个不存在的键,则返回0

        查询键的剩余过期时间

ttl key

ttl的含义为time to live,用于查询一个定时键的剩余存活时间,返回值以秒为单位。若查询的键的未设置过期时间,则返回-1,若查询的键不存在,则返回-2  

        数据库管理命令

Redis默认有编号为0~15的16个逻辑数据库,每个数据库之间的数据是相互独立的,所有连接默认使用的都是0号数据库。

                切换数据库

select index

若index超出范围,会报错

                清空数据库

flushdb命令会清空当前所选用的数据库,flushall命令会清空0~15号所有的数据库。

string类型

Redis中的string类型保存的是字节序列(Sequence of bytes),因此任意类型的数据,只要经过序列化之后都可以保存到Redis的string类型中,包括文本、数字甚至是一个对象。

 常用命令

set命令用于添加string类型的键值对
SET key value [NX|XX] [EX seconds|PX milliseconds]

各选项含义如下

  • NX:仅在key不存在时set

  • XX:仅在key存在时set

  • EX seconds:设置过期时间,单位为秒

  • PX milliseconds:设置过期时间,单位为毫秒

get命令用于获取某个string类型的键对应的值
GET key
incr命令用于对数值做自增操作
INCR key

若key对应的value是整数,则返回自增后的结果,若不是整数则报错,若key不存在则创建并返回1

 decr命令用于对数值做自减操作
DECR key

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

list类型

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

常用命令

添加元素
lpush命令用于向list左侧添加元素
lpush key element [element ...]
rpush命令用于向list右侧添加元素
rpush key element [element ...]
 linsert命令用于向list指定位置添加元素
linsert key before|after pivot element

 查询元素
lindex命令用于获取指定索引位置的元素
lindex key index

index从左到右依次是0,1,2...,从右到左依次是-1,-2,-3...

lrange命令用于获取指定范围内的元素列表
lrange key start stop
删除元素
lpop命令用于移除并返回list左侧元素
lpop key [count]
rpop命令用于移除并返回list右侧的元素
rpop key [count]
lrem命令用于移除list中的指定元素
lrem key count element

说明:count参数表示要移除element元素的个数(list中可以存在多个相同的元素),count的用法如下

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

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

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

修改元素
lset命令可用于修改指定索引位置的元素
lset key index element
其他
llen命令可用于查看list长度
llen key

set类型

和list类型相似,set类型也可用来存储多个string类型的元素,但与list类型不同,set中的元素是无序的,且set中不会包含相同元素。

常用命令

        集合内
sadd命令用于向set中添加元素
sadd key member [member ...]
smember命令用于查询set中的全部元素
smembers key
srem命令用于移除set中的指定元素
srem key member [member ...]
spop命令随机移除并返回set中的n个元素
spop key [count]
srandmember命令随机返回set中的n个元素
srandmember key [count]
scard命令用于查询set中的元素个数
scard key
sismember命令用于元素是否在set中
sismember key element
        集合间 
sinter命令用于计算多个集合的交集
sinter key [key ...]
sunion命令用于计算多个集合的并集
sunion key [key ...]
sdiff命令用于计算多个集合的差集
sdiff key [key ...]

hash类型

hash类型类似于Java语言中的HashMap,可用于存储键值对。

常用命令

hset 命令用于向hash中增加键值对
hset key field value [field value ...]
hget命令用于获取hash中某个键对应的值
hget key field
hdel命令用于删除hash中的指定的键值对
hdel key field [field ...]
hlen命令用于查询hash中的键值对个数
hlen key
hexists命令用于判断hash中的某个键是否存在
hexists key field
hkeys命令用于返回hash中所有的键
hkeys key
hvals命令用于返回hash中所有的值
hvals key
hgetall命令用于返回hash中所有的键与值
hgetall key

zset类型

zset(sorted set)被称为有序集合,同set相似,zset中也不会包含相同元素,但不同的是,zset中的元素是有序的。并且zset中的元素并非像list一样按照元素的插入顺序排序,而是按照每个元素的分数(score)排序。

常用命令

zadd命令用于向zset中添加元素
ZADD key [NX|XX] score member
  • NX:仅当member不存在时才add

  • XX:仅当member存在时才add

zcard命令用于计算zset中的元素个数
zcard key
zscore命令用于查看某个元素的分数
zscore key member
zrank/zrevrank 命令用于计算元素的排名,其中zrank按照score的升序排序,zrevrank则按照降序排序
zrank/zrevrank key member
zrem命令用于删除元素
zrem key member [member ...]
zincrby命令用于增加元素的分数
zincrby key increment member
zrange命令用于查询指定区间范围的元素
zrange key start stop [byscore] [rev] [limit offset count] [withscores]
  • 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:用于打印分数

SpringBoot整合Redis

Spring Data Redis概述

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

Spring Data Redis快速入门

1、创建SpringBoot项目(自行创建)

2、引入Maven依赖

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

3、配置application.yml文件

spring:
  data:
    redis:
      host: 192.168.10.101
      port: 6379
      database: 0

4、RedisTemplate使用

由于spring-boot-starter-data-redis中提供了RedisTemplate的自动配置,所以我们可以将RedisTemplate注入自己的类中。

@SpringBootTest
public class TestRedisTemplate {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate() {

    }
}

相关使用的方法介绍:

redisTemplate.opsForValue()操作string类型的方法
redisTemplate.opsForList()操作list类型的方法
redisTemplate.opsForSet()操作set类型的方法
redisTemplate.opsForHash()操作hash类型的方法
redisTemplate.opsForZSet()操作zset类型的方法
@SpringBootTest
public class TestRedisTemplate {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testSet() {
        redisTemplate.opsForValue().set("key1", "value1");
    }

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

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

 5、序列化问题

 问题一

使用RedisTemplate向Redis中增加一个键值对

redisTemplate.opsForValue().set("key2","value2");

使用RedisTemplate查询key2所对应的value,有结果

redisTemplate.opsForValue().get("key2");

使用命令行客户端查询key2所对应的value,无结果

get key2
问题二

在图形化客户端或者命令行客户端观察key2,显示异常

命令行客户端中的key2显示如下

问题说明 

根本原因:Redis中的key和value均是以二进制的形式存储的,因此客户端输入的key和value都会经过序列化之后才发往Redis服务端。而RedisTemplate所使用序列化方式和命令行客户端采用序列化方式不相同,进而导致序列化之后的二进制数据不同,所以才会导致上述的现象。

 6、StringRedisTemplate使用

StringRedisTemplate使用的序列化器和命令行所使用的序列化器是相同的。因此可以使用StringRedisTemplate代替RedisTemplate 解决上述问题。

@SpringBootTest
public class TestStringRedisTemplate {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    public void testSet() {
        redisTemplate.opsForValue().set("key4", "value4");
    }

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值