My Redis notes(2)--the data structures of Redis

这篇note笔者来记录下关于Redis的5种数据结构.

1.the first type of data structure – String

在Redis中String这种数据结构是最重要也是最基础的,接下来的另外四种结构更多的是一种容器结构,它们主要也是对应于(String : String)这种(key : value)格式, 所有我们在String这个结构中最要掌握的就是(key : value)的结构.
Redis的key可以是任意字符组成,但是要注意对key进行命名时要长短合适而且要同一命名规范.
相对来说Redis的value就宽限多了,既然我们说了是(String : String)->(key : value)的格式,那么value中存储的自然也是String. 然而深入下去我们会发现它在输入的数据是纯数字的时候是Integer类型,可以进行incr和incrby这类操作,笔者认为其实这本质还是String,就像JavaScript中String可以通过Number()和parseInt()转换为Number类型,在计算完后又能转回String;Java中的Integer.parseInt()也是如此(如果此处错误,日后笔者会改正说法).
现在我们进入String的具体操作介绍,每一节的末尾会给出图示.

1.1 set

格式: set key value
创建一个键值对(key : value)

1.2 get

格式: get key
得到一个key的value

1.3 getset

格式: getset key new_value
得到一个key的value,并且再给该key设置一个新的value.

1.4 incr

格式: incr key
对一个key的value值加1,前提是这个value值必须是纯数字构成的String,这样解析的时候才能够解析为Integer类型; 再者如果key没有定义,也就是说没有value,那么默认初始值为0.

1.5 incrby

格式: incrby key step_value
对一个key的value值加step_value(必须是纯数字构成的String),其他同incr.

1.6 decr

格式: decr key
对一个key的value值减1,其他同incr.

1.7 decrby

格式: decrby key step_value
对一个key的value值减step_value(必须是纯数字构成的String),其他同incrby.

1.8 del

格式: del key/key1 key2 …
删除一个或多个指定的key.

1.9 append

格式: append key value
给原本的key的value值在后面拓展一个新的value值.
My Redis notes(2)--the data structures of Redis
My Redis notes(2)--the data structures of Redis
My Redis notes(2)--the data structures of Redis

2.the second type of data structure – Hash

hash结构也是(key : value)但是它属于(key : {(key : value)…})也就是说它所存储的value是(key : value)的聚合, 由此可以说hash结构是一个(key : value)的map容器.
一个hash容器可以存储4294967295个键值对.
下面约定hc为hash container.

2.1 hset

格式: hset hc key value
创建一个hash container(除非它已存在), 并为其添加一个键值对.

2.2 hget

格式: hget hc key
获取指定hash container中指定key的value值.

2.3 hmset

格式: hmset hc key1 value1 key2 value2 …
创建一个hash container(除非它已存在), 并为其添加一个或多个键值对.

2.4 hmget

格式: hmget hc key1 key2
获取指定hash container中多个指定key的value值.

2.5 hgetall

格式: hgetall hc
获取指定hash container中所有的键值对

2.6 hdel

格式: hdel hc key/key1 key2 …
删除指定hash container中指定的一个或多个key对应的键值对.

2.7 hincrby

格式: hincrby hc key step_value
与incrby基本类似,只是需要指定hash container.

2.8 hexists

格式: hexist hc key
查找指定hash container中指定的key值是否存在; 0表示不存在, 1表示存在.

2.9 hlen

格式: hlen hc
获取指定hash container中键值对的数量

2.10 hkeys

格式: hkeys hc
获取指定hash container中所有的key,类似于Java中的iterator.getKeys().

2.11 hvals

格式: hvals hc
获取指定hash container中所有的key,类似于Java中的iterator.getVals().
My Redis notes(2)--the data structures of Redis
My Redis notes(2)--the data structures of Redis
My Redis notes(2)--the data structures of Redis
My Redis notes(2)--the data structures of Redis

3.the third type of data structure – List

Redis的List结构基本是混合了Java中的ArrayList和LinkedList的特性, 有时我们也会使用ArrayList(基于数组实现)来模拟stack, 所以Redis的List也有点stack的感觉. List主要是存储value的,不需要像hash需要成为键值的map映射, 也因此比较像(key : array)这种结构.
有一个重要的概念需要提醒,Redis的List的index索引也是从0开始的.
下面约定lc为list container.

3.1 lpush

格式: lpush lc value/value1 value2 …
创建一个list container(除非它已存在), 并从左侧开始依次为其添加一个或多个value.

3.2 lpop

格式: lpop lc
从指定的list container的左侧开头弹出一个value.

3.3 rpush

格式: rpush lc value/value1 value2 …
创建一个list container(除非它已存在), 并从右侧开始依次为其添加一个或多个value.

3.4 rpop

格式: rpop lc
从指定的list container的右侧开头弹出一个value.

3.5 lrange

格式: lrange lc start end
获取指定list container中指定范围的所有value; 0表示第一, -1表示最末尾

3.6 llen

格式: llen lc
获取指定list container的value的个数

3.7 lpushx

格式: lpushx lc value
从指定的list container的左侧头部压入一个value, 如果list container则无法压入

3.8 rpushx

格式: rpushx lc value
从指定的list container的右侧头部压入一个value, 如果list container则无法压入

3.9 lrem

格式: lrem lc number value/number1 value1 number2 value2 …
从指定的list container的删除指定number个数的指定value, 这里的number > 0时表示从左侧开始删除, number < 0表示从右侧开始删除.

