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值.
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().
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的左侧头部.
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中
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个数
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
That’s all!
感谢各位的支持!如有错漏欢迎评论指出,谢谢!