# redis
~~~
官网 : https://www.redis.ro
~~~
## redis 简介 :
~~~
1. 开源的 构建于内存 的 数据结构 数据库
2. 常用于 数据存储 缓存处理 和 消息处理
3. 支持多种数据结构类型
4. 原子化操作( 在多线程(进程)的操作系统中不能被其他进程(线程)打断的操作 )
~~~
~~~
5. 简单易用 的 主从复制 功能
ps : 主从复制 :
mysql要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫A,从服务器叫B;主从复制就是
B跟着A学,A做什么,B就做什么。那么B怎么同步A的动作呢?现在A有一个日志功能,把自己所做的增删改查的动作
全都记录在日志中,B只需要拿到这份日志,照着日志上面的动作施加到自己身上就可以了。这样就实现了主从复制。
~~~
~~~
6. 支持lua脚本(语言)运行
7. 支持LRU缓存算法剔除策略的控制
8. 支持事务处理
9. 支持不同级别的磁盘 持久化 处理策略
~~~
## redis 优势
~~~
1. 极高的读写性能
2. 丰富的数据类型
3. 原子性操作
4. 支持主从热备
5. 丰富的特性
~~~
## redis 应用场景
~~~
1. 高性能缓存
1. 缓存是redis最常见的应用场景
2. 缓存数据
3. 缓存page
4. 缓存会话信息session等
2. 多类型数据结构
1. string 存储短信验证码,配置信息
2. hash 存储用户信息,商品信息
3. list 省,市,区表, 存储消息队列
4. set 唯一性
5. sorted set 有序集合 可以利用写成排行榜的效果
6. hyperloglog 统计,计数
7. pub/sub 构建频道/聊天
3.分布式锁
1. redis 分布式 键值 存储
2. 高并发下的数据一致性问题
3. 单线程
4. 用作分布式锁
5. 性能优质,不会成为性能瓶颈
4. 自动过期
5. 高并发和海量数据的处理
1. 分片应用应对高并发的 请求
2. 支持主从热备,保证可用性
6. 数据之久化
数据构建内存中
~~~
## liunx 安装redis
~~~
1. wget ( redis官网复制下载链接 )
2. tar xzvf redis-版本.tar.gz 解压
3. cd redis-版本 进入解压的目录
4. make 编译
5. make install 安装
6. rdis-server redis.conf 启动配置
7. redis-server 启动redis服务
ps :
后台运行 : 修改redis.conf里面 daemonize,no改为yes,然后重新启动
默认端口 : 6379
启动客户端 : redis-cli
~~~
## redis基本操作指令
~~~
1. keys pattern 返回匹配模式的所有键名
2. set key1(键名) 100(值) 设置
3. get key1(键名) 获取键的值
4. exists 判断键(多个键是否存在)
5. scan 每次调用之后,都会向用户 返回 一个 新的游标,用户在 下次迭代 时 需要使用 新游标 作为 scan命令的 游标参数, 以此来 延续之前的迭代过程
格式 : scan 参数(游标) math(相同) key*(匹配模式) count(条数)
6. randomkey 返回随机的键名
7. typekey 查询键的类型
8. object refcount key(键名) 查看引用多少次
9. object idletime key(键名) 查询此键多长时间没用
10. object encoding key(键名) 查询键的数据类型
11. rename key1(键名) key2(键名) 重命名
12. renamenx key1(键名) key2(键名) 重命名(比rename更加安全)
13. touch key(键名) 修改键名的访问时间
14. del key(键名) 删除键
15. unlink key(键名) 删除键(推荐使用此删除),可删除多个键
~~~
## redis 键过期操作
~~~
1.expire key(键名) 3(时间:秒) 设置时间,到了3s自动删除
2.expireat key(键名) 14020300(时间戳) 到了指定时间戳过期就删除
3.pexpire key(键名) 300(时间:毫秒) 设置时间,到了时间自动删除
4.ttl key(键名) 查询键的剩余时间
5.pttl key(键名) 返回剩余时间(单位毫秒)
6.persist key(键名) 取消过期时间,使键不被删除
~~~
## redis 键的序列化操作
~~~
1. dump key(键名) 序列化键,并返回序列化的值
2. restore key(键名) 0(过期时间) 序列化的值 replace(如果有值,覆盖)
3. sort key(键名) 对键名中的值进行排序
4. move key(键名) 1(库名) 移动到指定的库中(数据迁移)
5. select 1(库名) 选择库
6. migrate 网址 端口 键名 库名 毫秒 将数据传输到指定端口的数据库中
~~~
## redis 字符串类型
###应用场景 1.高速缓存 html片段 或 页面 2.高速缓存 关系型数据库 查询的数据结果 3.高速 缓存 会话控制数据 4.分布式锁 5.存储 设置固定格式 的 字符串序列 6.防止重复提交 7.统计 网站访问者 数量 8.每天注册用户数 9.限制 API 在某一时段的访问次数 10.用户签到 11.统计活跃用户 12.用户在线状态
### 基本命令
~~~
1. set key(键名) value(值) seconds(秒)[milliseconds(毫秒) nx(不覆盖) |(或) xx(直接覆盖) 键存在则值会覆盖
2. mset key(键名) value(值) key(键名) value(值) 同时设置多个键值对
3. setex key(键) 5(时间:秒) value(值) 设置键并指定生成时间
4. psetex key(键) 500(时间:毫秒) value(值) 设置键并指定生成时间
5. setnx key(键名) value(值) 如果键存在,设置失败,返回0
6. psetnx key(键名) value(值) 如果键存在,设置失败,返回0(设置多个键)
7. setrange key(键名) offset(位置) value(值) 修改或设置 offset位置 上的内容
~~~
###redis 字符串类型键的查询 1.get key(键名) 查询 key 的值
~~~
2.mget key(键名) key 查询多个 key 的值
3.getrange key(键名) start(开始) end(结束) 查询 key 的值,内容取决于 start 和 end
4.strlen key(键名) 查询 key 的长度
5.getset key(键名) value(值) 给 key 设置 值,并 返回旧值
~~~
###redis字符串类型键的计数操作 1\. incr key(键名) 键的值自增(值必须是整形)
~~~
2. incrby key(键名) num(数值) 键的值自增多少 或 自减多少(值必须是整形)
3. incrbyfloat key(键名) num(数值) 键的值 自增多少 或 自减多少(值可以是浮点型也可以是整形)
4. decr key(键名) 键的值自减
5. decr key(键名) num(数值) 键的值自减多少
应用场景
1. 统计网站的访问数量
2. 每天注册人数
3. 现在 API 在某一时刻的访问次数
4. 单号生成
5. 错误拦截
~~~
## redis 字符串类型键的二进制操作命令
~~~
1. setbit key(键名) offset(位置) value(值)(值只能是0 或 1) 设置或清除指定偏移量上的位(字节(长度))
2. getbit key(键名) offset(偏移量) 对key中的值获取指定偏移量上的位(字节(长度))
3. bitcount key(键名) start end 给 字符串进行计数,通过指定的 start 和 end,可以让计数只在特定的位(字节(长度))上进行
4. bitop operation destkey(新的键名) key(键名) key(键名) 将 一个 或 多个二进制位的 字符串 可以 进行位元操作,并将 操作结果 保存到 destkey 中
operation: 1. end 逻辑与
2. or 逻辑或
3. not 取反
4. xor 逻辑异或(真假为真,假真为真,假假为假,真真为假)
5. bitops key(键名) bit(0 或 1) 返回字符串里面第一个设置为 1 或 0 的bit位
~~~