Redis 基本使用

目录

一、服务器端和客户端

1、服务器端

服务器端 是数据库,存储数据,提供操作和持久性。负责存储和处理数据。

连接命令

redis 复制代码
redis-server

查看帮助文档

redis 复制代码
redis-server --help

2、客户端

客户端 是应用程序或库,通过网络与服务器通信,发送命令和接收数据。负责连接服务器并与之交互。

连接命令

redis 复制代码
redis-cli

查看帮助文档

redis 复制代码
redis-cli --help

运行测试命令

redis 复制代码
ping

切换数据库(数据库没有名称,默认有16个,通过0-15来标识,连接 Redis 默认选择第一个数据库)

redis 复制代码
select 10

二、数据结构

Redis 是 key-value 的数据结构,每条数据都是⼀个键值对。

键的类型是字符串(注意:键不能重复)。

值的类型分为五种

  • 字符串 string
  • 哈希 hash
  • 列表 list
  • 集合 set
  • 有序集合 zset

三、数据操作行为

1、string 类型

字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如 JPEG 图像数据或 Json 对象描述信息等。在 Redis 中字符串类型的 Value 最多可以容纳的数据长度是 512M。

1.1、保存

如果设置的键不存在则为添加,如果设置的键已经存在则修改。

设置键值

redis 复制代码
set key value
redis 复制代码
# 设置键为 name 值为 itcast 的数据
set name itcast

设置键值及过期时间,以秒为单位

redis 复制代码
setex key seconds value
redis 复制代码
# 设置键为 aa 值为 aa 过期时间为3秒的数据
setex aa 3 aa

设置多个键值

redis 复制代码
mset key1 value1 key2 value2 ...
redis 复制代码
# 设置键为'a1'值为'python'、键为'a2'值为'java'、键为'a3'值为'c'
mset a1 python a2 java a3 c

追加值

redis 复制代码
append key value
redis 复制代码
# 向键为 a1 中追加值' haha'
append 'a1' 'haha'

1.2、获取

获取:根据键获取值,如果不存在此键则返回 nil

redis 复制代码
get key
redis 复制代码
# 获取键'name'的值
get 'name'

根据多个键获取多个值

redis 复制代码
mget key1 key2 ...
redis 复制代码
# 获取键 a1、a2、a3 的值
mget a1 a2 a3

2、键命令

查找键,参数支持正则表达式

redis 复制代码
keys pattern
redis 复制代码
# 查看所有键
keys *
redis 复制代码
# 查看名称中包含 a 的键
keys 'a*'

判断键是否存在,如果存在返回1,不存在返回0

redis 复制代码
exists key1
redis 复制代码
# 判断键 a1 是否存在
exists a1

查看键对应的 value 的类型

redis 复制代码
type key
redis 复制代码
# 查看键 a1 的值类型,为 redis ⽀持的五种类型中的⼀种
type a1

删除键及对应的值

redis 复制代码
del key1 key2 ...
redis 复制代码
# 删除键 a2、a3
del a2 a3

设置过期时间,以秒为单位(如果没有指定过期时间则⼀直存在,直到使用 DEL 移除)

redis 复制代码
expire key seconds
redis 复制代码
# 设置键'a1'的过期时间为3秒
expire 'a1' 3

查看有效时间,以秒为单位

redis 复制代码
ttl key
redis 复制代码
# 查看键'bb'的有效时间
ttl bb

3、hash 类型

hash 用于存储对象,对象的结构为属性、值。

值的类型为 string。

3.1、增加、修改

设置单个属性

redis 复制代码
hset key field value
redis 复制代码
# 设置键 user 的属性 name 为 itheima
hset user name itheima

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

Redis 被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。

原因: 强制关闭 Redis 快照导致不能持久化。

解决方案: 运行 config set stop-writes-on-bgsave-error no 命令后,关闭配置项 stop-writes-on-bgsave-error 解决该问题。

设置多个属性

redis 复制代码
hmset key field1 value1 field2 value2 ...
redis 复制代码
# 设置键 u2 的属性 name 为 itcast、属性 age 为 11
hmset u2 name itcast age 11

3.2、获取

获取指定键所有的属性

redis 复制代码
hkeys key
redis 复制代码
# 获取键 u2 的所有属性
hkeys u2

