12 KiB
技术
Redis入门
概述
Redis是什么?
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
免费和开源!结构化数据库!
区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis能干什么?
1、内存存储、持久化、内存中是断电即失、所以持久化很重要(AOF\RDB )
2、效率高、高速缓存
3、发布订阅系统
4、......
特性
1、多样数据类型
2、持久化
3、集群
4、事务
5、......
与其他数据库对比
| 特性 | Redis | MySQL | MongoDB |
|---|---|---|---|
| 数据存储 | 内存 | 磁盘 | 磁盘 |
| 读写速度 | 极快 | 较慢 | 中等 |
| 数据结构 | 5+种 | 二维表 | 文档型 |
| 典型用途 | 缓存、计数器 | 持久化存储 | 日志、文档 |
基础知识
redis默认16个数据库。
默认使用第0个(使用select切换)。
127.0.0.1:6379> select 3
OK
数据库大小:dbsize
127.0.0.1:6379[3]> dbsize
(integer) 0
查看所有key
127.0.0.1:6379[3]> keys *
(empty array)
清空
127.0.0.1:6379[3]> flushdb//清空当前数据库
OK
flushall//清空全部数据库
Redis是单线程的!!
Redis是将所有数据全部存放在内存中的,所以说使用单线程操作效率就是最高的。
Redis数据类型
Redis-Key
代码练习
127.0.0.1:6379[3]> set name =chenchunxiao
OK
127.0.0.1:6379[3]> keys *
1) "name"
127.0.0.1:6379[3]> set age 21
OK
127.0.0.1:6379[3]> keys *
1) "name"
2) "age"
127.0.0.1:6379[3]> exists name
(integer) 1
127.0.0.1:6379[3]> move name 1
(integer) 1
127.0.0.1:6379[3]> keys *
1) "age"
127.0.0.1:6379[3]> set name xiaobao
OK
127.0.0.1:6379[3]> keys *
1) "name"
2) "age"
127.0.0.1:6379[3]> get name
"xiaobao"
127.0.0.1:6379[3]> expire name 10//设置过期时间
(integer) 1
127.0.0.1:6379[3]> ttl name//查看剩余时间
(integer) 0
127.0.0.1:6379[3]> get name
(nil)
127.0.0.1:6379[3]>type name//查看类型
数据类型
1. String(字符串)
特点: 最基本类型,最大512MB
| 命令 | 说明 | 示例 |
|---|---|---|
| SET | 设置值 | SET name "zhangsan" |
| MSET | 同时设置多个值 | MSET k1 v1 k2 v2 k3 v3 |
| GET | 获取值 | GET name |
| DEL | 删除键 | DEL name |
| SETNX | 不存在时设置 | SETNX name "lisi" |
| INCR | 自增1 | INCR age |
| INCRBY | 增加指定值 | INCRBY age 10 |
| EXPIRE | 设置过期时间(秒) | EXPIRE name 60 |
| TTL | 查看剩余过期时间 | TTL name |
| EXISTS | 判断某个key是否存在 | EXISTS key |
| APPEND | 追加字符串,如果当前key不存在,就相当于setkey | APPEND key1 "hell |
| GETRANGE | 截取字符串 | GETRANGE key1 0 3(截取字符串[0,3]) GETRANGE key1 0 -1(获取全部字符串 ) |
#对象
代码练习
127.0.0.1:6379[3]> set user:1 {name:xiaobao,age:2}
OK
127.0.0.1:6379[3]> mset user:1:name xiaobao user:1:age 2
OK
127.0.0.1:6379[3]> mget user:1:name user:1:age
1) "xiaobao"
2) "2"
#先get然后再set
代码练习
127.0.0.1:6379[3]> getset db redis
(nil)
127.0.0.1:6379[3]> get db
"redis"
127.0.0.1:6379[3]> getset db mongodb
"redis"
127.0.0.1:6379[3]> get db
"mongodb"
应用场景: 缓存、计数器、分布式锁
2. Hash(哈希)
特点: 键值对集合,适合存储对象
| 命令 | 说明 | 示例 |
|---|---|---|
| HSET | 设置字段 | HSET user:1 name "张三" age 20 |
| HGET | 获取字段 | HGET user:1 name |
| HGETALL | 获取所有字段 | HGETALL user:1 |
| HDEL | 删除字段 | HDEL user:1 age |
| HINCRBY | 字段自增 | HINCRBY user:1 age 1 |
应用场景: 存储对象(用户信息、商品信息)、购物车
3. List(列表)
特点: 有序可重复,双向链表
| 命令 | 说明 | 示例 |
|---|---|---|
| LPUSH | 左侧插入 | LPUSH list "a" "b" |
| RPUSH | 右侧插入 | RPUSH list "c" "d" |
| LPOP | 左侧弹出 | LPOP list |
| RPOP | 右侧弹出 | RPOP list |
| LRANGE | 获取指定范围 | LRANGE list 0 -1 |
| LLEN | 获取长度 | LLEN list |
代码练习
127.0.0.1:6379[3]> LPUSH LIST ONE
(integer) 1
127.0.0.1:6379[3]> LPUSH LIST TWO
(integer) 2
127.0.0.1:6379[3]> LPUSH LIST THREE
(integer) 3
127.0.0.1:6379[3]> lrange list 0 -1
(empty array)
127.0.0.1:6379[3]> LRANGE LIST 0 -1
1) "THREE"
2) "TWO"
3) "ONE"
127.0.0.1:6379[3]> RPUSH LIST RIGHT
(integer) 4
127.0.0.1:6379[3]> LRANGE LIST 0 -1
1) "THREE"
2) "TWO"
3) "ONE"
4) "RIGHT"
应用场景: 消息队列、最新消息列表、历史记录
4. Set(集合)
特点: 无序不可重复,支持集合运算
| 命令 | 说明 | 示例 |
|---|---|---|
| SADD | 添加元素 | SADD tags "java" "python" |
| SMEMBERS | 获取所有元素 | SMEMBERS tags |
| SISMEMBER | 判断是否存在 | SISMEMBER tags "java" |
| SREM | 删除元素 | SREM tags "python" |
| SINTER | 交集 | SINTER set1 set2 |
| SUNION | 并集 | SUNION set1 set2 |
| SDIFF | 差集 | SDIFF set1 set2 |
应用场景: 标签系统、共同好友、抽奖
5. ZSet(有序集合)
特点: 每个元素关联分数(score),按分数排序
| 命令 | 说明 | 示例 |
|---|---|---|
| ZADD | 添加元素 | ZADD rank 100 "张三" 90 "李四" |
| ZRANGE | 升序获取 | ZRANGE rank 0 -1 |
| ZREVRANGE | 降序获取 | ZREVRANGE rank 0 -1 |
| ZSCORE | 获取分数 | ZSCORE rank "张三" |
| ZINCRBY | 增加分数 | ZINCRBY rank 10 "张三" |
| ZRANK | 获取排名 | ZRANK rank "张三" |
应用场景: 排行榜、延迟队列
持久化
Redis提供两种持久化方式:
| 方式 | RDB | AOF |
|---|---|---|
| 原理 | 定时生成内存快照 | 记录每条写命令 |
| 文件 | dump.rdb | appendonly.aof |
| 恢复速度 | 快 | 慢 |
| 数据安全性 | 可能丢失最后一次快照 | 最多丢失1秒数据 |
| 默认 | 开启 | 关闭 |
事务
1. 事务特点
- Redis事务是一次性、顺序性、排他性的命令队列
- 不支持回滚:某条命令失败,其他命令仍会执行
- 通过
MULTI、EXEC、DISCARD、WATCH实现
2. 事务命令
| 命令 | 说明 |
|---|---|
MULTI |
开启事务 |
EXEC |
执行事务中的所有命令 |
DISCARD |
取消事务 |
WATCH key |
监视一个或多个键,事务执行前被修改则事务中断 |
UNWATCH |
取消监视 |
股票知识
AI金牛
一、功能模块
| 功能名称 | 定位 |
|---|---|
| 金牛起爆 | 捕捉即将启动主升浪的个股 |
| 进攻K线 | 识别强势突破的K线形态 |
| 小牛 | 筛选处于上升初期的个股 |
| 度牛尺 | 量化评估个股强弱程度 |
| 疯牛出栏 | 捕捉强势加速上涨的个股 |
二、各功能解读
1. 金牛起爆
含义: 找那些可能要涨的股票
技术特征:
- 长期横盘或小幅上涨后
- 成交量突然放大
- 出现突破性阳线
操作参考: 信号出现后关注,配合放量确认可考虑跟进
2. 进攻K线
含义: 找那些K线长得像要进攻的股票(比如大阳线)
常见形态:
| 形态 | 特征 | 含义 |
|---|---|---|
| 大阳线 | 涨幅>5%,实体长 | 多方强势 |
| 突破K线 | 突破前期高点 | 打开上涨空间 |
| 反包K线 | 阳线包住前日阴线 | 反转信号 |
3. 小牛
含义: 找那些刚有点起色的股票,涨得还不高
特征:
- 刚从底部启动
- 涨幅不大(通常<30%)
- 均线开始多头排列
操作参考: 适合低位布局,风险相对较小
4. 度牛尺
含义: 量化评估个股“牛气”程度的指标
可能的评估维度:
| 维度 | 权重 |
|---|---|
| 涨幅排名 | 30% |
| 成交量放大倍数 | 25% |
| 均线排列 | 20% |
| 相对强度 | 15% |
| 换手率 | 10% |
使用方式: 分数越高,代表个股越强势
5. 疯牛出栏
含义: 找那些已经涨疯了的股票,追高风险大
特征:
- 连续大阳线或涨停
- 成交量急剧放大
- 脱离原有轨道
风险提示: 涨幅已大,追高风险较高,适合短线激进策略
三、功能使用流程
text
第一步:金牛起爆 / 小牛 → 初筛关注标的
第二步:度牛尺 → 量化评分,优中选优
第三步:进攻K线 → 确认买入时机
第四步:疯牛出栏 → 捕捉加速段(高风险)
四、风险等级对比
| 功能 | 风险等级 | 适合人群 |
|---|---|---|
| 小牛 | 低 | 稳健型 |
| 金牛起爆 | 中 | 平衡型 |
| 进攻K线 | 中 | 波段操作 |
| 疯牛出栏 | 高 | 激进短线 |