首页 > 编程知识 正文

redis高级数据类型,redis常用的数据类型

时间:2023-05-03 15:06:52 阅读:33445 作者:898

redis数据类型包括字符串类型、散列类型、列表类型、集合类型和有序集合类型。

redis这么火,它运行了几张? 普通笔记本电脑,一秒钟就能读写操作10万次。

原子操作:最小的操作单位,不能继续分割。 也就是说,最小的执行单位不会插入到其他命令中。 在高并发性下不存在竞争条件。

KEY命名:一个好建议是article:1:title保存id1文章的标题。

一、前言。 1、获取密钥列表:有密钥参数通配符吗? *[]和转义

2、密钥是否存在:退出密钥有返回1的存在,没有返回0的存在。

3、创建密钥和删除密钥: setkey和DEL key

4、密钥中存储的redis数据类型:从密钥中获取类型密钥。 返回string、list、hash、set和zset。 对这5种返回的redis数据类型逐一进行说明。

5、renameoldkeynewkey :重命名密钥,如果newkey存在则覆盖。

6、重命名RenameNXoldkeynewkey:key,newkey存在时不复盖。

7、随机密钥:马上回一个密钥

8、movekeydb- index :将key移动到指定数据库,如果key不存在或已经在该数据库中,则返回0。 成功的话会回到1。

二、Redis数据类型Redis数据命令1、Redis数据类型单字符串类型:这很容易理解。 一个key保存一个字符串。 如果要保存数据呢? 转换为Json或其他字符串并序列化。

2、Redis数据命令字符串类型:1)赋值: SET key value。 例如set hello world

2 )取值:获取密钥。 例如get hello。 返回世界

3 )自我增加: Incr键。 这是Mysql的自动_增量。 每次运行INCR key时,该key的值都为1。 如果key不存在,则首先创建0,然后创建1,并返回1。 如果值不是整数,则报告错误。 这个操作是原子操作。

4 )自我减少) DECR key。 将指定key的值减少1。 例如,DECR num是num-1

5 )自增长N:INCRBY key increment用于将increment添加到指定的key值。 例如INCRBY num 5是num 5

6 )自减N:DECRBY key increment用于将increment减去指定的key值。 例如,DECRBY num 5是num-5

7 )增加浮点数: incrbyfloat密钥增量。

8 )添加到尾部:应用密钥值。 例如settest : key 123 append test : key 456 gettest : key是123456

9 )获取长度: STRLEN key。

10 )同时为多个密钥分配值(MSET title这是标题描述,这是内容,这是说明内容)。

11 )同时获取多个密钥的值: MGET title description content

12 )获取位操作)获取位密钥偏移。 如果字符a在redis中存储为01100001(ascii为98 ),则GETBIT key 2为1,GET key 0为0。

13 )“设置位操作”。 如果字符a在redis中存储为01100001(ascii为98 ),则get key将获得b,如SETBIT key 6 0和SETBIT key 5 1。 因为取出的二进制文件是01100010。

14 )位操作统计信息: bit count key [ start ] [ end ]:bit count key用于获取key的值中,二进制为1的个数。 另一方面,BITCOUNT key start end用于计数key值中位于start和end之间的子字符串的二进制为1的个数。

15 )位操作的位运算: bitopoperationresultkeykey1key 2。 操作是位运算的操作,有AND、OR、XOR、NOT。 resultKey将运算结构存储在该key中,key1和key2是参与运算的key,参与运算的key可以指定多个。

3、Redis数据型双哈希型: Redis以词典(关联数组)的形式存储,一个key对应一个value。 在字符串类型中,value只能指定一个字符串。 在含羞草类型(也称为散列类型和标致)中,value支持词典(关联数组)。 在中,可以看到Redis标致的害羞类型/散列类型中,与key对应的value是二维数组。 但是,字段的值只能是字符串。 也就是说,只能是二维数组,不能有更多的维度。

4

、Redis数据命令二散列类型:

