一、Redis注意事项:
- Redis并不是单纯的一个key-value数据库,而是一个数据结构服务器,因为它的value不仅仅支持string类型的,而且支持包括列表、映射等等多种数据结构
- Redis的string类型是二进制安全的,即你可以使用任何字符,Redis保证这个string是原样的
- Redis的key不建议太长(超过1024字节),也不建议太短(影响可读性),建议使用object-type:id这种命名方式(反正是二进制安全的,随便使用任何符号)
- Redis的key可以设置多少毫秒或者秒后过期,但是Redis实际存储的是key的过期时间,所以即使Redis停止运行,改什么时候过期的key就会什么时候过期
- Redis里的key都是自动创建和自动销毁的,即在没有对应key的时候插入会自动创建key,在某个key对应的数据结构为空了之后自动销毁这个key
二、string类型
- 简述:无
- 相关命令:
- set
- 效果:设置一个普通的key-value
- 用法:set <key> <value> [EX seconds] [PX milliseconds] [NX|XX]
- 解释:EX后接该key过期的秒数,PX后接该key过期的毫秒数,NX表示当这个key不存在的时候,set才会执行成功,XX表示当key存在的时候才会执行成功
- get
- 效果:获取对应键的值
- 用法:get <key>
- mset
- 效果:相当于一次性使用多个set命令
- 用法:mset <key> <value> [<key> <value> ...]
- mget
- 效果:一次性获取多个key的值
- 用法:mget <key> [<key> ...]
- incr/decr
- 效果:将对应的值视为一个整型数字,并且原子地自增1或者自减1
- 用法:incr/decr <key>
- incrby/decrby
- 效果:将对应的值视为一个整型数字,并且原子地加或者减指定的数
- 用法:incrby/decrby <key> <number>
- getset
- 效果:设置新的值同时返回旧的值
- 用法:getset <key> <new-value>
- set
- 用途:非常多,经典类型
三、List类型
- 简述:与其说是列表,不如说是支持两端插入和两端弹出的队列,由链表实现,而不是数组实现,所以插入速度极快
- 相关命令:
- lpush/rpush
- 效果:在列表的左边或者右边插入一个或者多个值
- 用法:lpush/rpush <key> <value> [<value> ...]
- lrange
- 效果:(从列表左边开始算序号)取出一定范围内的值,索引可以为负
- 用法:lrange <key> <start> <stop>
- lpop/rpop
- 效果:从列表左/右边弹出(取出并移除)一个元素
- 用法:lpop/rpop <key>
- ltrim
- 效果:(从列表左边开始算序号)去除范围之外的元素
- 用法:ltrim <key> <start> <stop>
- blpop/brpop
- 效果:使用push模型的pop命令
- 用法:blpop/brpop <key> [<key> ...] <timeout>
- 解释:普通的lpop和rpop命令在遇到空列表时,会立即返回null给客户段,但是blpop和brpop则不会立即返回,该命令会在时间超过timeout(秒)时返回,如果提前有数据插入了列表,则提前返回,timeout设为0则表示一直等待,直到有数据插入列表中。该命令还支持同时监听多个列表,如果有某个列表有数据,则会提前返回。该命令返回的是一个数组,包含返回的key和对应值。
- lpush/rpush
- 用途:
- 数据缓冲地
- 用于消费者-生产者模型,例如消息队列
- 队列应用
四、Map类型
- 简述:Redis官方称之为Hash类型,但是实际上就是一个映射(Map)类型
- 相关命令:
- hset
- 效果:添加一个field-value
- 用法:hset <key> <field> <value>
- 解释:field实际上就是value对应的键
- hget
- 效果:获取指定key下指定field对应的值
- 用法:hget <key> <field>
- hmset
- 效果:hset的升级版,一次插入多个field-value
- 用法:hmset <key> <field> <value> [<field> <valuie> ...]
- hmget
- 效果:hget的升级版,一次获取多个field对应的值
- 用法:hmget <key> <field> [<field> ...]
- hincrby
- 效果:incrby的hash版
- 用法:hincrby <key> <field> <number>
- hset
- 用途:用于保存对象的状态
五、Set类型
- 简述:存储一个无序的唯一的string集合
- 相关命令:
- sadd
- 效果:添加一个或多个元素到set里
- 用法:sadd <key> <member> [<member> ...]
- smembers
- 效果:列出该set中所有的元素
- 用法:smembers <key>
- sismember
- 效果:判断指定元素是否在set内
- 用法:sismember <key> <member>
- sinter
- 效果:计算多个set之间的交集
- 用法:sinter <key> [<key> ...]
- 解释:单独对一个key使用时,会列出那个set中的所有元素
- spop
- 效果:随机弹出一个或多个set中的元素
- 用法:spop <key> [count]
- 解释:count值要弹出几个元素
- sunion
- 效果:得到多个set的合集
- 用法:sunion <key> [<key> ...]
- sinterstore/sunionstore
- 效果:获取sinter/sunion的执行结果,并保存到另一个set之中(如果原key存在,则覆盖)
- 用法:sinterstore/sunionstore destination <key> [<key> ...]
- scard
- 效果:获取set中元素个数
- 用法:scard <key>
- srandmember
- 效果:spop的不删除元素版
- 用法:srandmember <key> [count]
- sadd
- 用途:存储唯一的序列
六、Sorted Set类型
- 简述:Sorted Set是在Set类型的基础上给每个元素添加了一个score属性,由该score属性和元素的字符大小决定该set中的元素顺序。Sorted Set是基于跳表的数据结构进行实现的,所以即使是有序插入,速度也非常快。Sorted Set也支持只按字典顺序排序(Redis > 2.8),相关命令不列出
- 相关命令:
- zadd
- 效果:添加一个或多个带分数的元素进sorted set
- 用法:zadd <key> [NX|XX] <score> <member> [score member ...]
- 解释:score就是该元素的分数,需要指定
- zrange/zrevrange
- 效果:用在sorted set中的lrange
- 用法:zrange/zrevrange <key> <start> <stop> [WITHSCORES]
- 解释:withscores加上,会同时返回元素的score,zrevrange返回的是反向结果(从后边开始)
- zrangebyscore
- 效果:返回指定score范围内的元素(包括两端)
- 用法:zrangebyscore <key> <min> <max> [WITHSCORES]
- zrem
- 效果:去除一个或者多个元素
- 用法:zrem <key> <member> [<member> ...]
- zremrangebyscore
- 效果:删除根据score指定范围内的元素
- 用法:zremrangebyscore <key> <min> <max>
- zrank/zrevrank
- 效果:显示从前/后边算起的指定元素的位置
- zrank <key> <member>
- zadd
- 用途:解决了排序问题的set,适合排行榜这种需求
七、Bitmap类型
- 简述:Bitmap实际上使用String类型存储的,所以使用get命令能够输出对应的值。Bitmap就是一堆二进制数的集合,根据value最大不能超过512MB来算,一共可以存储232个比特位。Bitmap是按需存储的,如果存储的位置大于当前存储的值的位数,则会自动扩增
- 相关命令:
- setbit
- 效果:在某个位置上设置0或者1
- 用法:setbit <key> <offset> <value>
- 解释:offset指的是设置的位置,从0开始
- getbit
- 效果:返回某个比特位上的值
- 用法:getbit <key> <offset>
- bitop
- 效果:对多个Bitmap进行与(and)、或(or)、非(not)、异或(xor)操作,并将结果存入指定key中
- 用法:bitop <operation> <destkey> <key> [<key> ...]
- 解释:destkey是需要存储结果的key
- bitcount
- 效果:获取指定Bitmap中指定范围内比特位为1的个数
- 用法:bitcount <key> [<start> <end>]
- bitpos
- 效果:找出指定Bitmap中第一个设置为1或者0的比特位序号
- 用法:bitpos <key> <bit> [start] [end]
- 解释:bit为你要寻找的值,1还是0
- setbit
- 用途:用于需要以极小的空间控制极多状态的情况,比如寄存器这种情况,也可以用于各种数据的实时分析
八、HyperLogLogs类型
- 简述:用于计算不同元素的个数。(重点!!!)只在于计算个数,该类型并不会实际去存储添加进去的元素,使用该类型去完成计算非重复操作出现的个数这类需求有着很大的优势(土法需要花大量存储空间去存储已经见过的值,为了确保元素不同)。该类型可以使用get命令查看HLL(HyperLogLogs)编码后的序列,使用set也可以反序列化回去
- 相关命令:
- pfadd
- 效果:添加一个或者多个需要计算的元素进HLL
- 用法:pfadd <key> <element> [<element> ...]
- pfcount
- 效果:得到一个或者多个HLL的不同元素的个数结果
- 用法 pfcount <key> [<key> ...]
- pfadd
- 用途:计算非重复操作出现的个数这类需求
参考文档:
[1] An introduction to Redis data types and abstractions
网友评论