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

查询方法如下

redis hotkeys redis hotkeys命令原理_数据结构

阻塞连接

基本语法:
阻塞等待元素出队

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,需要完成
  1. 开放6379端口
  2. 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
  • 推荐好友是两个人的朋友的差集