1)赋值:HSET key field value。如hset user name lane。hset user age 23
2)取值:HGET key field。如hget user name,得到的是lane。
3)同一个key多个字段赋值:HMSET key field1 value1 field2 value2…
4)同一个KEY多个字段取值:HMGET key field1 fields2…
5)获取KEY的所有字段和所有值:HGETALL key。如HGETALL user得到的是name lane age 23。每个返回都是独立的一行。
6)字段是否存在:HEXISTS key field。存在返回1,不存在返回0
7)当字段不存在时赋值:HSETNX key field value。如果key下面的字段field不存在,则建立field字段,且值为value。如果field字段存在,则不执行任何操作。它的效果等于HEXISTS + HSET。但是这个命令的优点是原子操作。再高的并发也不会怕怕。
8)自增N:HINCREBY key field increment。同字符串的自增类型,不再阐述。
9)删除字段:DEL key field1 field2…删除指定KEY的一个或多个字段。10)只获取字段名:HKEYS key。与HGETALL类似,但是只获取字段名,不获取字段值。
11)只获取字段值:HVALS key。与HGETALL类似,但是只获取字段值,不获取字段名。
12)获取字段数量:HLEN key。

5、Redis数据类型三列表类型:

列表类型存储了一个有序的字符串列表。常用的操作是向两端插入新的元素。时间复杂度为O(1)。结构为一个链表。记录头和尾的地址。看到这里,Redis数据类型的列表类型一个重大的作用呼之欲出,那就是队列。新来的请求插入到尾部,新处理过的从头部删除。另外,比如微博的新鲜事。比如日志。列表类型就是一个下标从0开始的数组。由于是链表存储,那么越靠近头和尾的元素操作越快,越靠近中间则越慢。


6、Redis数据命令三列表类型:

1)向头部插入:LPUSH key value1 value2…。返回增加后的列表长度。
2)向尾部插入:RPUSH key value1 value2…。返回增加后的列表长度。
3)从头部弹出:LPOP key。返回被弹出的元素值。该操作先删除key列表的第一个元素,再将它返回。
4)从尾部弹出:RPOP key。返回被弹出的元素值。
5)列表元素个数:LLEN key。key不存在返回0。
6)获取列表的子列表:LRANGE start end。返回第start个到第end个元素的列表。包含start和end。支持负数索引。-1表示最后一个元素,-2表示倒数第二个元素。
7)删除列表中指定值:LREM key count value。删除key这个列表中,所有值为value的元素,只删除count。如果有count+1个,那么就保留最后一个。count不存在或者为0,则删除所有的。如果count大于0,则删除从头到尾的count个,如果count小于0,则删除从尾到头的count个。
8)获取指定索引值:LINDEX key index。如LINDEX key 0就是列表的第一个元素。index可以是负数。
9)设置索引和值:LSET key index value。这个操作只是修改指定key且指定index的值。如果index不存在,则报错。
10)保留片段,删除其它:LTRIM key start end。保留start到end之间的所有元素,含start和end。其他全部删除。
11)向列表插入元素:LINSERT key BEFORE/AFTER value1 value2。从列表头开始遍历,发现值为value1时停止,将value2插入,根据BEFORE或者AFTER插入到value1的前面还是后面。
12)把一个列表的一个元素转到另一个列表:RPOPLPUSH list1 list2。将列表list1的右边元素删除,并把该与元素插入到列表list2的左边。原子操作。

7、Redis数据类型四集合类型:

集合类型是为了方便对多个集合进行操作和运算。集合中每个元素不同且没有顺序的概念,每个元素都是且只能是一个字符串。常用操作是对集合插入、删除、判断等操作。时间复杂度尾O(1)。可以进行交集、并集、差集运算。例如文章1的有3个标签,是一个Redis数据类型集合类型存储。文章2有3个标签,有一个Redis数据类型集合类型存储。文章是1是mysql,文章2是讲redis。那么交集是不是就交出了一个数据库?(假设数据库这个tag在两篇文字都有)。集合类型在redis中的存储是一个值为空的散列表。

