Redis 总结
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
Redis
Redis 介绍
远程字典服务
性能几乎最快的 非关系型轻量级数据库
- Redis 是 Key-Value 型 NoSQL 数据库
- Redis 将 数据存储在内存中同时也能 持久化到磁盘
- Redis 常用于 缓存利用内存的高效 提高程序的 处理速度。
- Redis 是一个 内存中的数据结构存储系统可用作 数据库缓存、消息代理 中间件
默认端口是 ==6379 ==
特点
- 速度快
- 广泛的语言支持
- 持久化
- 多种数据结构
- 主从复制
- 分布式 与 高可用
使用场景
- 说法一
- Redis 非常适合处理 小而热 的数据而且是 读写 都比较频繁的热数据。
- 说法二
- 不要在redis中频繁更新数据
- 跟RDB持久化没关系跟AOF持久化有关系。RDB持久化是在指定的时间间隔内把内存中的数据写入到磁盘中然后指定的目录下生成一个rdb文件。
- AOF持久化会记录每次写命令然后生成aof文件。每秒几百次更新aof都会记录每次set的命令会导致aof文件越来越大。
注意事项
https://blog.csdn.net/weixin_45178729/article/details/124082809
- 冷热数据分离不要将所有数据全部都放到 Redis 中
- 不同的业务数据要分开存储
- 存储的Key一定要设置超时时间
- 对于必须要存储的大文本【+超过500字节】数据一定要压缩后存储
- 线上Redis禁止使用Keys正则匹配操作
- 如果有类似需求请使用scan命令代替
- 可靠的消息队列服务
- 谨慎全量操作Hash、Set等集合结构
- 根据业务场景合理使用不同的数据结构类型
- 命名规范
- 除了默认的0号库以外其它的都需要通过一个额外请求才能使用。所以用前缀作为命名空间可能会更明智一点。
- 线上禁止使用monitor命令
- 禁止大string
- redis容量
- 单实例的内存大小不建议过大建议在10~20GB以内。
- redis实例包含的键个数建议控制在1kw内单实例键个数过大可能导致过期键的回收不及时。
- 可靠性
- 需要定时监控redis的健康情况使用各种redis健康监控工具实在不行可以定时返回redis 的 info信息。
- 客户端连接尽量使用连接池长链接和自动重连
Redis 安装与启动
Linux 系统安装
Redis 一般都用于 linux 系统
- 进入 Redis 官网进入下载
- 找到要下载的版本可以直接 download 或 在 Linux 里 使用 wget 安装。
wget https://download.redis.io/releases/redis-6.2.10.tar.gz
tar xzf redis-6.2.10.tar.gz
cd redis-6.2.10/
make
重要文件
- redis.conf配置信息
- src/redis-server启动命令
- src/redis-cli连接客户端
启动 Redis - 进入 Redis 目录下输入命令./src/redis-server redis.conf
Windows 系统安装
微软重构了一款在 windows 开发的 Redis
网站https://github.com/MicrosoftArchive/redis
但是已经停止更新很久了上一次是 2016因此不能放在线上服务器只能用于自己学习练习等。
- 解压文件
- 打开 命令控制符界面转到 解压的路径下
- 输入命令redis-server redis.windows.conf
a. 当出现The server is now ready to accept connections on port 6379 则说明启动成功了
Linux 操作 Redis
-
启动./src/redis-server redis.conf
- 默认为在前台运行按 Ctrl + C 或 关闭当前终端 退出
-
强制关闭不推荐kill -9 进程ID
- 首先可以使用 netstat -tulpn | grep 6379 命令查看 进程ID
-
更建议在 Redis客户端 中进行关闭./src/redis-cli shutdown
-
连接进入 Redis 客户端./src/redis-cli
- 后可 继续跟命令代表在客户端中执行此命令
- 后可 继续跟命令代表在客户端中执行此命令
redis.conf 的常用基本配置
使用 vim redis.conf 进行更改配置使用 行号gg 或 ==/word ==n 来快捷定位
- daemonize是否启用后台运行守护进程方式默认 no 如daemonize yes
- port 设置端口号默认6379 如port 6379
- logfile 设置日志文件 如logfile “.log日志文件”
- 此时便会生成指定日志文件
- databases 设置 redis 数据库的总量 如databases 255
- Redis 数据库用编号区分默认从 0 开始
- dir 设置数据文件 存储目录默认 ./ 如dir 数据文件目录
- Redis 全量备份文件dump.rdb 在 内存中对Redis数据 进行的任何操作都会同步的在硬盘中利用 .rdb 文件进行全量保存。以防止 宕机 不会造成数据丢失
- requirepass设置客户端密码 如requirepass 123456
- protected-mode是否开启保护模式默认为 yes
- 保护模式下 只允许指定的 ip 地址才能访问 Redis 服务。
- bind设定指定的 ip 才能访问此 Redis 服务。默认为 127.0.0.1
- bind 0.0.0.0代表所有 ip 的主机都能访问。
Redis 客户端
连接进入 Redis 客户端
- ./src/redis-cli [客户端命令]
-
[客户端命令]代表在客户端中执行此命令
-
-p指定端口号默认为 6379当更改了端口号时需要指定端口。
-
常用 通用 命令
- ping检查服务若返回 PONG 则代表客户端正常启动
- exit退出 客户端
- shutdown关闭 Redis 服务
- select dbID选择数据库
- Redis 数据库用编号区分默认当前是 0 号默认有 16 个数据库0~15在 redis.conf 中 修改数量
- auth 密码客户端密码 登录验证
- 若 设置了密码而没有登录验证则任何命令都会报错 (error) NOAUTH Authentication required.
- clear清空客户端屏幕。
- set key value增加 键值对。
- 若已存在 key则 覆盖 value
- mset批量增加
- get key查询指定 key 的 value。
- mget批量查询
- keys pattern根据 通配符表达式 查询 key。
- keys *查询所有 key
- dbsize返回 key 的总数。
- 底层通过一个 计数器 来记录所有数据的总量
- exists key检查指定 key 是否存在。
- 1 存在0 不存在
- del key[ key2]删除指定 key。多个用空格分隔。
- 返回删除 的数量
- expire key seconds设置指定 key 在 多少秒后 过期存活时间。
- expire hello 20设置 key=hello 20秒后过期
- ttl key查看 key 的过期剩余时间。
Redis 数据类型
String字符串 类型可以为数字Integer
- 最大 512mb兆建议单个 字符串 不超过 100kb否则在内存中提取的效率会大大降低。
- {incr | decr} key对数字进行 自增 / 自减 1。
- {incrby | decrby} key step对数字进行 自增 / 自减 指定步长值。
HashHash 类型键值对
-
用于存储 结构化数据例如 一个实体对象。多个 对象常用 :编号 分隔 emp:1
-
hset key hashKey hashValue增加 Hash 类型的 数据可批量。 hset emp:1 name cjx age 20
- hmset批量 增加。现在 hset 已具备此功能了。
-
hget key hashKey获取 指定 key 的 hashkey 的 value。 hget emp:1 name
- hmset批量 查询
-
hgetall key查询指定 key 的 所有键值对
-
hdel key hashKey删除 指定 key 的 hashKey可批量。
-
hexists key hashKey检查 是否存在 指定 key 的 hashKey
-
hlen key获取指定 key 的长度
List列表 类型数组
https://www.runoob.com/redis/redis-lists.html
- List 列表就是一系列 字符串的“数组”按插入顺序排序。
- List 列表最大长度为 2^32-1可以包含 40亿 个元素。
- 增加
- rpush key v[ v2]右侧插入
- lpush key v[ v2]左侧插入
- 删除
- rpop key[ count]弹出 右侧 count 个元素默认 count 为 1
- lpop key[ count]弹出 左侧 count 个元素默认 count 为 1
- lrange key start stop查询 指定 列表中 下标从 start 开始往后 stop 位的元素。
- stop: -1 代表 最后一个元素以此类推
- lindex key index查询指定下标的值。
- lset key index newValue修改指定下标 的值。
- llen key查询列表长度
- lrem key count value删除 count 数量个值为 value 的元素。
Set集合 类型字符串的无序集合集合成员是唯一的
https://zhuanlan.zhihu.com/p/395039882
- 最大长度为 2^32-1
- sadd key v[ v]增加 Set 类型 的 数据可批量。
- 对 一个Set 插入了 已有 的元素(Integer) 0
- smembers key查询 指定 key 的所有数据。
- srem key v[ v2]删除元素可批量
- scard key统计 指定 集合 下有多少个 元素
- sismember key member判断 member 是否为 key 集合中的元素。
- smismember key member [member …]判断给定的多个 member 是否为 key 集合中的元素。
- 返回 n 行对于每一个 member 元素存在集合key中返回 1 表示否则返回 0 。
- spop key [count]从集合中随机移除 count 个元素并返回该元素值。
- count 未指定时为 1。
- 如果只想返回元素但不移除使用 srandmember 命令。
- sinter key[ key2[ key3]]查询 交集 。
- sunion key[ key2[ key3]]查询 并集 。
- sdiff key[ key2[ key3]]查询 差集 key 中有而 key2 中没有的。
- 小技巧在第一个 key 中排除掉 交集剩下的就是差集。
- 若有 三个及以上则前两个求差集再用结果与下一个求差集。
- 小技巧在第一个 key 中排除掉 交集剩下的就是差集。
Zset有序集合 类型字符串的有序集合集合成员是唯一的
http://c.biancheng.net/redis_command/zset/
- 每一个元素都会关联一个 double 类型的分数Redis 正是通过分数来为集合中的成员进行 从大到小的排序。
- 分数可以重复
- zadd key score v[ score2 v2]添加每个元素都有一个 double 类型的分数可批量。
- zrange key start stop查询 集合中 下标从 start 开始往后 stop 位的元素。
- stop: -1 代表 最后一个元素以此类推
- withscores在每一个元素的下方展示分数。
- zrangebyscore key sStart sEnd查询 集合中 分数在[sStart, sEnd] 之间的所有元素
- withscores在每一个元素的下方展示分数。
- zscore key value获取 key 下面的 value 的分数
- zrem key v[ v2]删除元素可批量
- zcard key统计 指定 集合 下有多少个 元素
- zcount key sStart sEnd统计 集合中 分数在[sStart, sEnd] 之间的元素个数。
- zrank key value获取 key 下面的 value 的下标