redis笔记
1.redis数据库,非关系型(redis:内存数据库,所有数据都放在内存中;MongoDB:数据都放在硬盘上,es:放在硬盘上,搜索更快。)
2.关系型:MySQL,DB2,oracle,postgresql,sqlserver,达梦(国产数据库),sql都是通用的,表和表之间的关联关系,事务支持的比较好,锁的机制。
3.redis是一个key-value存储系统。
-
key-value存储(类似内存中有个大字典)
-
支持5大数据类型:字符串,列表,字典(hash),集合,有序集合。
-
6.0之前是单线程,单进程。
-
redis是单线程为什么这么快?(以往的面试)
-
全内存操作(避免跟硬盘的IO)【最大的原因】
-
基于IO多路复用的模型
-
没有多线程多进程的切换
-
-
-
性能高,单机QPS高达10W,实际生产环境6W左右。
-
可以持久化
-
用C语言写的
-
C/S架构
4.作者不支持windows,io多路复用的模型,在linux使用的epoll在Windows上没有epoll,于是有一些第三方,基于源码改动了一些,让它可以在Windows上执行。
5.命令行启动和停止
-启动服务
redis-server 配置文件路径 # 启动
# 例如 redis-server redis.conf
-客户端连接
redis-cli # 连接上本地 127.0.0.1:6379
redis-cli -h 127.0.0.1 -p 6379
# shutdown
6.redis的客户端很多
-
redi-desktop-manager 图形化管理界面(类似navicat管理mysql)
-
QT平台: 专门用来写图形化界面的
-
pyqt:用Python代码在QT平台写图形化界面
-
7 在客户端写
set name lqz
get name
8.python中写
pip install redis
import redis
from redis import Redis
conn = Redis() # 什么都不写,连的就是本地6379
# 方式1--普通连接
# 获取name这个key对应的值
res = conn.get('name')
print(res)
conn.close()
# 方式2--连接池
pool = redis.ConnectionPool(max_connections=10) # 定义池子,指定大小
# 这个pool必须做出一个单例(只写一次)
conn = redis.Redis(connection_pool=pool)# 建立连接
res = conn.get('name')
print(res)
conn.close()
【注意】在python中,右键直接运行(以脚本的形式),是不允许相对导入的。(相对导入是指点.和点点..)
如果是以项目来运行是可以,用相对路径导入。
9.redis基本操作
1.设置值
# conn.set('age',16)
conn.set('name','刘德华')
2.取值
print(str(conn.get('name'),encode='utf-8')) # 如果忘记了decode就用str包裹一下
10.redis的连接池,为什么慢?
-
在首次慢,耗费资源
-
以后每次使用都是从连接池中拿一个连接
11.http应用层协议,基于tcp封装
-
ssh,http,ftp,websocket,dns--应用层协议
-
tcp/ip :socket,,抽象层,为程序员调用方便用的
-
UDP:DNS,用的少,目前就DNS用
12.mysql,redis:CS架构的软件
-
客户端和服务端通信--->网络--->基于TCP自封装的协议
-
老的软件用自封装的协议,因为那个时候网络资源紧张。
-
新的软件,例如es,docker虽然也是C/S架构,但是用http协议,符合restful规范,网络资源不紧张了。