Redis学习笔记2

举报
幼儿园老大* 发表于 2024/07/19 13:26:29 2024/07/19
【摘要】 安装指令在控制台输入以下指令安装和使用 Redis:$ sudo apt-get install redis-server # 安装 Redis 数据库(仅限 Ubuntu 可用)$ redis-server # 启动 Redis 数据库$ redis-server --port 6380 # 启...

安装指令

在控制台输入以下指令安装和使用 Redis:


$ sudo apt-get install redis-server       # 安装 Redis 数据库(仅限 Ubuntu 可用)

$ redis-server                            # 启动 Redis 数据库
$ redis-server --port 6380                # 启动 Redis 数据库,在指定端口
$ redis-server redis-6379.conf            # 启动 Redis 数据库,使用指定配置文件

$ redis-cli                               # 进入 Redis 控制台,在默认端口
$ redis-cli -p 6380                       # 进入 Redis 控制台,在指定端口Copy to clipboardErrorCopied

基础配置

在 Redis 安装目录下的 redis.conf 文件是 Redis 默认配置文件,启动 Redis 数据库时默认加载。



daemonize no                     # 守护线程,打开后启动 Redis 控制台不提示
bind 127.0.0.1                   # 绑定 IP 地址,绑定后只能通过该地址访问 Redis
port 6379                        # 端口号
databases 16                     # 存储区域数量Copy to clipboardErrorCopied

日志配置

Redis 总共支持四个日志级别:debug / verbose / notice / warning ,从前往后日志记录信息逐渐减少。通常情况下开发环境设为 verbose ,生产环境设为 notice 。

loglevel verbose                 # 日志级别
logfile 6379.log                 # 日志文件名Copy to clipboardErrorCopied

持久化配置

默认使用 RDB 方式持久化数据,相关配置如下:




save 900 1                            # 自动同步数据条件,900s 内变更 1 个 key 值则持久化
save 300 10                           # 自动同步数据条件,300s 内变更 10 个 key 值则持久化

rdbcompression yes                    # 是否压缩数据,压缩后节省空间但读取较慢
rdbchecksum yes                       # 是否格式校验(默认开启),校验降低文件损坏风险但读取较慢

dbfilename dump.rdb                   # 保存文件名
dir ./                                # 保存文件位置Copy to clipboardErrorCopied

可以在配置文件中改用 AOF 方式持久化数据,刷新文件条件有三种类型: always / everysec / no 。

appendonly yes                        # 选用 AOF 方式持久化
appendsync everysec                   # 刷新文件条件,每秒更新一次操作日志Copy to clipboardErrorCopied

容量配置

对 Redis 数据库占用空间和客户链接做出限制。




maxclients 100                        # 客户连接数上限,超出后拒绝客户访问,为 0 表示不限制
timeout 300                           # 客户闲置时长,超出后关闭连接,为 0 表示不关闭

maxmemory 50                          # Redis 最大占用内存比例,为 0 表示全部可用
maxmemory-samples                     # Redis 随机选取数据数量
maxmemery-policy volatile-lru         # Redis 逐出策略Copy to clipboardErrorCopied

多机配置

如果我们要设置集群,则需要进行以下配置:

cluster enabled yes                        # 开启集群
cluster-config-file nodes.conf             # 集群配置文件Copy to clipboardErrorCopied

如果我们要设置主从服务器,则需要进行以下配置:




# 主服务器
requirepass 123456                    # 主服务器设置密码(可选)
repl-backlog-size 1mb                 # 缓冲区大小

# 从服务器
slaveof 127.0.0.1 6379                # 主服务器套接字,设置后自动连接
masterauth 123456                     # 主服务器密码
slave-serve-stale-data no             # 同步数据时是否允许读数据Copy to clipboardErrorCopied

Redis 基础

  1. 在 Redis 中单个指令都是原子性操作,通过指令操作 Redis 数据时无需担心线程安全问题。

  2. Redis 以 key-value 的形式保存数据:key 值一定为 string 类型,而 value 值支持以下五种基础类型:

数据类型 存储形式
string 字符串
hash 哈希表
list 链表
set 哈希集
sorted_set 二叉树集

存储区域

Redis 将数据存储分为多个相互独立的区域,将 Redis 操作局限在自己的存储区域内。通常划分为 16 个(编号 0-15),默认使用编号 0 。




> select 1                         # 改用 1 号存储区域

> dbsize                           # 返回当前区域 key 数量
> move key 2                       # 将当前 key 迁移到 2 号存储区域
> flushdb                          # 清空当前存储区域
> flushall                         # 清空全部存储区域Copy to clipboardErrorCopied

key 操作

基本操作




> del key                            # 删除 key
> exists key                         # 判断是否存在 key
> type key                           # 返回 key 对应的 value 类型       

> rename key newkey                  # 重命名
> renamenx key newkey                # 重命名(返回 1),新名称已存在则失败(返回 0)
> sort                               # 对 key 排序Copy to clipboardErrorCopied

时效性控制

Redis 中可以为 key 设置有效期,key 过期后会由 Redis 执行删除策略回收内存空间。

解释


> expire key 10                      # key 10s 内有效
> expireat key 1355292000            # key 截至时间戳有效
> persist key                        # key 永久有效

> ttl key                            # 返回 key 剩余有效时间,若不存在返回 -2 ,永久返回 -1Copy to clipboardErrorCopied

查询操作

Redis 支持查询存储区域内含有的 key,且允许使用以下通配符:

  • * 表示任意数量字符
  • ? 表示任意一个字符
  • [] 表示一个指定字符


> keys *                             # 查询所有 key
> keys user:*                        # 查询所有 user 的 key
> keys id:75??                       # 查询 ID 为 7500-7599 的 key
> keys id:7[2345]55                  # 查询 ID 为 7255/7355/7455/7555 的 keyCopy to clipboardErrorCopied

基础类型

string 类型

Redis 的 string 类型中,key 值对应的存储空间内将保存一个字符串数据,

key 值标准命名格式为 表名:主键名:主键值:字段名,如 user:id:15942348:name - "王东浩"

基本操作



> set key 10                     # 设置键值对
> get key                        # 获取键值,不存在则返回 nil
> del key                        # 删除键值对
> strlen key                     # 获取价值的字符串长度
> append key 0                   # 在键值尾部追加

> mset key1 10 key2 100          # 设置多个数据
> mget key1 key2                 # 获取多个数据

> setex key 10 1                 # 设置键值对,10s 后自动删除
> psetex key 10 1                # 设置键值对,10ms 后自动删除Copy to clipboardErrorCopied

数据操作

如果字符串为合法数字,可以当作数字处理。但数值不能超过 shell 中的 long 类型。



> incr key                       # 键值加一
> decr key                       # 键值减一
> incrby key 10                  # 键值加十
> decrby key 10                  # 键值减十
> incrbyfloat key -1.5           # 键值加 -1.5Copy to clipboardErrorCopied

hash 类型

hash 类型中,key 值对应的存储空间内可以保存多个键值对(field-value):field 和 value 都必须是字符串类型。当键值对较少时存储空间内采用数组存储,当键值对较多时采用哈希存储。

十分适合存储对象,每个键值对记录对象的一个属性。

基本操作



> hset key field 10               # 设置/更新键值对
> hsetnx key field 10             # 如果键值不存在则设置键值对
> hget key field                  # 获取键值
> hgetall key                     # 获取全部键值
> hdel key field                  # 删除键值对
> hlen key                        # 获取键值对数量
> hexists key field               # 判断是否存在字段(返回 1 或 0)

> hmset key field1 1 field2 2     # 设置/修改多个键值对
> hmget key field1 field2         # 获取多个键值对Copy to clipboardErrorCopied

扩展操作