8、Redis数据命令四集合类型:

1)增加:SADD key value。
2)删除:SREM key value。
3)获取指定集合的所有元素:SMEMBERS key。
4)判断某个元素是否存在:SISMEMBER key value。
5)差集运算:SDIFF key1 key2…。对多个集合进行差集运算。
6)交集运算:SINNER key1 key2…。对多个集合进行交集运算。
7)并集运算:SUNION key1 key2…。对多个集合进行并集运算。
8)获取集合中元素个数:SCARD key。返回集合中元素的总个数。
9)对差集、交集、并集运算的结果存放在一个指定的key中:SDIFFSTORE storekey key1 key2。对key1和key2求差集,结果存放在key为storekey的集合中。SINNERSTORE和SUNIONSTORE类似。
10)获取集合中的随即元素:SRANDMEMBER key [count]。参数count可选,如果count不存在,则随即一个。count大于0,则是不重复的count个元素。count小于0,则是一共|count|个元素,可以重复。
11)随即弹出一个元素:SPOP key。随即从集合中弹出一个元素并删除,将该元素的值返回。

9、Redis数据类型五有序集合类型:

集合类型是无序的,每个元素是唯一的。那么有序集合就是有序的,每个元素是唯一的。有序集合类型和集合类型的差别是,有序集合为每个元素配备了一个属性:分数。有序集合就是根据分数来排序的。有序集合是使用散列表和跳跃表实现的。所以和列表相比,操作中间元素的速度也很快。时间复杂度尾O(log(N))。Redis数据类型中的有序集合类型比Redis数据类型中的列表类型更加耗费资源。

10、Redis数据命令五有序集合类型:

1)增加:ZADD key sorce1 value1 sorce2 value2…。
2)获取分数:ZSCORE key value。获取key的有序集合中值为value的元素的分数。
3)获取排名在某个范围内的元素列表:ZRANFGE key start stop [WITHSCORE]。获取排名在start和end之间的元素列表,包含start和end2个元素。每个元素一行。如果有WITHSCORE参数,则一行元素值,一行分数。时间复杂度为O(LOGn+m)。如果分数相同,则0<0<A<Z<a<z。
4)获取指定分数范围的元素:ZRANGEBYSCORE key min max [WITHSCORE] [LIMIT offset count]。获取分数在min和max之间的元素列表。含两头。每个元素一行。如果有WITHSCORE参数,则一行元素值,一行分数。如果min大于max则顺序反转。
5)为某个元素增加分数:ZINCRBY key increment value。指定的有序集合的值为value的元素的分数+increment。返回值后更改后的分数。
6)获取集合中元素的数量:ZCARD key。
7)获取指定分数范围内的元素个数:ZCOUNT key min max。
8)删除一个或多个元素:ZREM key value1 value2…
9)根据排名范围删除元素:ZREMRANGEBYRANK key start end。删除排名在start和end中的元素。
10)按照分数范围删除元素:ZREMRANGEBYSCORE key min max。
11)获得元素排名(正序):ZRANK key value。获取value在该集合中的从小到大的排名。
12)获得元素排名(倒序):ZREVRANK key value。获取value在该集合中从大到小的排名。
13)有序集合的交集:ZINTERSTORE storekey key1 key2…[WEIGHTS weight [weight..]] [AGGREGATE SUM|MIN|MAX]。用来计算多个集合的交集,结果存储在storekey中。返回值是storekey的元素个数。AGGREGATE为SUM则storekey集合的每个元素的分数是参与计算的集合分数和。MIN是参与计算的分数最小值。MAX是参与计算分数最大值。WEIGHTS 设置每个集合的权重,如WEIGHTS 1 0.1。那么集合A的每个元素分数1,集合B的每个元素分数0.1
14)有序集合的并集:ZUNIONSTORE storekey key1 kye2…[WEIGHTS weight [weight..]] [AGGREGATE SUM|MIN|MAX]


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。