Redis 常用的5大基本类型

目录

1 Redis字符串(String)

1.1 简介

1.2 常用的命令

1.3 数据结构

2 Redis列表(List)

2.1 简介

2.3 常用命令

2.3 数据结构

3 Redis集合(Set)

3.1 简介

3.2 常用命令

3.3 数据结构

4 Re1dis哈希(Hash)

4.1 简介

4.2 常用命令

4.3 数据结构

5 Redis有序集合Zset(sorted set)

5.1 简介

5.2 常用命令

5.3 数据结构

5.4 跳跃表

5.4.1 简介


1 Redis字符串(String)

1.1 简介

String是Redis最基本的类型。

String是二进制安全的,意味着Redis的String可以包含任何数据。比如说 .jpg图片或者序列化的对象

String是Redis最基本的数据类型,一个Redis中的字符串Value最多可以是512MB

1.2 常用的命令

命令含义
set <key> <value>添加键值对,已经有的话就覆盖
get <key>查询对应键值
append <key> <value1>在key对应的value后面value。如果原本没有该key,就创建一个键值对,内容为value1
strlen <key>获取值得长度
setnx <key> <value>只在key不存在的情况时,设置key的值。存在的话,不会赋值
incr <key>只能对数字值操作。将key中存储的数字加1。具有原子性
decr <key>只能对数字值操作。将key中存储的数字减1。具有原子性
incrby / decrby <key> <步长>只能对数字值操作。将key中存储的数字按照步长加减。具有原子性
mset <key1><value1><key2><value2>...同时设置多个key-value
mget <key1><key2>...同时获取多个key对应的value
msetnx <key1><value1><key2><value2>...同时设置一个或多个key-value,当前晋档给定的key都不存在时,该命令才成立
getrange <key><起始位置><结束位置>获取按照设定的范围返回子串。从0下标开始
setrange <key><起始位置><value>使用value覆盖key对应字符串,从设定的起始位置的字符串值
setex <key><过期时间><value>设置键的同时,设置过期时间,单位秒
getset <key><value>设置新值,同时获取旧值

1.3 数据结构

string的数据结构为简单动态字符串。是可以修改的字符串。采用预分配冗余空间的方式来减少内存的分配。

实际分配的容量要大于实际字符串长度。当字符串长度小于1MB的时候,扩容是按照2倍增加。当容量超过1MB的时候,扩容是按照每次1MB来增加。

2 Redis列表(List)

2.1 简介

单键多值,一个key对应一个列表。底层实际是一个双向链表

2.3 常用命令

命令
lpush/rpush <key><value1><value2><value3> ....从左边/右边插入一个或多个值
lpop / rpop <key>从左边/右边弹出吐出一个值
rpoplpush <key1><key2>从<key1>列表右边吐出一个值,插到<key2>列表左边
lrange <key><start><stop>按照索引下标获得元素(从左到右) 0左边第一个,-1右边第一个 lrange mylist 0 -1
lindex <key><index>按照索引下标获得元素(从左到右)
llen <key>获得列表长度
linsert <key> before <value><newvalue>在<value>的前面插入<newvalue>
lrem <key><n><value>从左边删除n个value(从左到右)
lset<key><index><value>将列表key下标为index的值替换成value

2.3 数据结构

List列表的数据结构为 zipList - > quickList

zipList也称压缩列表。是列表在列表元素较少的时候使用的一种结构,这个结构是一块连续的内存存储。它将所有的元素紧挨在一起,分配的是连续的内存。

当List列表的数据量较多时,List列表的数据结构就会采用quickList结构。这个结构就是多个zipList组成的双向链表,需要有前驱指针和后继指针。

优点:既满足了快速插入和删除的性能,又不会出现太大的空间冗余。

3 Redis集合(Set)

3.1 简介

对外提供的功能与list类似是一个列表的功能,特殊之处在于Set是可以自动排重

Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)

3.2 常用命令

命令含义
sadd <key><value1><value2> .....将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
smembers <key>取出该集合的所有值。不会删除集合中元素
sismember <key><value>判断集合<key>是否为含有该<value>值,有1,没有0
scard<key>返回该集合的元素个数
srem <key><value1><value2> ...删除集合中的某个元素
spop <key>随机从该集合中吐出一个值
srandmember <key><n>随机从该集合中取出n个值。不会从集合中删除
smove <source><destination>value把集合中一个值从一个集合移动到另一个集合
sinter <key1><key2>返回两个集合的交集元素
sunion <key1><key2>返回两个集合的并集元素
sdiff <key1><key2>返回两个集合的差集元素(key1中的,不包含key2中的)

3.3 数据结构

Set数据结构是dict字典,字典是用哈希表实现的。

4 Re1dis哈希(Hash)

4.1 简介

Redis hash是一个键值对集合。可以类比Java中的 List<Map<String,Object>>

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象

4.2 常用命令

命令解释
hset <key> <field> <value>给key集合的field键赋值value
hget <key> <field>从key集合中获取field键的值
hmset <key> <field1><value1> <field2><value2>...批量给key集合赋值
hmget <key> <field1> <field2>...批量获取
hexists <key> <field>判断key集合是否含有field域
hkeys <key>获取key集合中所有的field
hvals <key>获取key集合中所有的value
hincrby <key> <field> <increment>给key集合中的field键对应的value加上increment
hsetnx <key> <field> <value>仅当key集合不存在field域的时候,赋值

4.3 数据结构

Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。

当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。

5 Redis有序集合Zset(sorted set)

5.1 简介

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。

不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。

5.2 常用命令

命令解释
zadd <key><score1><value1><score2><value2>…将一个或多个 member 元素及其 score 值加入到有序集 key 当中。并且插入的时候就会排好序
zrange <key> <start><stop> [withscores]返回有序集 key 中,下标在<start><stop>之间的元素. 带WITHSCORES,可以让分数一起和值返回到结果集。
zrangebyscore <key> minmax [withscores] [limit offset count]返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列
zrevrangebyscore key maxmin [withscores] [limit offset count]同上,改为从大到小排列
zincrby <key><increment><value>为元素的score加上增量
zrem <key><value>删除该集合下,指定值的元素
zrank <key><value>返回该值在集合中的排名,从0开始
zcount <key><min><max>统计该集合,分数区间内的元素个数

5.3 数据结构

zset是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表

zset底层使用了两个数据结构

  1. hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值

  2. 跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表

5.4 跳跃表

5.4.1 简介

采用二分思想,对数据往上分层。有点像索引排序的感觉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值