修改网站后台地址,办公室装修设计软件,点评网站开发,现货交易平台1 redis介绍 Redis#xff08;Remote Dictionary Server )#xff0c;即远程字典服务 ! 是完全开源的#xff0c;遵守 BSD 协议#xff0c;是一个高性能的 key-value 数据库。
使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库#xff0c;并…1 redis介绍 RedisRemote Dictionary Server )即远程字典服务 ! 是完全开源的遵守 BSD 协议是一个高性能的 key-value 数据库。
使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库并提供多种语言的API。
Redis 通常被称为数据结构服务器因为值value可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件并且在此基础上实现了master-slave(主从)同步。
免费和开源是当下最热门的 NoSQL 技术之一也被人们称之为结构化数据库
1.1 redis优势 memcache
Redis 与其他 key - value 缓存产品有以下三个特点
Redis支持数据的持久化可以将内存中的数据保存在磁盘中重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据同时还提供listsetzsethash等数据结构的存储。Redis支持数据的备份即master-slave模式的数据备份。
Redis 优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。原子 – Redis的所有操作都是原子性的意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务即原子性通过MULTI和EXEC指令包起来。丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同
Redis有着更为复杂的数据结构并且提供对他们的原子性操作这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明无需进行额外的抽象。Redis运行在内存中但是可以持久化到磁盘所以在对不同数据集进行高速读写时需要权衡内存因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是相比在磁盘上相同的复杂的数据结构在内存中操作起来非常简单这样Redis可以做很多内部复杂性很强的事情。同时在磁盘格式方面他们是紧凑的以追加的方式产生的因为他们并不需要进行随机访问。
1.2 应用场景
redis的应用越来越多已经不单单只是为了解决高速缓存的问题。redis官方更是推出了 Redis Stack 模块帮助企业更加快速的构建一些复杂的开发场景。
关于它当下比较流行的十大场景可以看一下这篇文章(https://blog.csdn.net/m0_51358164/article/details/125927452)
2 安装redis
虽然redis现在已经支持在windows上进行安装了但是在实际的开发应用中还是在Linux系统中安装使用。
鉴于我们之前已经学习过Linux系统的基本操作因此我们这里直接安装到Linux系统中【依然是VM虚拟机】。
具体的安装过程参考Linux开发环境部署讲义
3 redis基础 3.1 数据库说明
redis默认有16个数据库这些数据库分别用【0-15】的索引值来表示。并且redis是没有表的概念的你可以把它的每个数据库看成一张表。
# 切换数据库2代表数据库索引
select 2在配置文件中有说明你也可以修改它改完记得重启服务。 3.2 连接命令
redis 客户端redis-cli在连接redis数据库时执行的命令。
# 查看命令帮助
redis-cli --help# 语法结构为
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]-h hostname 服务器主机名默认为 127.0.0.1-p port 服务器端口默认为 6379-s socket 服务器套接字覆盖主机名和端口-a password 连接到服务器时要使用的密码。你也可以使用 REDISCLI_AUTH 环境变量来更安全地传递这个密码如果两者都使用这个参数会优先使用-u uri 服务器URI-r repeat 执行指定的命令 N 次-i interval 当使用 -r 时每个命令等待 interval 秒。可以指定亚秒时间如 -i 0.1-n db 数据库编号-x 从 STDIN标准输入读取最后一个参数。-d delimiter 用于原始格式的多块分隔符 (默认: \n)-c 启用集群模式遵循 -ASK 和 -MOVED 的重定向--raw 对回复使用原始格式 (当 STDOUT 不是 tty 时默认)--no-raw 强制格式化输出即使 STDOUT 不是 tty--csv CSV格式输出--stat 打印关于服务器的滚动统计信息: mem, clients,...--latency 进入特殊模式连续采样延时。如果你在交互会话中使用这种模式它会一直运行显示实时数据。否则如果指定了——raw或——csv或者将输出重定向到非 TTY它对1秒的延迟进行采样 (您可以使用 -i 来更改间隔)然后产生一个输出并退出。--latency-history 比如延迟但是跟踪延迟会随着时间变化。默认时间间隔为15秒请使用-i修改。--latency-dist 将延迟显示为光谱需要xterm 256 色。默认时间间隔为1秒请使用-i修改。--lru-test keys 用 80-20 分布模拟缓存工作负载。--replica 模拟一个副本显示从主机接收到的命令。--rdb filename 从远程服务器传输 RDB 转储到本地文件。--pipe 从stdin向服务器传输原始Redis协议。--pipe-timeout n 在 --pipe 模式下在发送完所有数据后如果 n 秒内未收到回复则错误终止。默认超时时间为: 30。用 0 表示永远等待。--bigkeys Redis 键的样本寻找有许多元素的键复杂性--memkeys Redis 键的样本查找占用大量内存的键--memkeys-samples n Redis 键的样本查找占用大量内存的密钥并允许定义要采样的关键元素的数量--hotkeys 寻找热键的 Redis 键样本仅在 maxmemory-policy 为 *lfu 时有效。--scan 使用 SCAN 命令列出所有键--pattern pat 与 --scan 一起使用可以指定一个 SCAN 模式--intrinsic-latency sec 运行一个测试来测量内在的系统延迟测试将运行指定的秒数。--eval file 使用 Lua 脚本在 file 发送 EVAL 命令。--ldb 与 --eval 一起使用启用 Redis Lua 调试器。--ldb-sync-mode 与 --ldb 类似但使用同步 Lua 调试器在这种模式下服务器被阻塞脚本更改不会从服务器内存回滚。--cluster command [args...] [opts...] 集群管理器命令和参数 (参见下面)--verbose 详细模式--no-auth-warning 在命令行界面上使用密码时不显示警告信息--help 输出这个帮助并退出--version 输出版本并退出操作示例
# 打开本地默认的redis服务 127.0.0.1:6379
redis-cli# 根据端口号打开本地的redis服务
redis-cli -p port# 根据端口号和密码打开本地redis
redis-cli -p port -a password# 根据IP地址、端口号、密码、打开远程redis
redis-cli -h host -p port -a password# 最后接shutdown可关闭redis服务或在连接工具中使用shutdown也可关闭redis
redis-cli -h IP地址 -p 端口号 -a 密码 shutdown# redis-cli连接工具关闭服务
127.0.0.1:6379 shutdown # 直接关闭服务
127.0.0.1:6379 shutdown nosave # 直接关闭服务不保存所有数据
127.0.0.1:6379 shutdown save # 关闭服务并保存所有数据3.3 key命令
Redis 键命令用于管理 redis 的键Redis 键命令的基本语法如下
命令符 keyName [数值]
127.0.0.1:6379 set mykey hello,world!
OK
127.0.0.1:6379 get mykey
hello,world!
127.0.0.1:6379 del mykey
(integer) 1上面实例演示使用 set 命令向 Redis 添加一个 KEY通过 get 命令获取 KEY 的数据最后使用 del 命令删除 KEY。如果键被删除成功命令执行后输出 (integer) 1否则将输出 (integer) 0
常用的用来操作key的命令
命令返回内容说明set name jackok提示添加一个key为namevalue为jack的键值对。如果key已存在内容替换get namevalue值查看key为name的value值dump name序列化值序列化给定 key并返回被序列化的值rename name usernameok提示修改key的名字name变为usernamedel name整数(删除数量)删除指定key可以后面跟 , 号写多个同时删除多个exists name整数判断key为name是否存在1为存在0为不存在move name 1整数移动key为name的数据到数据库1中本库删除ttl name整数秒查询key为name的数据有效时间0 有存活时间且时间正在倒计时-1 一直有效-2 已失效expire name 15整数影响数量设置key为name的值15秒后失效expireat name 1677341411整数影响数量设置到期时间戳就是指定具体的年与日时分秒到期网上有转换工具persist name整数影响数量移出到期时间变为-2的key不能通过该命令恢复活性需要重新setrandomkeykey名从当前数据库中随机返回一个 keytype name数据类型获取改值的数据类型keys *键名称查找符合匹配规则的key名称如果为空返回empty array*代表0到任意个代表一个例如keys *a* keys ?a?flushallok提示清空所有库的内容注意这个命令一定会成功clear无返回内容清空当前操作屏幕
3.4 键值设计规约
key命名风格
**【推荐】**Redis key命名需具有可读性以及可管理性不该使用含义不清的key以及特别长的key名
【强制】以英文字母开头命名中只能出现小写字母、数字、英文点号(.)和英文半角冒号(
【强制】不要包含特殊字符如下划线、空格、换行、单双引号以及其他转义字符
命名规范
【强制】命名规范业务模块名:业务逻辑含义:其他:value类型
1 业务模块名具体的功能模块
2逻辑含义段
【强制】不同业务逻辑含义使用英文半角冒号(:)分割
**【强制】**同一业务逻辑含义段的单词之间使用英文半角点号 (.)分割用来表示一个完整的语义
3value类型
**【强制】**Redis key命名以key所代表的value类型结尾以提高可读性
示例user:basic.info:{userid}:string
value 设计
【强制】拒绝bigkey(防止网卡流量、慢查询)。
String类型控制在10KB以内Hash、List、Set、ZSet元素个数不要超过5000。
更多学习点击这里学习Redis支持的数据类型。