您的位置:首页 > 数据库 > Redis

Redis-02-Redis数据类型与对不同类型数据的操作

2017-12-26 15:37 399 查看

Redis数据库支持的数据类型

Redis数据库是一种高级的key-value存储系统,其中value支持五种数据类型:

1)字符串(String)

2)哈希类型(hash)

3)字符串列表(list)

4)字符串集合(set)

5)有序字符串集合(sorted set)

一.字符串类型数据

1.1 字符串类型简介

字符串类型是Redis中最基础的数据类型,在Redis中String类型数据是二进制安全的,所以它存入和获取的数据相同。在Redis中,字符串类型的value最多可以容纳的数据长度是512M

1.2 在Redis中操作字符串类型数据

1.存入数据

set key value 命令:将一组key-value存入Redis

2.取出数据

get key 命令:获取key对应的value值

如果与key对应的value不是String类型的数据,则会报错,因为get命令只能用来取出String类型数据。

3.修改数据

getset key value 命令:将key对应的值更改为一个新的值value

append key value 命令:如果key存在,在原有的value后增加拼装字符串。若key不存在,则新增一个key-value,此命令常用来修改value值

4.删除数据

del key 命令:删除指定的key

5.数值增减

incr key 命令:指定key的value原子性增1,如果目标key不存在,则由默认值0增加为1。如果value值不能转换为整型。则返回错信信息

decr key 命令:指定key的value原子性减1,如果目标key不存在,则由默认值0减少为-1。如果value值不能转换为整型。则返回错信信息

incrbe key increment 命令:指定key的value原子性增加increment ,如果目标key不存在,则由默认值0增加为increment 。如果value值不能转换为整型。则返回错信信息

decrby key increment 命令:指定key的value原子性减少increment ,如果目标key不存在,则由默认值0减少为-increment 。如果value值不能转换为整型。则返回错信信息

二.哈希类型数据

2.1 哈希类型简介

Redis中的Hashes类型可以看成和String类型一样的key-value类型的结构,不同的是这里的value值也是一个Map容器,即value中存放的是filed-value映射关系。因此该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果 Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash 可以存储4294967295个键值对。

2.2 在Redis中操作哈希类型数据

1.存入数据

hset key field value 命令:存入数据,key对应一个field-value(键值对)

hset key field1 value1 field2 value2 … 命令:存入数据,为一个key设置多个field-value(键值对)

2.取出数据

hget key field 命令:获取指定的key中的field的值

hmget key field1 field2 … 命令:获取key中的多个filed-value

hgetall key 命令:获取key中的所有filed-vaule

3.修改数据

hmset key field1 field2 … 命令:设置key中的多个filed-value

4.删除数据

hdel key field1 field2 … 命令:删除key中的多个filed-value

del key 命令:删除整个List

5.数值增减

hincrby key field increment 命令:设置key中filed的值增加increment

6.其他相关命令

hexists key field 命令:判断指定的key中的filed是否存在

hlen key 命令:获取key所包含的field的数量

hkeys key 命令:获取所有的key

hval key 命令:获取所有的value
c94d

三.链表类型数据

3.1 List类型简介

在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的栈一样,我们可以在其顶部添加新的元素,与传统的栈不同的是List类型可以从两端添加数据而不是一端。

List类型数据也是一个key对应一个value,这个value就是一个和双向栈功能一样的存储结构

在插入数据时,如果目标键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4294967295

从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将 会是非常高效的操作,即使链表中已经存储了百万条记录,该操作也可以在常量时间内完成。然而需要说明的是,如果元素插入或删除操作是作用于链表中间,那将会是非常低效的。相信对于有良好数据结构基础的开发者而言,这一点并不难理解

3.2 在Redis中操作List类型数据

1.存入数据

lpush key value1 value2 … 命令:在指定的key所关联的list的头部插入所有的 values,如果该key不存在,该命令在插入的之前创建一个与该key关联的空链 表,之后再向该链表的头部插入数据。插入成功,返回元素的个数

rpush key value1 value2 … 命令:在指定的key所关联的list的尾部插入所有的 values,如果该key不存在,该命令在插入的之前创建一个与该key关联的空链 表,之后再向该链表的尾部插入数据。插入成功,返回元素的个数

2.取出数据

lrang key start end 命令:获取链表中从start到end的元素的值,start、end可 为负数,若为-1则表示链表尾部的元素,-2则表示倒数第二个,依次类推…

3.修改数据

4.删除数据

lpop key 命令:删除右边第一个元素,如果目标key不存在,返回nil;若存在,返回并删除key对应的List集合的右边第一个元素

rpop key 命令:删除左边第一个元素,如果目标key不存在,返回nil;若存在,返回并删除key对应的List集合的左边第一个元素

5.数值增减

6.其他相关命令

llen key 命令:返回指定key对应的链表中元素的数量

四.Set类型数据

4.1 Set类型简介

在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我 们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要 说明的是,这些操作的时间是常量时间。Set可包含的最大元素数是4294967295。

和List类型不同的是,Set集合中不允许出现重复的元素。和List类型相比,Set类 型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计 算操作,如unions、intersections和differences。由于这些操作均在服务端完成, 因此效率极高,而且也节省了大量的网络IO开销

4.2 在Redis中操作Set类型数据

1.存入数据

sadd key value1 value2 … 命令:向set中添加数据,如果该key的值已有则不会重复添加

2.取出数据

smembers key 命令:获取set中所有的成员

scard key 命令:获取set中所成员的数量

srandmember key 命令:随机返回set中的一个成员

3.修改数据

4.删除数据

srem key member1 member2 … 命令:删除set中指定的成员

5.数值增减

6.其他相关命令

sismember key member 命令:判断参数中指定的成员是否在该set中,1表示存在,0表示不存在或者该key本身就不存在

sdiff sdiff key1 key2 命令:返回key1与key2中相差的成员,而且与key的顺序有关,即返回差集

sdiffstore destination key1 key2 命令:将key1、key2相差的成员存储在destination上

sinter key1 key2 … 命令:返回key1和key2的交集

sinterstore destination key1 key2 命令:将key1和key2的交集存储在destination上

sunion key1、key2 命令:返回key1和key2的并集

sunionstore destination key1 key2 命令:将key1和key2的并集存储在destination上

五.Sorted-Sets类型数据

5.1 Sorted-Sets类型简介

Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出 现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分 数(score)与之关联,这里的分数即权重的意思,Redis通过分数来为集合中的成员进行从小到大的排序。然 而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score) 却是可以重复的

在Sorted-Set中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为 集合中成员数量的对数。由于Sorted-Sets中的成员在集合中的位置是有序的,因此, 即便是访问位于集合中部的成员也仍然是非常高效的。事实上,Redis所具有的这一 特征在很多其它类型的数据库中是很难实现的,换句话说,在该点上要想达到和Redis同样的高效,在其它数据库中进行建模是非常困难的

例如:游戏排名、微博热点话题等使用场景

5.2 在Redis中操作Sorted-Sets类型数据

1.存入数据

zadd key score1 member1 score2 member2 … 命令:将多个成员以及该成员的分数存放到sorted-set中

2.取出数据

zcount key min max 命令:获取分数在[min,max]之间的成员

3.修改数据

4.删除数据

5.数值增减

6.其他相关命令

zcard key 命令:获取集合中的成员数量

zincrby key increment member 命令:设置指定成员的增加的分数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: