1. Redis字符串(String)

String是Redis最基本的value类型,一个key对应一个value。

String类型是二进制安全的,所有Redis的String对象可以包含任何数据,如图片或序列化的对象。一个Redis中字符串的value最多可以是512M

1.1 常用命令

set key value:创建键值对,如果已经存在则会将之前的覆盖。

setnx key value:只有当key不存在时,才会创建键值对。

get key:得到key的值。

append key value:将value添加到key的尾部,仅限string类型操作

strlen key:获得key的value长度。

incr key 步长:为key的value增加步长,默认增加1,仅当value为int型。incr操作具有原子性,与事务的原子性不同,redis中的原子性指不会被线程调度机制打断操作

decr key 步长:为key的value减少步长,默认减少1,仅当value为int型。

mset key value ... key value:创建多个键值对,如果已经存在则会将之前的覆盖。

msetnx key value ... key value:创建多个键值对,只有当key都不存在时,才会创建键值对。

getrange key 起始位置 结束位置:获得key的value中一定范围内的值。

setrange key 起始位置 value:从key的值中的起始位置换为value。

getset key value:设置新的值替换旧的值,并且会返回旧的值。

1.2 数据结构

Redis中string的数据结构为简单动态字符串,是可以修改的字符串,内部结构实现类似于java的ArraryList,采用预分配冗余空间的方式来减少内存的频繁分配。当字符串长度大于预分配的空间时,会对现有的空间进行扩容,最大为512M。

2. Redis列表(List)

Redis中list的特点是一键多值,即一个key可以有多个value。Redis的列表是简单的字符串列表,按照插入顺序排序,可以将元素添加到列表的头部或者尾部。

它的底层其实是一个双向链表,对两端的操作性很高,通过索引来操作中间的节点性能很差。

2.1 Redis列表(List)常见命令

lpush/rpush key value1 vlaue2 value3... :从左边/右边插入多个值。

lpop/rpop key:从key的左边/右边吐出第一个值,当值被取光时,key也同时消失。

rpoplpush key1 key2:从key1的右边吐出第一个值插入到key2的左边。

lrange key start stop:按照索引下标获得元素(从左往右),如果将start stop设置为0 -1则可取得key中的所有值。

lindex key index:从左获得key的第index个元素。

llen key:获得key的长度。

linsert key before value value1:以从左的顺序,在key中value之前插入value1。

lrem key num value:以从左的顺序,在key中删除num个value。

lset key index value:以从左的顺序,将key中第index个数据替换为value。

2.2 Redis列表的数据结构

Redis中List的数据结构为快速链表quicklist。当列表元素较少时会使用一块连续的内存存储,这个结构就是ziplist,也就是压缩列表,它将所有的元素挨在一起存储,分配一块连续的内存。当链表的数据较多时,通过双指针将多个压缩列表连接起来组成一个快速链表

Redis将链表与ziplist结合起来组成quicklist,这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。

3. Redis集合(Set)

Redis中的集合Set是类似于list的列表,不过Set中可以自动去重,且无序。Set中提供了可以判断某个成员是否在集合中的重要接口,这是list所不能提供的。

Redis的set是String类型的无序集合,它的底层是一个value为null的hash表,所以增删查的s复杂度都是O(1)。

3.1 Redis集合(Set)常见命令

sadd key value1 value2...:将一个或多个member成员加入到集合key中,已存在的member元素将被忽略。

smember key:取出key中的所有值。

sismember key value:判断key中是否存在value,若存在则返回1,不存在则返回0。

scard key:返回该集合中的元素数量。

srem key value1 value2...:删除key中的value元素。

spop key:随机从key中弹出一个值,若弹出之后,key为空,则key消失。

srandmember key n:随机从key中取出n个值,但不会删除这些值。

sinter key1 key2....:返回两个或多个集合的交集。

sunion key1 key2....:返回两个或多个集合的并集。

sdiff key1 key2....:返回两个或多个集合的差集,key1中有而其他集合中没有的元素。

3.2 Redis集合的数据结构

Redis中Set集合的数据结构是dict字典,字典是使用哈西表来实现的,所有的value都指向同一个内部值。

4. Redis哈希(Hash)

Redis中hash是一个键值对集合,是String类型的field与value的映射表,hash特别适合存储对象。

通俗来讲,hash使用键值对来存储对象,而其中value是由field与value1组成的另一个键值对。例如,现用hash存储user的信息,user作为key,name与zhangsan这个整体被当做value,以field与value1的形式存储,其中field为name,value1为zhangsan。

4.1 Redis哈希(Hash)常用命令

hset key field value:给key集合中的feild键赋值value。

hget key field value:从key集合的feild中取出value。

hmset key1 field1 value1 key2 field2 value2:创建多个hash。

hexists key field:集合key中是否存在field。

hkeys key:返回集合key中所有的field。

hvals key:返回集合key中所有的value。

hincreby key field num:给集合key中field对应的value增加num。

hsetnx key field value:给key集合中的field置为value,当且仅当field不存在时成功。

4.2 Redis哈希的数据结构

Hash类型对应的数据结构有两种:ziplist(压缩列表)hashtable(哈希表)。当field与value长度较短时且个数较少时,使用ziplist,否则使用hashtable。

5. Redis有序集合(Zset)

Redis的有序集合Zset(Sorted Set)与普通集合非常相似,是一个没有重复元素的字符串集合。不同之处在于集合中的每一个元素都关联了一个评分(score),使集合可按照这个评分进行从高到低的排序。集合中的成员是唯一的,但是评分可以是不唯一的。

5.1 Redis有序集合(Zset)常用命令

zadd key score1 value1 score2 value2...:创建zset集合,并为相应的key赋值score。

zrange key start end (withscores):返回key集合中下标在start与end之间的value,可通过添加withscores来同时输出value对应的score。

zrangebyscore key score1 score2 (withscores):返回key集合中score在score1 与score2之间的value,默认为升序

zrevrangebyscore key score1 score2 (withscores):降序返回key集合中score在score1 与score2之间的value。

zincrby key num value:为集合key中value的score增加num。

zrem key value:删除集合key中的value及对应的score。

zcount key score1 score2:统计集合key中score在score1与score2之间的value数量。

zrank key value:返回集合key中value的score按照升序的排名。

5.2 Redis有序集合数据结构

Zset底层使用两种数据结构:

  • Hash表:哈希表的作用就是关联元素value与权重score,保障value的唯一性,可以通过value找到score。

  • 跳跃表:跳跃表的作用在于给元素value排序,根据score的范围获取元素列表。跳跃表的算法原理如下图所示。

Redis五大数据类型及常见命令相关推荐

  1. Redis五大数据类型常用命令

    Redis五大数据类型 Redis-Key 1.查看当前数据库的key keys * #返回当前数据库下的所有key 2.设置key set key value 3.获取key的value get k ...

  2. note.. redis五大数据类型

    redis 五大数据类型使用 nosql介绍,由来 什么是nosql 阿里巴巴的架构 nosql 四大分类 redis入门 概述 redis 安装 (docker) 基础的知识 redis五大数据类型 ...

  3. (一)Redis——五大数据类型及基础知识

    一位爱好技术的橘右京的哥哥橘左京 Redis--五大数据类型及基础知识(一) Redis 1.Redis命令 1.1 常用String命令 1.2 常用List命令 1.3 常用Hash命令 1.4 ...

  4. Redis五大数据类型(字符串对象(string)、列表对象(list)、哈希对象(hash)、无序集合(set)和Sorted Set数据类型(zset有序集合))

    Redis五大数据类型 一.String(字符串)数据类型 1.SET/GET/APPEND/STRLEN 2.INCR/DECR/INCRBY/DECRBY 3.GETSET 4. SETEX 5. ...

  5. Redis五大数据类型与使用场景汇总!!(含完整实战案例,建议收藏)

    本文全面讲述了Redis的五大数据类型和使用场景,含完整实战案例,强烈建议收藏!! 大家好,我是冰河~~ 最近面试跳槽的小伙伴有点多,给我反馈的面试情况更是千差万别,不过很多小伙伴反馈说:面试中的大部 ...

  6. Redis和Git的常见命令

    Redis和Git的常见命令 key命令 String类型命令 list类型命令 set 类型命令 hash 类型命令 zset类型命令 Git 常 使 用 的 命 令 Git 分支常见命令 Gith ...

  7. 【数据存储】【Redis】第三章: Redis五大数据类型实现原理

    Redis五大数据类型实现原理 对于五大数据类型(String,list,Hash,Set,Zset)实现原理,Redis在底层用到了多种数据结构,通过数据结构来实现键值对,将数据结构创建了一个对象r ...

  8. 【Redis五大数据类型】

    Redis五大数据类型 前言 一.字符串String 1. set / get / del / append / strlen 2. incr / decr / incrby / decrby 3. ...

  9. Redis五大数据类型

    Redis五大数据类型 Redis数据类型 key + Østring Øset Ølist Øhash Øzset Redis五大数据类型 --Key Ø keys * • 查询当前库的所有键 Ø ...

最新文章

  1. Nature Human Behavior:大脑对不公平的反应有助预测抑郁症
  2. linux管理员工具
  3. oracle11g导出表时会发现少表,空表导不出解决方案。
  4. jQuery Autocomplete
  5. 怎么画韦布尔分布_手机按键寿命测试的样本数量怎么定?一文看懂 简述威布尔分布及其应用...
  6. Cloud一分钟 |乐视系近亿元资产被查封;快手推出新社区产品,取名“蹦迪”;高通:已终止收购恩智浦的交易...
  7. elastic search与postgresql的数据同步
  8. 电商设计师(美工)必备的素材网站|优图!
  9. python程序异常实例_Python werkzeug.exceptions方法代码示例
  10. AD教程系列 | 5 - 绘制原理图
  11. C语言 | 条件运算符
  12. 二月,劝程序员不要跳槽!
  13. 6到飞起, 360儿童手表三款新品即将发布
  14. 微众银行客服电话是95384 认准官方的人工客服电话
  15. 压力位和支撑位的理解。
  16. Windows server 2019 网卡互联网检测服务
  17. 传统企业培训与线上直播培训大PK
  18. 蚂蚁金服蒋国飞:区块链商用时代正在加速到来
  19. GaussDB架构(下)
  20. R语言创建新变量方法

热门文章

  1. JAVA家政服务管理系统毕业设计 开题报告
  2. 基于身高与体重数据集与Auto数据集分别进行线性回归和Lasso回归(代码逐行讲解,超细节)
  3. Java常用设计模式(三)
  4. 基于matlab的pwm波形仿真与分析,基于Matlab的单相电压型PWM整流电路仿真与设计
  5. Kubernetes 学习总结(25)—— Kubernetes 中的 pod 与容器的区别和联系
  6. 区块链学习笔记一 BTC密码学原理
  7. ## 7-7 大炮打蚊子 (15 分)
  8. Qt中QList用法详解
  9. Conv2d函数详解(Pytorch)
  10. SYSCALL_DEFINE详解