Binary-safe string:字符串,Binary-safe的意思是它自己不会应为某些特殊字符而致使字符串结束了,他能够包含任何字符。好比在C中,字符串的结尾是'\0',意味着这个字符以后的不能被当作当前字符的redis
Lists:存储string的链表,存储顺序即插入顺序 (不是经过数组实现)数组
Sets:每一个字符串惟一的存储集合bash
Sorted Sets:存储的每个字符串都是惟一的,同时每一个字符串会具有一个score的属性数据结构
Hashes:存储key和value的映射关系,key和value都是stringspa
Bit Array:像bit数组同样处理String值,每个bit均可以set和clear,计算1的数量等等code
HyperLogLogs:用来估计set中惟一值的个数对象
key能够包含任意得字符,好比将一张JPEG文件内容做为key。空字符串也是一个有效的key。redis的key使用时,有一些建议:排序
key最好不要太长。超过1024bytes的key一个是占用内存,再者每次去找key作匹配也是须要一些时间的索引
可用经过hash来解决,好比使用SHA1ip
key过短也很差。好比"user:1000:followers"显然比"u1000flw"拥有更好的可读性,key自己的这点增加所须要的空间比起key对象和object对象来讲能够忽略
本身掌握好这里头的平衡
尝试遵循必定的模式。好比以"object-type:id"这种方式来做为key的规则
key最大512M
EXPIRE 命令用来设置过时
过时的精度能够是秒或者毫秒
过时时间的分辨率一直是毫秒
过时时间自己会被持久化,即便redis自己中止服务了,停服期间过时的时间仍是一样计算
使用 PERSIST 能够去掉过时时间,永久保留 key
SET 命令来设置 string类型值,它会替代已经存储在redis中的key的值,即便原来存储的值类型不是string
- value大小不能超过512M
- 若是SET值时,发现已经存储,则不覆盖原值,能够经过
set mykey myValue nx
,即后面跟 nx 来实现这种语义;另外若是仅想在key存在的时候覆盖,能够经过set mykey myValue xx
即后面跟 xx 来实现这种语义
- 批量获取使用MSET,对应GET为MGET
- set key value ex 10 设置10秒后过时
INCR 命令会把 string 类型值当作integer,实现自增1,若是key不存在,它会被置为0,而后再自增1。若是 string 不能当作 integer 会抛出异常
- 自增的上限是64 bit的integer。
- 相似的命令有 INCRBY ,可自定义增加的大小。其他还有DECR DECRBY
- INCR命令是原子操做。
EXISTS 判断key是否存在
DEL 删除key
TYPE 判断key的类型
TTL 获取key的存活时间
LPUSH 命令向list头添加元素只须要常量时间,可一次添加多个
RPUSH 命令向list尾部添加元素只须要常量时间,可一次添加多个
LRANGE 提取list中必定范围内的元素,好比 lrange mylist 0 -1
,范围是两个索引,均可以是负数,-1表示最后一个,-2表示倒数第2个,依此类推
RPOP 返回list中的最后一个元素,并从list中移除它,若是没有元素了就返回 NULL
LTRIM 保留给定索引范围以内的数据,list中的其他值都删掉
BRPOP 从list中返会并删除最后一个元素,若是列表没有值,就阻塞,根据阻塞的时间,若是是0,就一直阻塞直到有值存在,大于0则阻塞相应的时间长度
BLPOP 对应BRPOP操做第一个元素
使用brpop/blpop 须要注意:
- 客户端的请求处理是按照顺序来的,第一个阻塞的当有其它客户端插入数据会第一个处理
- 它的返回会有两个值
- 超时返回NULL
当往redis中没有对应key存在的集合中push元素或者删除一个空的集合,redis须要主动的去建立空的集合或者是删除没有值的key。对应的操做有三条规则:
使用hash可以用来表明一个对象,放到hash里面的字段数量理论上是没有限制的
hmset user:1000 name paxi verified 1 a 10 //塞入user的多个字段
hget user:1000 name //获取name字段值
hmget user:1000 name verified //以数组形式返回值,key不存在返回null
hincrby user:1000 a 10 //将字段a增长10
复制代码
set在redis中用来存储string的无序集合。
sismember myset 1 //判断 1 是否是在集合 myset中
sunionstore myset1 myset2 //假如 myset1不存在,就至关于把 myset2 中的元素拷贝到了 myset1
复制代码
用来存储惟一的string,它每个值都包含一个score属性,它会根据以下规则排序
它内部实现是 dual-ported数据结构 ,内部同时包含了 skip list和 hash table,每次添加元素的时间是O(lgN),可是获取的时间是常量的
zadd hackers 1940 “Alan Kay” //往 hackers中添加 “Alan key” 它的score是1940
zrange hackers 0 -1 withscores //按照顺序获取hackers中的全部元素,0表示第一个,-1表示最后一个,同时返回对应元素的分数
zrevrange hackers 0 -1 //按照逆序
复制代码
它并不是一种数据结构,而是在string类型上定义的一种面向bit的操做。它最大的优点是能节省空间
它是一种几率数据结构,用来统计惟一的值。通常统计惟一的值的时候,须要记录全部已经访问过的元素,这会消耗大量的内存,可是使用HyperLogLogs只须要使用常量的内存,最差的状况下爱只须要12k,此时的精度不会差于1%。
HyperLogLogs实际只存储了一个状态,并不包含真实的元素的值