【教程】 一文部署配置并入门 Redis

综述

什么是Redis

Redis官网------<Redis.io>

Redis, 作为一个高性能的键值对数据库,主要应用于以下场景:

  • 缓存系统:由于其高速读写能力,Redis 非常适合用作缓存系统,减少数据库负载。

  • 会话存储(Session Store):Redis 可以存储用户会话信息,常用于网站登录系统。

  • 消息队列系统:利用其发布/订阅模式,Redis 可作为消息队列使用,用于异步处理任务。

  • 实时分析:Redis 的速度使其成为实时数据处理的理想选择,如计数器、实时统计等。

  • 排行榜系统:使用 Redis 的排序集合,可以高效实现排行榜功能。

  • 地理空间数据存储:Redis 提供地理空间相关的数据结构,可以用于地理位置相关功能。

  • 持久化存储:虽然 Redis 是内存数据库,但它支持数据持久化,可用于需要快速读写且偶尔需要持久化的场景。

这些应用场景展示了 Redis 的灵活性和高性能,使其成为现代Web应用中不可或缺的一部分。

Redis数据结构的实际应用场景

类型 简介 特性 场景
String(字符串) 二进制安全 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M -
Hash(字典) 键值对集合,即编程语言中的Map类型 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去) 存储、读取、修改用户属性
List(列表) 链表(双向链表) 增删快,提供了操作某一段元素的API 1. 最新消息排行等功能(比如朋友圈的时间线) 2. 消息队列
Set(集合) 哈希表实现,元素不重复 1. 添加、删除,查找的复杂度都是O(1) 2. 为集合提供了求交集、并集、差集等操作 1. 共同好友 2. 利用唯一性,统计访问网站的所有独立ip 3. 好友推荐时,根据tag求交集,大于某个阈值就可以推荐
Sorted Set(有序集合) 将Set中的元素增加一个权重参数score,元素按score有序排列 数据插入集合时,已经进行天然排序 1. 排行榜 2.带权重的消息队列

安装 & 配置

Redis在Ubuntu安装

  1. 更新包列表:
    在安装新软件之前,最好更新系统的包列表。打开终端并输入以下命令:
bash 复制代码
	sudo apt update
  1. 安装Redis:
    使用apt包管理器安装Redis。在终端输入以下命令:
bash 复制代码
	sudo apt install redis-server
  1. 验证Redis安装:
    安装完成后,可以通过检查Redis服务的状态来验证是否安装成功。输入以下命令:
bash 复制代码
   sudo systemctl status redis-server

如果Redis服务正在运行,你将看到状态为"active (running)"。

  • 配置Redis(可选):
    如果需要对Redis进行配置,可以编辑其配置文件。默认情况下,Redis配置文件位于/etc/redis/redis.conf。使用你喜欢的文本编辑器打开它,例如:
bash 复制代码
   sudo nano /etc/redis/redis.conf

在这里,你可以根据需要更改各种设置,例如内存使用限制、持久化选项等。

  1. 启动Redis服务:
    如果Redis服务没有自动启动,你可以使用以下命令手动启动它:
bash 复制代码
   sudo systemctl start redis-server

要使Redis在系统启动时自动启动,可以使用以下命令:

bash 复制代码
   sudo systemctl enable redis-server
  1. 测试Redis:
    安装完成后,你可以测试Redis是否正常工作。在终端输入redis-cli,然后在Redis提示符下输入ping,如果一切正常,你将收到PONG的回应。

如果要配置外网访问,执行sudo ufw allow 6378并配置相应的端口映射 / 端口开放 / 内网穿透即可。

RedisInsight的安装(可选)

数据库连接工具有很多种,比如JetbrainDataGripMysql官方的MysqlWorkbanch,如果你想的话,也可以直接使用redis-cli进行操作,但是如果你想要官方 的使用体验,可以安装RedisInsight

  1. 安装好后界面如图:

  2. 添加数据库连接:(如果你是部署和连接都在Ubuntu上,那么设置都不需要动)

  3. 界面如图:

  4. 点击左侧WorkBench

  5. 准备完成。


--raw参数

如果你想继续使用Redis原生的命令行工具,直接在终端上输入redis-cli即可启动redis客户端。

bash 复制代码
redis-cli --raw

--raw------代表以原始形式来显示内容,Redis的字符串都是以二进制方式存储的,输入中文的话只会输出一堆16进制的代码。使用raw参数可以让客户端自动解码。

Redis基础语法 ## Redis基本增删查改 ### SET 增加和修改 Redis中的数据都是以Key-Value键值对的形式存储的,使用`SET`命令来设置一个Key-Value键值对: ```SQL SET name gulugulu1103 ``` 返回`OK`: ```SQL 127.0.0.1:6379> SET name gulugulu1103 OK ```