获取一个属性的值

redis 复制代码
hget key field
redis 复制代码
# 获取键 u2 属性'name'的值
hget u2 'name'

获取多个属性的值

redis 复制代码
hmget key field1 field2 ...
redis 复制代码
# 获取键 u2 属性'name'、'age的值
hmget u2 name age

获取所有属性的值

redis 复制代码
hvals key
redis 复制代码
# 获取键'u2'所有属性的值
hvals u2

3.3、删除

删除整个 hash 键及值,使用 del 命令(删除属性,属性对应的值会被⼀起删除)

redis 复制代码
hdel key field1 field2 ...
redis 复制代码
# 删除键'u2'的属性'age'
hdel u2 age

4、list 类型

列表的元素类型为 string

按照插入顺序排序

4.1、增加

在左侧插入数据

redis 复制代码
lpush key value1 value2 ...
redis 复制代码
# 从键为'a1'的列表左侧加⼊数据 a 、 b 、c
lpush a1 a b c

在右侧插入数据

redis 复制代码
rpush key value1 value2 ...
redis 复制代码
# 从键为'a1'的列表右侧加⼊数据0 1
rpush a1 0 1

在指定元素的前或后插入新元素

redis 复制代码
linsert key before 或 after 现有元素 新元素
redis 复制代码
# 在键为'a1'的列表中元素'b'前加⼊'3'
linsert a1 before b 3

4.2、获取

返回列表里指定范围内的元素

  • start、stop 为元素的下标索引
  • 索引从左侧开始,第⼀个元素为0
  • 索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
redis 复制代码
lrange key start stop
redis 复制代码
# 获取键为'a1'的列表所有元素
lrange a1 0 -1

4.3、设置指定索引位置的元素值

索引从左侧开始,第一个元素为0(索引可以是负数,表示尾部开始计数,如-1表示最后一个元素)

redis 复制代码
lset key index value
redis 复制代码
# 修改键为'a1'的列表中下标为1的元素值为'z'
lset a 1 z

4.4、删除

删除指定元素

  • 将列表中前 count 次出现的值为 value 的元素移除
  • count > 0:从头往尾移除
  • count < 0:从尾往头移除
  • count = 0:移除所有
redis 复制代码
lrem key count value
redis 复制代码
# 向列表'a2'中加⼊元素'a'、'b'、'a'、'b'、'a'、'b'
lpush a2 a b a b a b
# 从'a2'列表右侧开始删除2个'b
lrem a2 -2 b
# 查看列表'py12'的所有元素
lrange a2 0 -1

5、set 类型

无序集合

元素为 string 类型

元素具有唯一性,不重复

说明:对于集合没有修改操作

5.1、增加

添加元素

redis 复制代码
sadd key member1 member2 ...
redis 复制代码
# 向键'a3'的集合中添加元素'zhangsan'、'lisi'、'wangwu'
sadd a3 zhangsan sili wangwu

5.2、获取

返回所有的元素

redis 复制代码
smembers key
redis 复制代码
# 获取键'a3'的集合中所有元素
smembers a3

5.3、删除

删除指定元素

redis 复制代码
srem key
redis 复制代码
# 删除键'a3'的集合中元素'wangwu'
srem a3 wangwu

6、zset 类型

sorted set,有序集合

元素为 string 类型

元素具有唯一性,不重复

每个元素都会关联⼀个 double 类型的 score,表示权重,通过权重将元素从小到大排序

说明:没有修改操作

6.1、增加

添加

redis 复制代码
zadd key score1 member1 score2 member2 ...
redis 复制代码
# 向键'a4'的集合中添加元素'lisi'、'wangwu'、'zhaoliu'、'zhangsan',权重分别为4、5、6、3
zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan

6.2、获取

返回指定范围内的元素

  • start、stop 为元素的下标索引
  • 索引从左侧开始,第一个元素为0
  • 索引可以是负数,表示从尾部开始计数,如-1表示最后一个元素
redis 复制代码
zrange key start stop
redis 复制代码
# 获取键'a4'的集合中所有元素
zrange a4 0 -1

返回 score 值在 min 和 max 之间的成员

redis 复制代码
zrangebyscore key min max
redis 复制代码
# 获取键'a4'的集合中权限值在5和6之间的成员
zrangebyscore a4 5 6

