返回顶部
首页 > 资讯 > 数据库 >redis 详解(2)API
  • 287
分享到

redis 详解(2)API

redis详解(2)API 2022-01-10 05:01:18 287人浏览 绘本
摘要

通用命令 通用命令 命令 说明 时间复杂度 keys [pattern] 遍历所有 key O(n) dbsize 计算 key 的总数 O(1) del key [key...] 删除指定 key-value O(1

通用命令

通用命令

命令 说明 时间复杂度
keys [pattern] 遍历所有 key O(n)
dbsize 计算 key 的总数 O(1)
del key [key...] 删除指定 key-value O(1)
exist key 检查 key 是否存在 O(1)
expire key seconds key 在 seconds 秒后过期 O(1)
type key 返回 key 的类型 O(1)
ttl key 查看 key 剩余的过期时间 O(1)
persist key 去掉 key 的过期时间(永不过期) O(1)

数据结构和内部编码

Redis object

  • 数据类型(type) string hash list set sorted set
  • 编码方式(encoding) raw int ziplist linkedlist HashMap intset
  • 数据指针(ptr)
  • 虚拟内存(vm)

线程架构

单线程为什么快

  • 纯内存
  • 非阻塞 io
  • 避免线程切换和竞态切换

注意

  • 一次只运行一条命令
  • 拒绝长(慢)命令 keys,flushall,flushdb,slow lua script,muti/exec,operate big value(colletion)
  • 实际上不是真正的单线程 fysnc file descriptor close file descriptor

字符串(最大限制 512M)

结构

key value
ke val
count 1
bits 1011101

场景

命令

命令 说明 时间复杂度
get key 获取 key 对应的 value O(1)
set key value 不管key是否存在,设置 key-value O(1)
setnx key value key不存在,才设置 O(1)
set key value xx key存在才设置 O(1)
del key 删除 key-value O(1)
incr key key自增1,如果key不存在,自增后get(key)=1 O(1)
decr key key自减1,如果key不存在,自减后get(key)=-1 O(1)
incrby key k key自增k,如果key不存在,自增后get(key)=k O(1)
decrby key k key自减k,如果key不存在,自减后get(key)=-k O(1)
mget key1 key2 key3... 批量获取key的value,原子操作 O(n)
mset key1 value1 key2 value2 .. 批量设置key-value O(n)
getset key newvalue set key newvalue并返回旧value O(1)
append key value 将value追加到旧value O(1)
strlen key 返回字符串长度 O(1)
incrbyfloat key float 增加key对应的值float O(1)
getrange key start end 获取字符串指定下标所有值 O(1)
setrange key index value 设置指定下标所有对应的值 O(1)

哈希

结构

key field value
user:1 name tom
age 20
sex male

命令

命令 说明 时间复杂度
hget key field 获取hash key对应field的value O(1)
hset key field value 设置hash key对应field的value O(1)
hdel key field 删除hash key对应field的value O(1)
hexists key field 判断hash key是否有field O(1)
hlen key 获取hash key field数量 O(1)
hmget key field1 field2... 批量获取hash key对应一批field的value O(n)
hmset key field1 value1 field2 value2... 批量设置hash key对应一批field的value O(n)
hgetall key 返回hash key对应所有的field和value O(n)
hvals key 返回hash key对应所有field的value O(n)
hkeys key 返回hash key对应所有field O(n)
hmset key field1 value1 field2 value2... 批量设置hash key对应一批field的value O(n)
hsetnx key field value 设置hash key对应的field的value(如field已经存在,则失败) O(1)
hincrby key field intcounter hash key对应的field的value自增intcounter O(1)
hincrbyfloat key field floatcounter hincrby浮点数版本 O(1)

方案比较

string v1

  • user:1=> {"name":tom,"age":20}

string v2

  • user:1:name=>tom
  • user:1:age=>20

hash

  • user:1=>name=>tom
  • user:1=>age=>20
命令 优点 缺点
string v1 编程简单,节约内存 序列化操作开销大,设置属性要操作整个数据
string v2 直观,可以部分更新 内存占用较大,key较分散
hash 直观,节省空间,可以部分更新 编程稍微复杂,ttl不好控制

列表

结构

key elements
user:1:msg a,b,c,d

特点

  • 有序
  • 可以重复
  • 左右两边插入弹出

命令

命令 说明 时间复杂度
rpush key value1 value2... 从列表右端插入值(1-N个) O(1-n)
lpush key value1 value2... 从列表左端插入值(1-N个) O(1-n)
lpop key 从列表左侧弹出一个value O(1)
rpop key 从列表右侧弹出一个value O(1)
linsert key before/afer value newValue 在list指定的值前/后插入newValue O(n)
lrem key count value 根据count值,从列表删除所有value相等的项 O(n)
ltrim key start end 按照索引范围修剪列表 O(n)
lrange key start end 获取列表指定索引范围所有value O(n)
lindex key index 获取列表指定索引的value O(n)
llen key 获取列表长度 O(1)
lset key index newValue 设置列表指定索引值为newValue O(n)
blpop key timeout lpop阻塞版本,timeout是阻塞超时时间,timeout=0为永不阻塞 O(1)
brpop key timeout rpop阻塞版本,timeout是阻塞超时时间,timeout=0为永不阻塞 O(1)

lrem key count value

  • count>0,从左到右删除最多count个value相等的项
  • count<0,从右到左删除最多math.abs(count)个value相等的项
  • count=0,删除所有value相等的项

应用场景

  • lpush+lpop=stack
  • lpush+rpop=queue
  • lpush+ltrim=capped collection
  • lpush+brpop=message queue

集合

结构

key elements
user:1:follow music,sport,read

特点

  • 无序
  • 无重复
  • 集合间操作

命令

命令 说明 时间复杂度
sadd key element 向集合key添加element(如果已存在,添加失败) O(1)
srem key element 删除集合key中的element O(1)
scard key 计算集合大小
sismember key element 判断element是否在集合中
srandmember key count 从集合中随机挑count个元素,不会破坏家伙
spop key 从集合中随机弹出一个元素,元素从集合移除
smembers key 获取集合所有元素
sdiff key1 key2 差集
sinter key1 key2 交集
suNIOn key1 key2 并集
sdiff/sinter/sunion + store desTKEy 将差集、交集、并集结果报错在destkey中

应用场景

sadd=tagging spop/srandmember=randon item sadd+sinter=social graph

有序集合

结构

key score value
user:rank 1 tom
user:rank 5 peter

比较

有序集合 集合
无重复元素 无重复元素
有序 无序
element+score element
有序集合 列表
无重复元素 有重复元素
有序 有序
element+score element

命令

命令 说明 时间复杂度
zadd key score element 添加score和element(可以多对) O(logN)
zrem key element 删除元素(可以多个) O(1)
zscore key element 返回元素分数 O(1)
zincrby key increScore element 增加或减少元素分数 O(1)
zcard key 返回元素总个数 O(1)
zrange key start end [WITHSCORES] 返回指定索引范围内的升序元素[分值] O(logN+m)
zrangebyscore key minScore maxScore[WITHSCORES] 返回指定分数范围内的升序元素[分值] O(logN+m)
zcount key minScore maxScore 返回有序集合内在指定分数范围内的个数 O(logN+m)
zremrangebyrank key start end 删除指定排名内的升序元素 O(logN+m)
zremrangebyscore key minScore maxScore 删除指定分数内的升序元素 O(logN+m)

欢迎扫描下方二维码,持续关注:

互联网工程师(id:PHPstcn),我们一起学习,一起进步

您可能感兴趣的文档:

--结束END--

本文标题: redis 详解(2)API

本文链接: https://lsjlt.com/news/3217.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • redis 详解(2)API
    通用命令 通用命令 命令 说明 时间复杂度 keys [pattern] 遍历所有 key O(n) dbsize 计算 key 的总数 O(1) del key [key...] 删除指定 key-value O(1...
    99+
    2022-01-10
    redis 详解(2)API
  • ansible python api 2
     最近想利用python来调用anbile来实现一些功能,发现ansible的api已经升级到了2.0,使用上比以前复杂了许多。 这里我参考了官方文档的例子,做了一些整改,写了一个python调用ansible的函数,执行过程中输出执行结果...
    99+
    2023-01-31
    ansible python api
  • Redis系列--2、Redis配置
    1、Redis配置在Redis有配置文件(redis.conf)可在Redis的根目录下找到。可以通过Redis的CONFIG命令设置所有Redis的配置。2、配置文件说明:1. Redis默认不是以守护进...
    99+
    2024-04-02
  • MySQL-2(14000字详解)
    一: 数据库约束 在 MySQL 中,约束是用于限制数据库表中数据的规则或条件。它们是为了保证数据的完整性和一致性。MySQL 提供了多种约束类型,包括 NOT NULL、UNIQUE、DEFAULT...
    99+
    2023-10-12
    mysql 数据库
  • GNS3使用详解2
            gns3的基本使用前面我已经写过一篇文章了,这次我在详细补充几点内容,第一gns3如何模拟juniper,第二gns3如何模拟ids。        juniper 学网络的人应该都知道这个,但是接触这个的人却不多,本人也是...
    99+
    2023-01-31
    详解
  • Android之PreferenceActivity应用详解(2)
    看到很多书中都没有对PreferenceActivity做介绍,而我正好又在项目中用到,所以就把自己的使用的在这总结一下,也方便日后查找。 PerferenceActivity...
    99+
    2022-06-06
    Android
  • Java类与对象详解(2)
      this引用 为什么要有this引用 先来看一个日期类的例子: ​public class Date { public int year; public int month; public int day; /...
    99+
    2023-09-01
    java 开发语言
  • Android Camera2 —CameraManager API详解
    一、CameraManager类概述 CameraManager是用于检测、表征和连接到 CameraDevices 的系统服务管理器。 CameraManager 是一个负责查询和建立相机连接的系统服务,它的功能不多,这里列出几个 Cam...
    99+
    2023-09-20
    android
  • 详解PHP反射API
    PHP中的反射API就像Java中的java.lang.reflect包一样。它由一系列可以分析属性、方法和类的内置类组成。它在某些方面和对象函数相似,比如get_class_vars(),但是更加灵活,而且可以提供更多信息。反射API也可...
    99+
    2023-09-02
    php 开发语言
  • redis有哪些api
    这篇文章将为大家详细讲解有关redis有哪些api,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、Redis Client介绍1.1、简介Jedis Client是Re...
    99+
    2024-04-02
  • C#中的LINQ to Objects详解(2)
    目录四、Linq和反射五、LINQ 和字符串1、LINQ 和文件目录实例1、如何查询具有指定属性或名称的文件实例2、如何按照扩展名对文件进行分组实例3、如何查询一组文件夹中的总字节数...
    99+
    2024-04-02
  • 详解C++之类和对象(2)
    目录一.构造函数1.构造函数的定义:2.构造函数的特征:3.构造函数的实现:3.1.系统默认的构造函数3.2无参构造3.3 带参构造二 析构函数1.析构函数的定义2.析构函数的特征三...
    99+
    2024-04-02
  • redis 4.0 info详解
    redis_version:4.0.2                       &nbs...
    99+
    2024-04-02
  • redis的2种持久化方案深入讲解
    前言 Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(dif...
    99+
    2024-04-02
  • Redis详解(一)冰叔带你了解Redis
    Redis 是一种基于 键值对 的 NoSQL 数据库。与很多键值对数据库不同,Redis 提供了丰富的 值数据存储结构,包括 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、bitmap(...
    99+
    2020-02-04
    Redis详解(一)冰叔带你了解Redis
  • Redis入门(2) - 数据类型
    Redis中的数据类型 字符串 散列 列表 集合 有序集合 Redis中的数据类型 Redis定义了这几种数据类型: string(字符串) hash(散列) list(列表) set(集合) zset(有序集合) 后面会介...
    99+
    2017-07-10
    Redis入门(2) - 数据类型
  • Replica sets架构复制集(2)详解
    接上文,我们已经搭建成功了,下面是我们查看日志等详细解读 我们可以通过执行“db.printCollectionStats()”命令查看到操作日志的一些基本信息,如大小,日志启动时间等,查看primary...
    99+
    2024-04-02
  • 详解python日期时间处理2
    目录开发中常用的日期操作还有哪些?我们看看这两个模块。时间处理中的类型转换:struct_time vs str时间与字符串转换总结前篇我们稍微学习了Python中时间的获取,这次继...
    99+
    2024-04-02
  • 详解C语言初阶基础(2)
    目录1.选择语句(if)2.循环while循环for循环do-while循环补充总结1.选择语句(if) 我们先不讲switch,后面会补充。先来对简单地if进行了解。 我们已经知道...
    99+
    2024-04-02
  • redis 详解(1)特性
    redis 是什么 开源的基于键值的存储服务系统,支持多种数据结构,高性能、功能丰富 redis 特性 速度快(10w OPS) 数据存储内存中 C 语言编写 单线程模型 持久化 redis 所有数据保存在内存中,对数据更新将异步...
    99+
    2016-08-15
    redis 详解(1)特性
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作