GET 查找

使用GET命令+Key。

注意:Redis大小写敏感。

SQL 复制代码
GET name

返回相应的Value:

BASH 复制代码
"gulugulu1103"

如果GET命令后面的Key未定义,则会返回(nil)

DEL 删除

使用DEL命令+Key

SQL 复制代码
DEL name

若删除成功,则会返回(interger) 1

若删除失败,则会返回(interger) 0

删除失败的原因基本上是两种:

  1. Key不存在
  2. Key被占用

EXISTS 判断是否存在Key

SQL 复制代码
EXISTS name

若存在,返回(interger) 1

若不存在,返回(interger) 0

SETNX 不替换的设置

SQL 复制代码
SETNX name gulugulu1104

若成功替换,则返回(interger) 1

若失败替换,则返回(interger) 0

KEYS 查询库中有哪些Key

使用KEYS + pattern进行查询

SQL 复制代码
EXISTS *

若没有Key,则返回(empty array)

若有Key,则按列表模式返回所有Key的字符串。

BASH 复制代码
127.0.0.1:6379> KEYS *
1) "name2"
2) "name1"
3) "name"

FLUSHALL删除所有Key**(谨慎使用)**

若删除成功,则返回OK

Redis数据结构

以下不提供具体实例,只提供语法。小写字母均代表抽象定义,如key代表键,value代表值。

下列语法中,[]代表可选参数,...代表可重复

列表(List)

到这里可能有点没反应过来,其实类比编程语言,我们可以把key看成是变量名,把value看成是变量的值,这样就很好理解使用Key-Value Pair去存储Redis中的数据了。

LPUSH & RPUSH 在列表首位添加

SQL 复制代码
LPUSH key value [value ...]
RPUSH key value [value ...]

--> (interger) 列表长度

LRANGE & RRANGE 查询列表内容

SQL 复制代码
LRANGE key start stop
RRANGE key start stop

start <-- 0 表示第一个元素

stop <-- -1 表示最后一个元素

若start > stop,--> (empty list or set)

LPOP & RPOP 删除元素

SQL 复制代码
LPOP key [count]
RPOP key [count]

[count] <-- 默认为1

若count > size,则全部删除

若count == 1,--> 被删元素

若count > 1,--> 被删子列表

LTRIM 仅保留范围内元素

SQL 复制代码
LTRIM key start stop 

--> "OK"

LLEN 查看列表长度

SQL 复制代码
LLEN key

--> (interger) 数组长度

若key不存在,--> (interger) 0

集合 (Set)

在Redis中,集合(Set)是由字符串类型元素组成的无序集合。集合是通过哈希表实现的,这意味着添加、删除和查找元素的复杂度都是O(1)。

Tips:集合(Set)相关的命令都是以S开头的。

SADD 添加元素

SQL 复制代码
SADD key member [member ...]

--> (interger) 1 表示成功

--> (interger) 0 表示失败,可能已经包含该元素

SMEMBERS 查看元素

SQL 复制代码
SMEMBERS key 

--> 返回该集合中的列表

SISMEMBERS 判断是否在集合中

SQL 复制代码
SISMEMBERS key member

--> (interger) 1 表示存在

--> (interger) 0 表示不存在

SREM 删除元素

SQL 复制代码
SREM key member [member ...] 

--> (interger) 1 表示删除成功

--> (interger) 0 表示删除失败,可能是key值不存在或value不存在

集合运算(进阶)

SUNION - 合并集合
SQL 复制代码
SUNION key [key ...]

--> 返回一个集合的并集。不同集合之间的元素互不相同。

SINTER - 交集运算
SQL 复制代码
SINTER key [key ...]

--> 返回一个集合的交集。只包含同时存在于所有给定集合中的元素。

SDIFF - 差集运算
SQL 复制代码
SDIFF key [key ...]

--> 返回一个集合与其他集合的差集。仅包含存在于第一个集合中,但不在其他给定集合中的元素。

SUNIONSTORE - 合并集合并存储
SQL 复制代码
SUNIONSTORE destination key [key ...]

--> 此命令等同于SUNION,但它将结果存储在destination集合中,而不是简单地返回结果集。

SINTERSTORE - 交集运算并存储
SQL 复制代码
SINTERSTORE destination key [key ...]

--> 此命令等同于SINTER,但它将结果存储在destination集合中。

SDIFFSTORE - 差集运算并存储
SQL 复制代码
SDIFFSTORE destination key [key ...]

--> 此命令等同于SDIFF,但它将结果存储在destination集合中。

有序集合 (Sorted Set)

