redis基础数据类型。redis提供的基础的数据类型包括string、list、set、hash、zset。其中我们在开发中可能比较常用的是string、list和set。因为这几种数据类型在各种编程语言来说都有。除此之外还有hash的这种基于key和value的映射数据类型,最后是比较特殊的zset。这几种数据类型的对比关系如下图所示:

redis sorted set 与list区别 redis list zset区别_java

string:string、int、flout类型的数据。
lsit:string类型的链表数据
set:不能重复的没有顺序的集合
hash:没有顺序,的key和value的映射
zset(sorted set):具有顺序特质的映射关系数据。

1.string

redis sorted set 与list区别 redis list zset区别_redis_02

在redis中,string类型跟我们编程语言中的string类型的数据类型很类似,或者其他的key-value的存储类型。书上说了好多,感觉比较枯燥。这块的意思就是咋存一个key,然后对应的value是string类型的。然后redis提供了一些操作这个string的命令,包括get、set、del等。

这里是做的一些测试,比如set成功之后就能返回一个ok等等,书中对详细的过程都注释了。因为这块很简单,本人就不实操了。书中还对redis-client做了说明,也没啥重点。

redis sorted set 与list区别 redis list zset区别_数据库_03

2.List

redis sorted set 与list区别 redis list zset区别_python_04

这块说的是list就是通过一个统一的key来维护一个String集合,list数据机构提供的操作包括push和pop,具体的有从左侧或者右侧push(lpush,rpush),或者从左侧右侧获取(lpop,rpop),还有通过下标来获取lindex,还有通过一个范围来获取lrange,当然这里的l表示从左侧来获取。

redis sorted set 与list区别 redis list zset区别_java_05

这块的命令操作书中总结的很详细。这里本人也再打一遍汉字。

rpush list1 itme   #添加元素
rpush list1 itme1 #添加元素
lrange list1 0 -1 #获取全部列表  0 -1表示获取全部
lindex list1 1    # 获取下标为1的元素
lpop list1  #从左侧来弹出来一个元素

当然redis还提供了很多对list的操作,比如trim还是删除中间元素等等等。书中说第三章会详细介绍!


3.SET

redis sorted set 与list区别 redis list zset区别_数据库_06

redis的set和list是不一样的,list能够保持序列,但是set则通过hash表的方式保障数据的独一无二性。因为set是无序的,所以我们就不能像操作list那样push或者pop,事实上,我们添加或者移除元素使用的是sadd和srem命令,我们可以用sismember来查询一个元素是否在这个set里,当然也可以使用smember这个命令获取一个元素,但是要注意的是这个命令在大set的时候会比较慢。在表1.5中,sadd表示添加一个元素到set中,smembers表示返回一个元素,sismembers表示检测是否存在一个元素,srem表示如果一个元素存在那么就移除它。

redis sorted set 与list区别 redis list zset区别_数据库_07

这块原作者也总结的很好,这块翻译一下啊。

sadd set1 item #添加一个元素到set中
sadd set1 item2 #添加元素,在添加元素中,返回1表示之前没有存在,0表示已经存在了。
smembers set1 #smembers表示获取所有元素
sismembers set1 time4  #返回该元素是否存在 1表示存在,0表示不存在
srem set1 itme #删除一个元素,返回0表示没有该元素,1表示删除成功了。

当然set还有其他的命令,不限于这里的添加和删除,还有sinter,sunion,sdiff等等。这块还是在第三章中介绍,在第七章中会用set解决一些牛逼的问题哈。


4.HASH

redis sorted set 与list区别 redis list zset区别_数据库_08

在reids中的list和set都是维护元素的序列?,redis中的hash数据结构存储一个key到value的映射关系,这个value可以存储在的和前边string的存储体是一样的,如果这个value能作为一个int,那么这个value可以增加或者降低。在图中我们看到hash结构中key是唯一的,无序的。value是和key相关联的。

redis sorted set 与list区别 redis list zset区别_python_09

这块的命令有:

hset:添加一个元素到hash表中
hget:通过key获取一个元素
hgetall:获取hash中的所有元素
hdel :如果存在那么就删除一个元素

redis sorted set 与list区别 redis list zset区别_数据库_10

hset has1 key1 value1 #添加一个元素,返回1表示添加成功,返回0表示添加失败或者已经存在
hgetall has1  #获取hash中的所有元素
hdel has1 key1 #删除一个元素,返回1表示删除成功了,返回0表示不存在

如果我们对关系型数据的存储比较熟悉的话,我们可以认为redis的hash类似于文档存储到文档存储器中?或者是关系型数据库的一个记录,这时候我们可以认为单个或者多个属性是关系数据库的属性。


5.ZSET

redis sorted set 与list区别 redis list zset区别_java_11

和reids的hash一样,zset也是一种key和value的结构类型,这个key也是独一无二的,这个key其实是元素成员,value就是分数,这个value被限制为浮点数,zset数据类型拥有一个独一无二的特性在redis里,因为元素的顺序是通过其对应的浮点数的值来排列的。这个图中说的很明白!zset也提供了添加删除获取的命令。

redis sorted set 与list区别 redis list zset区别_python_12

zadd:添加一个元素(附带浮点数的那种哦)
zrange:通过位置来获取zset中的排序数据
zrangebyscore:通过积分范围来获取zset中的有序元素
zrem:移除一个元素

redis sorted set 与list区别 redis list zset区别_redis_13

zadd zset1 1 items1 #添加一个元素,返回1表示添加成功,0表示已经存在
zrange zset1 0 -1 withscores #通过积分排序获取所有元素
zrangebyscore zset1 0 800 withscope #获取指定积分范围内的元素
zrem zset1 items1 #移除一个元素,返回1表示移除成功,0表示移除失败!