redis笔记

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规范,网络资源不紧张了。

 

 

posted @ 2023-08-28 20:47  o蹲蹲o  阅读(3)  评论(0编辑  收藏  举报