> hkeys key                       # 返回 key 对应的所有 field
> hvals key                       # 返回 key 对应的所有 value

> hincrby key field 1             # 键值加一
> hdecrby key field 1             # 键值减一Copy to clipboardErrorCopied

list 类型

list 类型中,key 值对应的存储空间内可以保存多个字符串数据,采用双向链表实现。具有索引的概念,但还是更适合从链表两侧操作。字符串总容量不能超过 2 的 32 次方。

十分适合存储有序信息,比如粉丝列表。

基本操作



lpush list 1                    # 链表左侧插入数据,返回下标
rpush list 2                    # 链表右侧插入数据,返回下标
lpop list                       # 获取并删除最左侧数据
rpop list                       # 获取并删除最右侧数据
blpop list 10                   # 获取并删除最左侧数据,不存在则至多等待 10 s
lrem list 3 x                   # 从左侧开始,删除三个为 x 的数据

lrange list 0 2                 # 返回左侧前3个数据
lrange list 0 -1                # 返回全部数据(常用)
lindex list 0                   # 返回指定位置数据
llen list                       # 返回字符串个数Copy to clipboardErrorCopied

set 类型

set 类型中,key 值对应的存储空间内可以保存多个字符串数据,采用哈希存储实现。随机查询效率比 list 类型更高。字符串总容量不能超过 2 的 32 次方。

十分适合存储集合类信息,比如用户感兴趣的话题、用户权限。

基本操作



sadd set member                  # 添加数据(可以是多个)
srem set member                  # 删除数据(可以是多个)
smembers set                     # 展示全部数据  

scard set                        # 返回数据个数
sismember set                    # 判断是否含有数据

srandmember set 5                # 随机从集合中选取 5 个数据
spop set                         # 返回并删除一个随机数据Copy to clipboardErrorCopied

扩展操作



sinter set1 set2                   # 交
sunion set1 set2                   # 并
sdiff set1 set2                    # 差
sinterstore newset set1 set2       # 交且存入新集合
sunionstore newset set1 set2       # 并且存入新集合
sdiffstore newset set1 set2        # 差且存入新集合

smove oldset newset 5              # 数据从旧集合迁移到新集合Copy to clipboardErrorCopied

sorted_set 类型

如果我们需要数据查询效率较高且有序,则可以使用 sorted_set 类型。底层和 set 结构相同采用哈希存储(value 值仍不可重复),但在 key-value 存储结构后添加 score 属性为数据排序,默认从小到大。score 是数字且可以使用小数,但如果使用小数浮点类型可能会出现精度丢失。

可以用来存储排行榜等有序数据集合,还可以用于存储时效性或者带有权重的任务队列,用当前时间或者权重作为 score 。

基本操作

zadd set score1 member             # 添加数据且标记序号(可以是多个)Copy to clipboardErrorCopied

高级类型

此外,Redis 还提供了 Bitmaps、 HyberLogLog、GEO 三种高级数据类型,用来适配特定的应用场景。

Bitmaps 类型

Bitmaps 类型中用作存储布尔值:每个 key 对应若干字节数据(字节数 = 最大编号 / 8),每字节可以存储 8 个 boolean 值。

如果 Redis 要存储大量 boolean 值,使用 Bitmaps 类型可以显著节省内存空间。

setbit bits 0 1                  # 将 0 位置为 1(true)
getbit bits 0                    # 取 0 位的值Copy to clipboardErrorCopied

HyperLogLog 类型

HyperLogLog 类型用作数据统计,只记录数量不保存数据,且当数据量巨大时存在误差!

使用 HyperLogLog 类型可以显著节省内存空间,每个 key 仅占用 12k 内存标记基数。

setbit bits 0 1                  # 将 0 位置为 1(true)
getbit bits 0                    # 取 0 位的值Copy to clipboardErrorCopied

GEO 类型

GEO 类型用作地理位置计算,根据经纬度。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。