在Redis中,有序集合(Sorted Set)是集合的一种变体,每个元素都会关联一个双精度浮点数分数。Redis正是通过分数来为集合中的元素进行从小到大的排序。有序集合的元素是唯一的,但分数(score)可以重复。

Tips:有序集合(Sorted Set)相关的命令都是以Z开头的。

ZADD 添加或更新元素

SQL 复制代码
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]

NX:只有当成员不存在于有序集合中时,才会添加该成员。
XX:只有当成员已经存在于有序集合中时,才会更新该成员的分数。
CH:修改返回值的行为。如果指定了此选项,命令会返回被添加或被更新的成员的数量。如果没有指定CH,则只返回被添加的新成员的数量。
INCR:用于将分数增加到已有成员的分数上,而不是替换它。如果使用了这个选项,只能指定一个成员及其分数。这个选项实质上将ZADD命令的行为变为一个增量更新,类似于INCRBY命令。

--> (interger) 返回被成功添加或更新的元素的数量。

ZRANGE 查看元素

SQL 复制代码
ZRANGE key start stop [WITHSCORES]

--> 按分数值递增(从小到大)顺序返回有序集合中指定区间内的成员。

若指定了WITHSCORES选项,-->

bash 复制代码
member
score
member
score
...

ZSCORE 获取成员分数

SQL 复制代码
ZSCORE key member

--> 成员的分数值。

若成员不存在于有序集合中,--> (nil)

ZRANK 查看成员排名(升序)

SQL 复制代码
ZRANK key member

--> 从小到大的索引

ZREVRANK 查看成员排名(降序)

SQL 复制代码
ZREVRANK key member

--> 从大到小的索引

ZINCRBY增加成员分数

SQL 复制代码
ZINCRBY key increment member

--> 该成员增加后的分数

若成员不存在,--> "-1"

ZREM 删除成员

SQL 复制代码
ZREM key member [member ...]

--> (interger) 返回被成功删除的元素的数量。

有序集合运算(进阶)

ZUNIONSTORE - 合并多个有序集合
SQL 复制代码
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

--> 计算给定的一个或多个有序集的并集,并将该并集(结果集)存储在destination中。

ZINTERSTORE - 有序集合交集
SQL 复制代码
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

--> 计算给定的一个或多个有序集的交集,并将该交集(结果集)存储在destination中。

哈希 (Hash)

在 Redis 中,哈希是一种存储键值对的数据结构,用于存储对象。每个哈希可以存储多个字段(field)和对应的值(value),非常适合于存储和处理对象属性。哈希中的字段是唯一的,但值可以重复。

Tips:哈希(Hash)相关的命令都是以H开头的。

HSET 添加或更新字段

SQL 复制代码
HSET key field value [field value ...]
  • 如果字段已存在于哈希key中,值会被更新。
  • 如果字段不存在,则字段会被创建并设置值。

--> (integer) 返回新增字段的数量。

HGET 获取字段的值

SQL 复制代码
HGET key field

--> 返回哈希表中指定字段的值。

如果字段不存在,--> (nil)

HMSET 设置多个字段的值

SQL 复制代码
HMSET key field1 value1 [field2 value2 ...]

--> 同时设置一个或多个字段的值。

--> 返回 OK。

HMGET 获取多个字段的值

SQL 复制代码
HMGET key field1 [field2 ...]

--> 返回哈希表中一个或多个指定字段的值。

HDEL 删除字段

SQL 复制代码
HDEL key field [field ...]

--> 删除一个或多个字段。

--> (integer) 返回被成功删除的字段数量。

HEXISTS 检查字段是否存在

SQL 复制代码
HEXISTS key field

--> 检查字段是否存在于哈希表中。

--> (integer) 1 表示存在,0 表示不存在。

HLEN 获取字段数量

SQL 复制代码
HLEN key

--> 返回哈希表中字段的数量。

HKEYS 获取所有字段名

SQL 复制代码
HKEYS key

--> 返回哈希表中所有字段的名称。

HVALS 获取所有字段值

SQL 复制代码
HVALS key

--> 返回哈希表中所有字段的值。

HGETALL 获取所有字段和值

SQL 复制代码
HGETALL key

--> 返回哈希表中的所有字段和值。

相关推荐
Acrelhuang8 分钟前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
十叶知秋1 小时前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
monkey_meng1 小时前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
想要打 Acm 的小周同学呀1 小时前
LRU缓存算法
java·算法·缓存
hlsd#1 小时前
go 集成go-redis 缓存操作
redis·缓存·golang
镰刀出海1 小时前
Recyclerview缓存原理
java·开发语言·缓存·recyclerview·android面试
瓜牛_gn2 小时前
mysql特性
数据库·mysql
奶糖趣多多3 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt5 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧7 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode