Redis 5大数据类型的操作 以及底层结构

2021/5/14 19:56:15

本文主要是介绍Redis 5大数据类型的操作 以及底层结构,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

String指令

1.set [key] [value] 设置key的值
2.get [key] 获取指定key的值
3.del [key] 删除指定key(通用)
4.setnx [key] [value] 设置指定key的值,但是若此key存在则添加失败
5.strlen [key] 获取指定key的值的长度
6.append [key][value] 把值添加到指定key的值后面
7.mset [key1] [value1] [key2] [value2] … 可以批量的添加key和值
8.mget [key1] [key2] [key3] … 可以批量的获取key的值
9.decr [key] 为指定key的值减少1,若为空则创建并且为-1(只能对数值操作)
10.incr [key] 为指定key的值加1,若为空则创建并且为1(只能对数值操作)
11.decrby [key] [num] 为指定key的值减num(数字)(只能对数值操作)
12.incrby [key] [num] 为指定key的值增加num(数字)(只能对数值操作)
13.msetnx [key1][value1] [key2][value2] … 可以批量的添加key和值,具有原子性,若果其中有一个key存在则全是失败。
14.getrange [key] [begin] [end] 获取指定key的begin到end的值(如
k1 =123456 列 getrange k1 2 3 结果 34 索引从0开始)
15.setrange [key] [index] [value] 将指定key的值从index开始替换成value,若index后面的长度大于value的长度则大于value的部分不变,若index后面的长度小于value的长度,则补全value
16.setex [key] [time] [value] 添加一个具有过期时间(单位秒)的key加value
17.ttl [key] 查看指定key的过期时间(单位秒)(通用)
18.getset [key][value] 获取指定key的值,并且将其修改为value

string的底层结构

他是一个简单的动态字符串,初始分配的总长度是大于实际存储的字符串大小,当要增加字符串长度的时候,若小于1MB则此结构扩大一倍,当大于1MB是只增加1MB,字符串的最大长度为,512MB。

list指令

1.lpush [key] [v1][v2][v3]…从左方依次添加v1和v2以及v3,因为是头插法的缘故,所以当我们添加一个值的时候,会创建一个结点把当前结点接到列表的头部。
(所以结果是 v3 v2 v1 )
2.rpush [key] [v1][v2][v3]…从右方依次添加v1和v2以及v3
3.lrange [key][begin][end] 从左边获取索引在begin到end之间的元素,若begin为0 end 为 -1 为查全部元素
4.lpop [key] 突出左边头部元素。
5.rpop [key]突出右边头部元素。(当值吐完后key也不复存在)
6.rpoplpush [k1][k2] 从k1的右边吐出一个值在k2的左边添加
7.lindex [key][index] 获取指定key的指定索引的值
8.llen [key] 获取指定key列表的长度
9.linsert [key] before [表中已存在的值] [新的值] 指定key的列表中在已存在的值的前面插入新的值
10.lrem [key] [num][value] 删除指定key中,从左边开始删除num个value
11.lset [key] [index] [value] 将指定key中的index索引处的数据替换成value

list的底层结构

他是一个双向链表,既然是链表那么他对头和位的操作是非长快的,他的优点是增加和删除快,查询和修改慢。

set指令

1.sadd[key] [v1][v2][v3]… 批量插入值,无序
2.smembers [key] 取出集合的所有值
3.sismember [key][value] 判断key集合中是否存在value存在返回1不存在返回0
4.scrad [key] 返回集合的长度
5.srem [k] [v1] [v2] [v3] 删除集合中的元素
6.spop [key] [count] 当count不填的时候默认随机从key集合中随机吐出一个值,当填了count时从集合中随机吐出count个
7.srandmember [key][count] 从集合中获取count个值,不删除
8.smove [k1][k2] [value] 把k1中的value移动到k2中
9.sinter 返回两个集合的交集元素。
10.sunion 返回两个集合的并集元素。
11.sdiff 返回两个集合的差集元素

set的底层结构

set底层实际上是一个hash表,java的hashset的底层是一个hashmap,每一个键都有一个值,但是值都是一样的。
redis中的set也是一样的value是同一个值。

hash指令

1.hset [key1][field1][value1][field2][value2]… 批量设置hash的值
2.hget [key][field] 获取指定key的field的值
3.hexists[key][field]查看哈希表 key 中,给定域 field 是否存在。
4.hkeys [key]列出该hash集合的所有field
5.hvals [key]列出该hash集合的所有value
6.hincrby [key][field][increment]为哈希表 key 中的域 field 的值加上增量 1
7.hsetnx [key][field][value]将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在

hash底层结构

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

zset有序集合指令

1.zadd [key] [score] [value] [score] [value] 为集合添加数据以及他的分数(根据分数排序)
2.zrange [key][start][stop] [withscores] 加withscores返回从start开始到stop带分数的集合,不加则返回不带分数的集合。
3.zrangebyscore [key] [min] [max] [withscores] 返回分数在min到max之间的集合(从小到大)
4.zrevrangebyscore [key] [min] [max] [withscores] 返回分数在min到max之间的集合(从大到小)
5.zincrby [key][increment][value] 为value的分数增加increment
6.zrem [key][value]删除该集合下,指定值的元素
7.zcount [key][min][max]统计该集合,分数区间内的元素个数
8.zrank [key][value] 获取当前值在集合中的排名

zset底层结构

SortedSet(zset)是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。
zset底层使用了两个数据结构
(1)hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。
(2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。



这篇关于Redis 5大数据类型的操作 以及底层结构的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程