非关系型数据库(NoSQL) - redis mongodb
更符合大数据的时代需求 - 处理速度快,性能较好 因为关系型数据库要保持一致性
文档数据库 - MongoDB(保存海量数据) / ElasticSearch
键值对数据库 - redis
列族数据库
图数据库
redis
将所有东西都放在内存
Redis - KV数据库 - 内存 - 单线程+异步I/O (多路I/O复用)
计算密集型应用 - 多进程 + 多线程
I/O密集型应用 - 单线程 + 异步I/O (协程 也叫微线程)
tornado / node.js 也是单线程 + 异步I/O
2008年 - LLOOGG - log (日志)
Mysql - Redis - Remote DIctionary Server 远程字典服务 - redis
Github / Twitter / Sina / tencent / baidu / meituan 这些网站都用了redis
冷数据(不经常使用) / 热数据(经常使用)
所以热数据适合放在redis中, 不要什么都放在redis, 不然内存爆炸
redis能做什么
1.高速缓存服务(用户经常访问的数据从数据库搬到内存)
2.实时排行榜
3.投票点赞
4.消息队列
yum install redis - 不是最近版本
源代码构建安装 make && make install
1.启动Redis服务器 - 存数据:
& - 在后台运行
--requirepass 设置的你的密码
-- 第一种启动
redis-server --port 1234 --requirepass 123456 --appendonly yes
-- 第二种
redis-server 配置文件路径(redis-5.0.4/redis.log &)
redis-server --requirepass 123456 > redis.log &
查看redis进程
ps -ef | grep redis
不想看到redis包
ps -ef | grep redis | grep -v grep
注意: 加入你忘了你设置的密码: 你可以用shutdown 来退出redis环境, 再执行
redis-server --requirepass 123456 > redis.log &
2.启动客户端:
a.连自己的
redis-cli
b.远程连接
redis-cli -h 主机ip地址 -p 端口
进入redis之后
主机: 端口> auth 密码(你刚刚设置的密码)
主机: 端口
ping 查看服务器是否连的上
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> ping
PONG
忘了命令?
不存在的 redis命令网址
哈希存储 - 性能非常好的存储方案 - set
obj --- 哈希函数---> 哈希码(散列码) ---> 对象在内存中存储的位置
性能好在 你通过算出哈希码就能知道有没有这个对象
MD5 - 是哈希函数中的算法
文件 ---> MD5 / SHA1 / SHA256 ---> 哈希码 (数字指纹/签名)
hash类型来保存对象方便
127.0.0.1:6379> hset stu1 id 1001
(integer) 1
127.0.0.1:6379> hset stu1 name wangdachui
(integer) 0
127.0.0.1:6379> hset sex male
(error) ERR wrong number of arguments for 'hset' command
127.0.0.1:6379> hset stu1 sex male
(integer) 1
127.0.0.1:6379> hset stu1 birth 1990-1-1
127.0.0.1:6379> hmset stu2 id 1002 name leixin sex girl birth 1997-10-1
OK
127.0.0.1:6379> hvals stu2
1) "1002"
2) "leixin"
3) "girl"
4) "1997-10-1"
127.0.0.1:6379> hgetall stu1
1) "name"
2) "wangdachui"
3) "id"
4) "1001"
5) "sex"
6) "male"
7) "birth"
8) "1990-1-1"
127.0.0.1:6379> type stu1
hash
=============================
验证hash密码
import hashlib
# TODO 用户密码要存入数据库的时候就要用hash码, 不能用明文的密码
# TODO 所以为什么官网那些注册密码的时候,要有数字,字母和字符,而不是纯数字,
# 就是害怕那些人通过hash反摘要来获取你的密码
# 验证hash密码
def main():
# md5(218比特)-目前已被破(但是对于我们足够了) / sha1 / sha256
digester = hashlib.md5() # bit是0或1 但是是2的18次方
with open('', 'rb') as f: # 有hash码的文件(python官网下载包就是)
# TODO 写两次读麻烦
# data = f.read(1024) # 写2的次方看是否是合格的程序员
# while data:
# digester.update(data)
# data = f.read(1024) # 又多一次无聊 用另外的方法
# TODO iter - python自带的迭代器
for data in iter(lambda: f.read(1024), b''):
digester.update(data)
# digest - 摘要
print(digester.hexdigest())
if __name__ == '__main__':
main()
=================================
读写分离
给别人当奴隶(你只能读,)
首先你先退出你的redis环境
redis-cli
auth 密码
ping
shutdown - 退出自己的环境
然后连接别人的redis环境
redis-server --slaveof ip(他的ip) 端口(一般都为6379) --re
quirepass 他的ip >redis.log &
主人可以通过
info replication - 查看多少人连接你
恢复你自己的主人身份
slaveof no one
ctrl + p 查看有哪些参数
ifconfig etho - 查看内网地址
终端解压压缩包
gunzip