Redis_DataType.html
Redis是一个键值对型的数据库,但是支持多种数据结构。具体如下:
主要命令:
Set: 设置键值对的值,最后加可选参数nx是如果不存在,则定义,存在则不覆盖。xx是当存在再设定。ex后面跟int表明key存在的时间,类似于EXPIRE。
Get: 返回键值对的值
INCR: 当value值为整数时,会自增,注意这里的自增是线程安全的。如果不是该种类型就报错。
INCRBY: 后面跟key + int数值,增加多少,同样是线程安全的。(同样由DECR,DECRBY是减少。)
GETSET: 设置键值对的新值,但是返回的是老值,未改变之前的值。
MGET,MSET: 同GET,SET不过是一次针对多个键值对的,类似于对list的赋值。
EXISTS: 存在返回1,不存在返回0
DEL: 删除键值对,记得同样是删除成功返回1,不成功返回0
TYPE: 返回输入的value的类型。对于空的键值对返回none。
EXPIRES: 设置一个键值对的过期时间,在过期之后会自动DEL,和用户操作的效果一致。
(设置可以使用seconds和milliseconds,但是分辨率是milliseconds。并且Redis记录了准确的销毁时间,所以即使在key销毁前server已经shutdown,仍然可以在server重新运行时得到正确的处理。)
EXPIRE可以重入。
PERSIST: 直接持久化,在EXPIRE时期可以打断计时,将键值对持久化。
TTL: 可以查询key还能存活的时间,
PEXPIRE、PTTL:分别是EXPIRE和TTL的milliseconds版本。
Redis中的Lists是以链表为基础设置的。所以在头尾增减元素十分快,但是在链表中间寻找特定元素会比较慢,如果需要则应该选用Sorted Sets。特别地:Redis中的Lists是左边是头,右边是尾,因此对头操作是LXXX,对尾操作是RXXX。
两种适用场景为:
主要命令:
LPUSH、RPUSH: 分别在头尾添加新元素,可以一次添加多个。
LRANGE: 查找范围内的Lists元素,LRANGE mylists 0 -1 这里的参数中第一个参数是寻找范围的起始地址,后面的是终止地址。而终止元素支持负数,末尾是-1,倒数第二是-2,依次类推。(特别地:不支持逆向寻址,即始终保持从头开始的顺序性,如 LRANGE mylists -1 -2 是error,但是LRANGE mylists -2 -1 就可以得到正确的结果。怀疑是单向链表的实现缘故。)
LPOP、RPOP: 弹出元素,并且在元素list中删除元素。同样左右。对一个空的Lists进行POP得到nil,而每个空List都有一个null元素占位。
LTRIM: 产生有上限的Lists(Capped Lists),只存在最新的N个元素,对一个已经存在的Lists使用,则会对Lists产生截断效果。LTRIM nylists 0 2会保留0到2的元素,其余元素丢弃。
BRPOP、BLPOP: 是BPOP和LPOP的Blocked版本,当取不到元素时会Block,后面跟时间是等待时间 BRPOP mylists 6在6秒内如果还是拿不到元素就返回nil。但是等待时间设置为0,则会无限等待。(特别地:BRPOP支持多个Lists同时操作,所以针对多个Lists时有):
1. Clients会以进入的次序响应:如,第一个client在取元素时被Block,而在第二个client的push操作后,第一个client会首先得到元素,而不是后面的第三,第四。
2. BRPOP、BLPOP的返回值和LPOP、RPOP不同(由于支持多个Lists同时操作),BLOCK版本的返回一个有两个元素的Array,第一个元素代表了取出元素的Lists名。
3. 阻塞时间到则返回nil。
(B)RPOPLPUSH: 将source的List中的尾部元素,放到destination的List的头部,线程安全的,不会出现多个client的冲突。可以实现Block Operation的安全操作。如果source和destination都是同一Lists则是对Lists的旋转,形成Circle Lists。
Redis中的Hashes和普通数据结构中的hashmap一样,
主要命令:
HSET、HGET: 单个定义hashmap中元素的一个属性,一次一个。
HMSET、HMSET: 批量定义hashmap中元素的不同属性,一次多个。
HGETALL: 仅给出元素名,得到元素的全部属性。
HINCRBY: 对于元素域中的属性中的数字自增一个int。
Redis中的Sets是一个无序的String集合,不允许重复。适用于数据间结构关系的表现,比如一个元素可以有多个tags,可以在该元素上有个set,表示同那几个tag相关。也可以每个tag维护一个set,表示都有哪些元素属于这个tag。
主要命令:
SADD: 向一个Set集合中加入元素。
SMEMNERS: 返回当前Set中所有的元素。
SISMENBER: 在Set中返回1,否则返回0。
SINTER: 返回多个Set中相同的部分(交集)。
SPOP: 将集合中的元素弹出。
SUNION、SUNIONSTORE: SUNION返回多个几个的并,而SUNIONSTORE将后面参数中的集合做交集并存储在另一个set中。
SCARD: 返回当前Set中的基数
SRANDMEMBER: 从Redis2.6开始,当附加参数为负数则返回有重复的随机元素,个数是附加参数的绝对值,而当附加参数是正数时,则返回不重复的元素,如果正数大于Sets的size则返回所有的元素。
Sorted Sets类似Sets和Hashes的混合,Sorted Sets中的所有元素都是唯一的String Elements,但是每一个元素都维护一个浮点数Score,正是排序的标准。
排序的标准:
每当新添加一个元素,Sorted Sets都会更新,所以适合于大量更新的排行榜等应用。
主要命令:
ZADD: 同SADD,不过在增加的元素前有一个score值需要添加。
ZRANGE: 同LRANGE,其中0代表第一个元素,-1代表遍历整个集合。加上withscores会同时显示出score。
ZREVRANGE: 同ZRANGE反向的排序结果。
ZRANGEBYSCORE: 可以对排序进行操作,如 ZRANGEBYSCORE hackers -inf 1950 得到score从负的无穷到1950的全部元素。
ZREMRANGEBYSCORE: 可以移除在一个区间内的元素。返回移除的元素的数目。
Z(REV)RANK: 给出制定元素的排序值。正向\反向
Z(REV)RANGEBYLEX: 得到按照字典顺序排序的结果。可以有参数,根据首字母等排序,具体可以查看命令的文档。
ZREMRANGEBYLEX: 按照字典顺序移除元素。
Bitmaps不是一种数据结构,本质上是一系列针对String的Bits操作。最大容量2^32bits。
主要命令:
SETBIT: 对一个String的key中的某一个元素位置位,第一个参数是被置位在该key中的位置,第二位是1或者0,对于超出该key范围的置位,会自动延伸该String。
GETBIT: 参数同SETBIT,得到某一key上的某一位的bit值,默认是0,且超出key的查询同样会自动延长key。
BITOP: 提供AND,OR,XOR,NOT四种位操作的模式,具体的应用规则看文档。长度不一的String就会补零到同等长度。
BITCOUNT: 返回String中设置为1的位的个数。
只知道是估算Sets中的基数的,具体不懂。这里先省略,具体需要使用时再去参考文档。
generated by haroopad