Redis API的使用和理解

通用命令

通用命令

redis-cli -p 6382  # 打开客户端
  1. keys 键
127.0.0.1:6382> keys *  # 遍历所有key
127.0.0.1:6382> dbsize  # 计算key总数
127.0.0.1:6382> mset hello world hehe haha php good phe his
OK
127.0.0.1:6382> keys he*   #可以使用通配符匹配
1) "hehe"
2) "hello"
127.0.0.1:6382> keys he[h-l]*
  1. dbsize 计算key总数
127.0.0.1:6382> dbsize
(integer) 5
127.0.0.1:6382> sadd myset a b c d e
(integer) 5
127.0.0.1:6382> dbsize
(integer) 6
  1. exists key 判断key是否存在
127.0.0.1:6382> exists myset
(integer) 1
127.0.0.1:6382> exists myset1
(integer) 0
  1. del key [key,…] 删除key
127.0.0.1:6382> del myset phe
(integer) 2
127.0.0.1:6382> del php
(integer) 1
  1. expire key seconds 设置key过期时间
    ttl key 查看key的过期时间
    persist key 去掉key的过期时间
 127.0.0.1:6382> set hello world
OK
127.0.0.1:6382> expire hello 20
(integer) 1
127.0.0.1:6382> ttl hello
(integer) 15
127.0.0.1:6382> persist hello
(integer) 1
127.0.0.1:6382> ttl hello
(integer) -1  # -1代表key存在,且没有过期时间
  1. type key 数据类型
    以上6个命令的时间复杂度
    在这里插入图片描述
    注意:keys命令一般不在生产环境中使用
    那keys * 怎么用
    1. 热备从节点
    2. scan

数据结构和内部编码

在这里插入图片描述

字符串

结构和命令

在这里插入图片描述键为字符串,值为字符串,数字,位图,也可以将列表或字典序列化成为字符串存储,数据最大可为512MB,但是建议不宜超过100kB,否则会对其他命令造成影响。
缓存命令在这里插入图片描述
** 计数命令**在这里插入图片描述
在这里插入图片描述

127.0.0.1:6382> exists php
(integer) 0
127.0.0.1:6382> set php good
OK
127.0.0.1:6382> setnx php bad
(integer) 0
127.0.0.1:6382> set php best xx
OK
127.0.0.1:6382> get php
"best"
127.0.0.1:6382> exists lua
(integer) 0
127.0.0.1:6382> set lua hehe xx
(nil)

批量操作
在这里插入图片描述批量操作可以省去大量的网络时间

快速实战

记录网站每个用户个人主页的访问量?

 incr userid:pageview(单线程:无竞争)

缓存视频的基本信息,数据源在MySQL(伪代码)
在这里插入图片描述

内部编码
查漏补缺

在这里插入图片描述
在这里插入图片描述

哈希

特点

在这里插入图片描述一个key可以有多个属性和值
特点:

  1. Mapmap结构,map里又包含一个map
  2. field不能相同,value可以相同
hash vs string

在这里插入图片描述

重要API

以h开头
在这里插入图片描述

127.0.0.1:6382> hset user:1:info age 23
(integer) 1
127.0.0.1:6382> hset user:1:info name gfgf
(integer) 1
127.0.0.1:6382> hgetall user:1:info  # 获取全部属性
1) "age"
2) "23"
3) "name"
4) "gfgf"
127.0.0.1:6382> hdel user:1:info age
(integer) 1
127.0.0.1:6382> hgetall user:1:info
1) "name"
2) "gfgf"

在这里插入图片描述

127.0.0.1:6382> hexists user:1:info name
(integer) 1
127.0.0.1:6382> hlen user:1:info
(integer) 1

在这里插入图片描述
在这里插入图片描述

快速实战

记录网站每个用户个人主页的访问量?

 hincrby user:1:info pageview count

缓存视频的基本信息,数据源在MySQL(伪代码)
在这里插入图片描述

查缺补漏

在这里插入图片描述

列表

特点
  1. 有序
  2. 可以重复
  3. 左右两边可以插入弹出
    在这里插入图片描述
API

以L开头

  1. 右边插入
    在这里插入图片描述
  2. 从左边插入
    在这里插入图片描述
  3. 插入
    在这里插入图片描述
  4. 删除
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述保留索引范围内的值

  5. 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
查缺补漏

在这里插入图片描述
在这里插入图片描述

单线程架构

redis每次只执行一条命令,执行完之后才会执行下一条命令

单线程为什么这么快?

  1. 纯内存(主要原因)
    redis数据都是放在内存中的,内存的执行速度非常快
  2. 非阻塞IO
    redis使用像epoll这样的模型,作为I/O多路复用的实现,将epoll的连接和关闭转化为自己的事件,不在网络IO上浪费过多的时间。
  3. 避免线程切换和竞态消耗

使用单线程要注意什么?

  1. 一次只运行一条命令
  2. 拒绝长(慢)命令(一条内存命令的响应时间为100ns,如果一条命令太过占时,会影响之后的命令)
  3. 其实不是单线程
    fysnc file descreptor ,close file descreptor等命令会有独立的线程来做
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值