返回成员 member 的 score 值

redis 复制代码
zscore key member
redis 复制代码
# 获取键'a4'的集合中元素'zhangsan'的权重
zscore a4 zhangsan

6.3、删除

删除指定元素

redis 复制代码
zrem key member1 member2 ...
redis 复制代码
# 删除集合'a4'中元素'zhangsan'
zrem a4 zhangsan

删除权重在指定范围的元素

redis 复制代码
zremrangebyscore key min max
redis 复制代码
# 删除集合'a4'中权限在5、6之间的元素
zremrangebyscore a4 5 6

四、Redis 和 MySQL 区别

1、数据存储方式

  • Redis:Redis 是一个内存数据库,数据存储在内存中,因此读取速度非常快。它通常用于缓存、快速数据检索和临时数据存储。
  • MySQL:MySQL 是一个关系型数据库管理系统(RDBMS),数据通常存储在磁盘上,对于复杂查询和大规模数据存储非常适用。

2、数据模型

  • Redis:Redis 支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。这些数据结构非常灵活,适用于各种不同的用例。
  • MySQL:MySQL 使用表格模型,数据以表格的形式组织,需要定义表格结构和关系。

3、查询语言

  • Redis:Redis 使用键值对的方式存储数据,并提供了一些基本的操作命令,如 GET、SET、HGET、HSET 等。它不支持 SQL 查询语言。
  • MySQL:MySQL 使用结构化查询语言(SQL),支持复杂的查询、连接和过滤操作。

4、持久性

  • Redis:Redis 支持数据的持久性,可以将数据定期快照到磁盘上,或者使用 AOF 日志进行持久化。但由于数据首先存储在内存中,存在内存限制,因此可能需要谨慎配置以避免数据丢失。
  • MySQL:MySQL 以默认方式将数据持久化到磁盘上,可以确保数据安全性和持久性。数据存储在磁盘上,不受内存限制。

5、适用场景

  • Redis:Redis 适合于需要快速读取和写入的应用,如缓存、实时计数、会话存储、消息队列等。它在读取方面非常高效,但对于复杂的查询和事务支持有限。
  • MySQL:MySQL 适用于需要复杂查询、事务支持和大规模数据存储的应用,如 Web 应用、电子商务平台、企业级应用等。

6、数据一致性

  • Redis:Redis 强调性能和速度,可能会牺牲一定的数据一致性。在某些情况下,可能会出现数据丢失或不一致的情况。
  • MySQL:MySQL 强调数据的一致性和可靠性,通常可以配置为满足 ACID 事务要求。

7、部署和维护

  • Redis:Redis 通常较容易部署和维护,特别是在单节点或主从复制的情况下。Redis 集群的维护可能较复杂。
  • MySQL:MySQL 在大规模部署和维护方面可能较复杂,需要考虑备份、复制、故障恢复等方面的问题。

总的来说,Redis 和 MySQL 是两种不同的数据库,适用于不同的用例和需求。选择哪一个取决于具体应用场景和性能要求。有时候,两者也可以结合使用,例如使用 Redis 作为缓存层,提高数据访问速度,同时使用 MySQL 来存储持久数据。

记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~

相关推荐
PGCCC18 分钟前
【PGCCC】Postgresql 存储设计
数据库·postgresql
PcVue China2 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
魔道不误砍柴功4 小时前
简单叙述 Spring Boot 启动过程
java·数据库·spring boot
锐策4 小时前
〔 MySQL 〕数据库基础
数据库·mysql
远歌已逝5 小时前
管理Oracle实例(二)
数据库·oracle
日月星宿~5 小时前
【MySQL】summary
数据库·mysql
爱吃土豆的程序员5 小时前
在oracle官网下载资源显示400 Bad Request Request Header Or Cookie Too Large 解决办法
java·数据库·oracle·cookie
睿思达DBA_WGX6 小时前
Oracle 11g rac 集群节点的修复过程
数据库·oracle
尘浮生6 小时前
Java项目实战II基于微信小程序的移动学习平台的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·学习·微信小程序·小程序
Leo.yuan7 小时前
数据量大Excel卡顿严重?选对报表工具提高10倍效率
数据库·数据分析·数据可视化·powerbi