NoSQL - 非关系型数据库(四大类) :
1 2 3 4 5 6
| 1 - 键值对数据库(- K - V) : Redis - 高速缓存 - 内存中运行 键值对特点 : 存储效率高 内存读写速率 : GHZ/s (G赫兹每秒) 2 - 文档数据库 Document : MongDB 3 - 图数据库 Graph : Neo4j(脉脉 - 挖掘人脉的APP 社交网站) 4 - 列簇数据库 : HBase - 数据归约
|
CAP定理(CAP theorem):
1 2 3 4 5 6
| Consistency : 一致性 Availability : 可用性 Partition tolerance : 分隔容忍 CAP理论 : C.A和P三个只能占上两个 传统应用金融类应用基本上考虑的是CA 互联网和移动联网时代的应用更注重AP
|
Redis :
确定是否安装redis
1 2
| redis-server --version redis-cli --version
|
安装redis命令:
1 2 3 4 5
| 一 : yum 安装 (版本会过低) 二 : 源代码构建安装: cd redis cd redis-3.2.12 make && make install
|
重要配置文件 : redis.conf(redis配置文件) / sentinel.conf(哨兵配置文件)
1.修改redis.conf配置文件
1 2 3 4 5 6 7 8 9 10 11
| 回到主目录 : cd ~ 输入pwd - 返回/root 用户主目录下复制一份redis.conf进行修改 : cp redis-3.2.12/redis.conf ./redis.conf 拷贝文件避免更改错误 vim打开配置文件 : vim redis.conf 命令模式Esc : 61gg - 去到当前行数 - 修改内网ip (行数 + gg --> 去到指定行数) :!ip address - 查看内网ip地址 61行 -- bind 172.27.0.11 绑定内网地址 84行 -- port 6379 默认端口 480行 -- requirepass 1qaz2wsx 删除注释,修改密码 179行 -- databases 16 默认redis下16个数据库
|
2. redis-server 服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 启动服务器 redis-server redis.conf 启动redis服务器 redis-sercer redis.conf & 后台运行 redis-server myredis.conf > myredis.log & 后台运行 关闭服务器 jobs --> fg %1 --> ^c 关闭redis服务器(自动保存) ps -ef | grep redis 查看进程 bg %1 : 后台运行进程 jobs : 查看进程状态 netstat -nap | grep redis : 查看端口 redis-cli -h 172.18.61.250 : 连接服务器 auth + 密码 : 输入密码命令 ping ---> PONG : 查看服务器是否连接成功 ping为命令, PONG为方法 kill 进程号 关闭redis服务器 不保存
|
3. redis-cli 客户端
1 2 3 4 5 6 7 8 9 10 11 12 13
| 设置缓存时间 : set username(键) lronlin(值) ex 30 拿到值 : get username 存活时间(time to live) : ttl username 空值 : nil 超级时间 : expire username 120 查看所有键 : keys * 保存数据 : save 阻塞保存数据 : bgsave 清空数据库 : flushdb 切换数据库 : select 3(数据库) 清空所有 : flushall 判断键是否存在 : exists 关掉服务器默认保存数据 : shutdown (nosave 不保存数据)
|
了解 :
1 2 3 4 5
| 1998 - 提出NOSQL概念 2008 - Big Data 大数据时代 No SQL No, SQL! Not Only SQL!
|
用命令kill多个进程(运维):
1 2 3 4 5 6 7 8
| awk - 工具 ps -ef | grep redis redis 10223 jdkf asjdkfjdkf ajsdfkdsaf asjdfkjd ps -ef | grep redis | awk '{print $2}' 10223 ps -ef | grep redis | awk '{print $2}' | xargs kill 命令别名 : alias shit='ps -ef | grep redis | awk '{print $2}' | xargs kill' shit
|
redis是键值对的数据库,有5种主要数据类型:
字符串类型(string),散列类型(hash),列表类型(list),集合类型(set,有序集合类型(zset)
几个基本的命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| KEYS * 获得当前数据库的所有键
EXISTS key [key ...] 判断键是否存在,返回个数,如果key有一样的也是叠加数
DEL key [key ...] 删除键,返回删除的个数
TYPE key 获取减值的数据类型(string,hash,list,set,zset)
FLUSHALL 清空所有数据库
CONFIG [get、set] redis配置
-inf 负无穷
+inf正无穷
|
字符串类型string
1 2 3 4 5 6 7 8 9 10 11 12
| # 追加 append username # 字符串长度 strlen username # 设置范围 setrange # 增加数量 incr number # 批量增加 incry number 100 # 拿到原来的设置现在的 getset username wangdachui
|
散列类型hash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| hash : 字典(嵌套字典 - 字典存字典) - 保存对象(优点) hset # 拿到所有(键值对) hgetall stu1(键值对) # 删除hash内存中的某个字段 hdel syu1 age # 判断哈希表里某个字段是否存在 hexists stu1 name # 获取所有字段 hkeys stu1 # 获取字段长度 hlen stu1 # 给键里的某个字段加值 hincry / hincryby / hincrybyfolat # 获取所有字段的值 hvalues
|
列表类型(list)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 列表 - 元素可重复 push : 放 pop : 取 # 往列表里放东西(lpush 从左往右放) lpush mylist apple orange apple peach grape # 取一个(从右往左取) lpop mylist #rpush(从右往左放) rpush mylist1 apple orange apple peach grape # (从左往右取) rpop mylist1 rpush mylist2 100 30 98 75 200 15 66 # 从左往右取一个范围(取下标) lrange mylist2 0 2 # 从右往左取 # 取所有(整个列表取完) lrange mylist2 0 -1 # 限定只取某个范围(截取元素 - 模拟栈与队列) ltrim mylist2 2 4
|
集合类型(set)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 集合自动去重 - 元素不可重复 sadd set1 apple orange apple apple grape # 查看集合所有元素 smembers set1 # 元素数量 scard set1 sadd set2 banana grape pitaya # 交集 sinter set1 set2 # 并集 sunion set1 set2 # 差集 sdiff set1 set2 / siddf set2 set1 # 根据哈希码取元素(取走) spop set1 # 随机取元素(未取走) srandmember set2 2 # 判断元素是否在集合中 sismemeber set2 grape
|
有序集合类型
1 2 3 4 5 6 7 8 9 10 11
| zset - 自动排序 - 有序集合方法(游戏动态排位) - 每个元素都有一个附加的值 # 放元素(元素前赋值) zadd players 100 zhao 85 qian 200 sun 120 lee 180 zhou # 取元素(从小到大顺序) zrange players 0 -1 # (从大到小顺序) zrevrange players 0 -1 # 查看元素数量 zcard players # 统计(范围)- 元素数量 zcount players 150 200
|
GED(地理位置)扩充:
1 2 3 4
| LBS - Location-Based Service : 基于位置的服务 # 经纬度范围(东经/ 北纬) geoadd 常用功能 : 送餐距离 / 打车范围 / 半径范围
|
事务:
1 2 3 4
| 开启事务:(银行系统) 放弃 : discard 提交 : exec 单线程 + 多路I/O复用(多个读写操作同时进行)
|
线程:
1 2 3 4 5 6 7 8 9 10 11 12
| 线程安全 : 线程不安全 : # 多个线程共享数据so easy / 只能用到CPU的一个核 # 多进程优点可以用到多核特性 多线程/多进程优点 : - 耗时间的任务扔到一个单独的线程或者进程里去做 1.改善性能, 程序执行更快 2.改善用户体验, 不让程序假死, 提升程序的性能 多线程/多进程缺点: 1.程序既不好写又不好调试 2.对其他运行的程序是不友好的 协程 : 微线程 :
|
总结:
1 2 3 4 5 6
| 网页图片 - string 保存对象 - hash 栈与消息队列 - list 排序 - set 动态排位 - zset ios - ged
|
Python中操作redis
1 2 3 4
| 1.服务器 : redis / mysql : 配内网 - 连公网 2.路由器配端口映射 : 公网 访问 内网 3.内网访问公网 - NAT -网络地址转换(会话) 4.公网访问内网 - 端口映射 - 请求走到路由器, 路由器通过端口绝顶将对该端口的请求映射到内网那一台主机上
|
redis主从复制
1 2
| 显示主从复制的信息 : info replication 奴隶变主人 : slave of no one
|
redis 正常操作中 - 读操作 : 写操作 (3 : 1)
读写分离 : 3台服务器读 - 1台服务器写 - 主从复制
sentinel哨兵:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| 从机与主机密码一致 master -- 主 -- 读写数据 info replication -- 查看状态信息 config slaves -- 从 -- 只能读不能写 更改 redis.conf 配置, 链接master 265行 slaveof 120.77.222.217 11223 272行 masterauth 密码 info replication -- 查看状态信息 master --> down 更改sentinel.conf配置 15 bind 内网地址 绑定地址 17 port 26379 服务器打开26379端口 70行 sentinel montor mymaster IP 端口号 1 --slaves 投票 73行 sentinel auth-pass mymaster 密码 bind 172.18.61.250 port 26379 sentinel monitor mymaster 120.77.222.217 11225 1 sentinel down-after-milliseconds mymaster 5000 sentinel auth-pass mymaster 1qaz2wsx 起哨兵 redis-sentinel sentinel.conf & 起redis服务器 redis-server myredis.conf --sentinel & 起客户端 redis-cli -h 120.77.222.217 -p 11223
|
集群
1 2 3
| 集群 - 多个节点当成一个节点来使用 单点故障 - 把单个节点搞成多个节点 集群之前配置 : Nginx/LVS负载均衡算法 : (RR)轮循 / (Hash)哈希 / (MCC)连接数 + Keepalived双活(热备份)
|
redis集群
1 2 3
| 安装语言环境: Ruby - 集群语言 Django / Flask 项目 用redis缓存(单机版) / 爬虫也会用到
|