redis介绍
- redis 是 Remote Dictionary Service 的简称;也是远程字典服务;
- 节点 通过tcp与redis建立连接交互
- 请求回应模型
- redis是一种内存数据库:数据都在内存中。
- redis是一种kv数据库:
- 存储方式
- 操作方式
- redis是一种数据结构数据库
- string :以长度作为分隔符,而非’\0’,二进制安全字符串,可存储tcp数据、图片、视频
- list
- hash
- zset
- set
- stream
- hyperloglog
- 怎么设计key和value?
- string
- 单个功能一个key:取有意义的key
- 相同功能多个key:以冒号作为分割来分组
- redis是一个中间件,是可以直接启动的
- redis抽象层次
- 命令的参数含义
- 具体返回值
- redis没有创建数据结构的命令,而是设置或添加时创建数据结构
- redis有删除kv的命令,但是v中没有元素的时候自动删除
- 通过组合数据结构实现功能
- hash + list
- hash+set
- hash +zset
具体使用
value为hashtable
那么插入元素操作如下
hset roleinfo:10001 age 30
其中roleinfo:10001为key,age为field,30位value
查询方法如下
阻塞连接
基本语法:
阻塞等待元素出队
BRPOP key timeout # 超时时间 + 延时队列(为0就是一直阻塞)
会话一输入 brpop list 0 ,此时会阻塞住
再复制一个会话,输入lpush list haha,此时刚刚阻塞住的窗口就会出队成功。
通过命令组合实现数据结构
栈
LPUSH + LPOP
# 或者
RPUSH + RPOP
队列
LPUSH + RPOP
# 或者
RPUSH + LPOP
阻塞队列
LPUSH + BRPOP
# 或者
RPUSH + BLPOP
杂项
- 要让windows主机上的redis可视化工具连接ubuntu上的redis-server,需要完成
-
开放6379端口
-
redis.config
文件进行如下修改# 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0 bind 0.0.0.0 # 守护进程,修改为yes后即可后台运行 daemonize yes # 密码,设置后访问Redis必须输入密码 requirepass 123456
- 遇到(error) NOAUTH Authentication required.则输入
auth 密码
-
柔性数组特点
-
放在结构体内,结构体free,该数组也自动free
-
不占空间
-
分配空间方式
malloc(sizeof(sdshdr16) + 64); //表示buf的大小为64B
-
-
key越来越多,效率会降低吗?
不会,因为hash是O(1)复杂度,代价:扩容缩容渐进式hash -
推荐好友是两个人的朋友的差集