3.10 lset

格式: lset lc index value
如果在list container的index的value存在,那么在index的value将会替换新的value.

3.11 linsert

格式: linsert lc before/after existed_value value
如果在list container的existed_value存在,那么就可以在existed_value前面或后面开始插入一个指定的value.

3.12 rpoplpush

格式: rpoplpush lc1 lc2
把前面的list container右侧头部的一个value弹出压入到后面的list container的左侧头部.
My Redis notes(2)--the data structures of Redis
My Redis notes(2)--the data structures of Redis
My Redis notes(2)--the data structures of RedisMy Redis notes(2)--the data structures of RedisMy Redis notes(2)--the data structures of RedisMy Redis notes(2)--the data structures of RedisMy Redis notes(2)--the data structures of RedisMy Redis notes(2)--the data structures of Redis

4.the fourth type of data struture – Set

Set即集合,就普通人所学过的集合的知识一定会知道交并差(补),Set中的元素和List一样是value而不是(key : value).在同一个Set中value是唯一的,重复的value是无法add进去的.
下面约定sc为set container.

4.1 sadd

格式: sadd sc value/value1 value2 ..
创建一个set container(除非它已存在), 并为其添加一个或多个value.

4.2 smembers

格式: smembers sc
获取指定set container中所有的value

4.3 sismember

格式: sismember sc value
在指定的set container中查找指定的value是否存在; 0表示不存在, 1表示存在.

4.4 sdiff

格式: sdiff sc1 sc2
在set container 1中减去和set container 2相同的value部分–差集(交换位置的结果是不同的,除非两个set一致).

4.5 sinter

格式: sinter sc1 sc2
获取set container 1和set container 2两者相同的部分–交集(交换次序也是一样的).

4.6 sunion

格式: sunion sc1 sc2
把set container 1和set container 2两者合并在一起,相同的部分算一个–并集(交换次序也是一样的).

4.7 scard

格式: scard sc1
计算set container中元素的个数

4.8 srandmember

格式: srandmember sc1
从指定的set container随机获取一个元素

4.9 sdiffstore

格式: sdiffstore sc1 sc2 sc3
在set container 2中减去和set container 3相同的value部分–差集,并把这个差集存储到set container 1中

4.10 sinterstore

格式: sinterstore sc1 sc2 sc3
获取set container 2和set container 3两者相同的部分–交集,并把这个差集存储到set container 1中

4.11 sunionstore

格式: sunionstore sc1 sc2 sc3
把set container 2和set container 3两者合并在一起,相同的部分算一个–并集,并把这个并集存储到set container 1中
My Redis notes(2)--the data structures of RedisMy Redis notes(2)--the data structures of Redis

5.the fifth type of data structure – Sorted Set

Sorted Set是在Set的基础上做了一个评分标准作为排序依据,它的结构类似于(key : (score : value)).
下面约定ssc为sorted set container.

5.1 zadd

格式: zadd ssc score value/score1 value1 score2 value2 …
创建一个sorted set container(除非它已存在), 并为其添加一个或多个(score : value).

5.2 zrange

格式: zrange ssc start end
获取指定范围内sorted set container的所有value,并且已进行默认的按照score大小的升序排序; 0为第一, -1为最后一个

5.3 zscore

格式: zscore ssc value
获取指定的sorted set container中指定value的score值

5.4 zrem

格式: zrem ssc value
删除指定的sorted set container中指定的value对应的(score : value)

5.5 withscores

格式: zrang ssc start end withscores
用在zrange, zrevrange的最后面用于显示value时把score也显示出来

5.6 zrevrange

格式: zrevrange ssc start end
获取指定范围内sorted set container的所有value,并且已进行默认的按照score大小的降序排序

5.7 zremrangebyrank

格式: zremrangebyrank ssc start end
删除指定范围内sorted set container(已经降序排序)所有的(score : value)

5.8 zremrangebyscore

格式: zremrangebyscore ssc start end
删除指定score范围内sorted set container所有的(score : value)

5.9 zrangebyscore

格式: zrangebyscore ssc start end
根据指定的分数范围来获取(score : value)

5.10 limit

格式: zrang ssc start end withscores limit page_start number
用于限制查找的数目,类似于sql分页

5.11 zincrby

格式: zincrby ssc step_score value
增加指定sorted set container中指定value的score

5.12 zcount

格式: zcount ssc start_score end_score
获取指定score范围内sorted set container的value个数
My Redis notes(2)--the data structures of Redis
My Redis notes(2)--the data structures of Redis
My Redis notes(2)--the data structures of Redis
My Redis notes(2)--the data structures of Redis
My Redis notes(2)--the data structures of Redis

6.key的使用

这里列举下key一些常用命令

6.1 keys

格式: keys *
可以获取Redis中所有的key; 如果加上一些单词就可以模糊查询,例子在图片上

6.2 rename

格式: rename key new_key
重命名一个key的名称

6.3 expire

格式: expire key seconds
设置一个key的有效存在时间.单位s

6.4 ttl

格式: ttl key
查看指定key的剩余存在时间; 如果一个没经过expire的key,那么它的存在时间是-1
My Redis notes(2)--the data structures of Redis
My Redis notes(2)--the data structures of Redis

That’s all!
感谢各位的支持!如有错漏欢迎评论指出,谢谢!