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缓存(单机版) / 爬虫也会用到

最后更新: 2018年06月30日 09:16

原始链接: http://yoursite.com/2018/06/28/redis常用命令/

× 请我吃糖~
打赏二维码