热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

redis5.0数据结构与命令

1、redis支持如下5种数据结构数据结构说明简介String字符串key-valHash哈希filed-val映射表List列表双向链表Set集合element(元素无重复)So
1、redis 支持如下5种数据结构
数据结构说明简介
String字符串key-val
Hash哈希filed-val 映射表
List列表双向链表
Set集合element(元素无重复)
Sorted Set有序集合element+score(元素无重复+分值)
2、通用命令
命令作用时间复杂度
keys pattern查找所有符合匹配的keyO(n)
dbsize返回当前数据库的数量O(1)
flushdb清空当前数据库所有keyO(n)
flushall清空所有数据库所有keyO(n)
type key返回key的数据类型O(1)
rename key new_key修改key名称O(1)
exists key检查给定key是否存在O(1)
del key删除keyO(1)
expire key seconds给key设定过期时间O(1)
ttl key查看key剩余过期时间O(1)
persist key移除key剩余过期时间O(1)
3、String
命令作用时间复杂度
set key val设置key valO(1)
get key获取keyO(1)
del key删除keyO(1)
set key val xx更新key(不存在key时更新失败)O(1)
setnx key valkey不存在时设置keyO(1)
setex key val seconnds设置key并设置过期时间O(1)
mset key1 val1 key2 val2 ...批量设置keyO(n)
mget key1 key2 ...批量获取keyO(n)
incr key valkey自增1;key不存在,set key val后自增1O(1)
decr key valkey自减1;key不存在,set key val后自减1O(1)
incrby key nkey自增k;key不存在,set key val后自增kO(1)
decrby key nkey自减k;key不存在,set key val后自减kO(1)
getset key valset key val并返回旧的值O(1)
append key val给key追加值valO(1)
strlen key获取key长度O(1)
incrbyfloat key f给key增加小数O(1)
setrange key offset val用val从offset开始覆盖O(1)
getrange key start end获取指定区间的valO(1)
4、Hash
命令作用时间复杂度
hset key filed val设置key filed valO(1)
hget key filed获取key filedO(1)
hdel key filed删除key filedO(1)
hexists key filed检测key filed是否存在O(1)
hlen key获取key属性值个数O(1)
hsetnx key filedkey filed不存在时设置key filedO(1)
hincrby key filed nkey filed自增/自减(n可以为负数)O(1)
hincrbyfloat key filed fkey filed自增/自减(f可以为负数)O(1)
hmset key filed1 val1 filed2 val2 ...批量设置key filedO(n)
hmget key filed1 filed2 ...批量获取key filedO(n)
hgetall key获取key所有filed值O(n)
hgetkeys key获取key所有filed keyO(n)
hgetvals key获取key所有filed valO(n)
5、List
命令作用时间复杂度
lpush key val1 val2 ...从头部插入一个/多个valO(1~n)
lpop key移除并返回头部第一个元素O(1)
rpush key val1 val2 ...从尾部插入一个/多个valO(1~n)
rpop key移除并返回尾部第一个元素O(1)
lrang key start end返回指定区间元素O(s+n) s为偏移量, n=e-s
ltrim key start stop对列表进行修剪, 保留指定区间的元素O(n)
llen key获取key长度O(1)
lset key index val设置指定索引index valO(1~n)
linsert key before/after existing_val new_val在指定存在值之前/之后插入元素O(n)
lindex key position获取指定position元素O(1~n)
lrem key count val移除与count相等的valO(n)
lpushx key val1 val2 ...从头部插入一个/多个已存在列表的valO(1~n)
rpushx key val1 val2 ...从尾部插入一个/多个已存在列表的valO(1~n)
blpop key seconds阻塞式lpopO(1)
brpop key seconds阻塞式rpopO(1)
  • 常见场景
场景命令方法
栈(Stack)lpush + lpop
队列(Queue)lpush + rpop
固定列表(Capped Collection)lpush + ltrim
消息列表(Message Queue)lpush + brpop
6、集合
命令作用时间复杂度
sadd key val1 val2 ...向集合添加一个/多个元素(已存在元素则忽略)O(n)
smembers key获取所有集合元素O(n)
sismember key val1检测集合元素是否存在O(1)
srandmember key {count}随机获取指定个数集合元素(不会删除)O(1~n)
spop key随机移除一个集合元素并返回(会删除)O(1)
srem key val val1 ...删除集合元素O(1~n)
smove key key1 val将key集合中val移到key1集合O(1)
scard key获取集合数量O(1)
sinter key key1 ...获取集合交集O(n)
sunion key key1 ...获取集合并集O(n)
sdiff key key1 ...获取集合差集O(n)
sinterstore new_key key key1 ...获取集合交集并存储到新集合O(n)
sunionstore new_key key key1 ...获取集合并集并存储到新集合O(n)
sdiffstore new_key key key1 ...获取集合差集并存储到新集合O(n)
7、有序集合
命令作用时间复杂度
zadd key score val ...向集合添加一个/多个元素O(log(N) * M) M 元素个数
zcard key获取集合数量O(1)
zscore key val获取元素分数值O(1)
zcount key mix max获取分数区间[mix, max]集合元素数量O(log(N) + M)
zlexcount key mix max获取元素字典区间[mix, max]集合元素数量O(log(N) + M)
zincrby key score val集合元素val自增/自减分数scoreO(log(N))
zrank key val获取集合元素val的排名(从小到大)O(log(N))
zrevrank key val获取集合元素val的排名(从大到小)O(log(N))
zrange key start end [withscores]获取指定区间分数排名(从小到大)元素O(log(N) + M)
zrevrange key start end [withscores]获取指定区间分数排名(从大到小)元素O(log(N) + M)
zrangebyscore key min max [withscores]获取指定区间分数排名(从小到大)元素O(log(N) + M)
zrevrangebyscore key max min [withscores]获取指定区间分数排名(从大到小)元素O(log(N) + M)
zrangebylex key min max获取字典区间内集合元素O(log(N) + M)
zrem key val val1 ...删除集合元素O(log(N) * M)
zremrangebyscore key min max删除指定区间分数区间元素O(log(N) + M)
zremrangebyrank key start stop删除指定排名rank内元素O(log(N) + M)
zremrangebylex key min max删除字典区间内集合元素O(log(N) * M)
zinterstore new_key n key key1 ...获取集合交集存储到new_key(n 集合个数)O(N K)+O(M log(M))
zunionstore new_key n key key1 ...获取集合并集存储到new_key(n 集合个数)O(N)+O(M log(M))

PS: 更多文章请关注微信公众号:浮话

转:https://www.cnblogs.com/jie-hu/p/10927459.html



推荐阅读
  • 006_Redis的List数据类型
    1.List类型是一个链表结构的集合,主要功能有push,pop,获取元素等。List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,List的设 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
author-avatar
手机用户2502907463
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有