五大数据类型
字符串 String
(1)最基本的类型,一个Key对应一个Value。
(2)String类型是二进制安全的,redis的String可以包含任何数据,比如Jpg图片或者序列化的对象。
(3)一个Redis的字符串value最多是512M(理论)。
哈希 Hash(类似Map)
(1)hash是一个键值对集合。
(2)hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
类似于Java里面的Map<String,Object>
列表 List
Redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部或者尾部,底层实际是个链表。
集合 Set
Redis的Set是String类型的无序集合,他是通过HashTable实现的。
有序集合 Zset(Sorted Sets)
Redis的Zset和set一样也是String类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数
Redis正是通过分数来为集合中的成员进行从小到大的排序,Zset的成员是唯一的,但分数(Score)却可以重复。
数据类型操作命令
操作命令大全:http://redisdoc.com/
键(KEY)
(1)keys *
,按条件列出Key值
(2)exists key的名字
,判断某个key是否存在。
(3)move key db
,当前库就没有了,被移除了(移动、剪切功能)
(4)expire key 秒钟
,为给定的key设置过期时间
(5)ttl key
,查看还有多少秒过期,-1表示永不过期,-2表示已经过期
(6)type key
,查看你的key是什么类型
字符串(String)
单值单Value。
(1)set、get、del、append、strlen,顾名思义:设置,获取,删除,追加,返回长度。
(2)incr、decr、incrby、decrby,一定要是数字才能进行加减
incr和decr递增和递减,incrby和decrby指定加减某数字,incrby k2 3
,即K2的Value加3。
(3)getrange、setrange:
getrange用法:getrange key start end
,返回指定区间的字符串。
setrange用法:setrange key offset value
,从offset位置开始设置value,覆盖。
(4)setex、setnx:
setex用法:setex key second value
,(set with expire)设置一个自带过期时间的KV对。
setnx用法:setnx key value
,(set in not exist)若不存在才设置,相比set不会覆盖。
(5)mset、mget、msetnx:m是more的意思
mset用法:mset key value [key value ...]
,设置多个值
mget用法:mget key [key ...]
,获取多个值
msetnx用法:msetnx key value [key value ...]
,同上,不覆盖,注意失效一锅端,其中一个存在,其他的都不会设置进去,有点类似于事务的提交和回滚。
列表(List)
单值多Value。
常用用法
(1)lpush、rpush、lrange:
lpush用法:lpush key value [value ...]
,左侧(头部)插入,使用lrange
后进先出倒序输出。
rpush用法:rpush key value [value ...]
,右侧(尾部)插入,使用lrange
先进先出正序输出。
lrange用法:lrange key start end
,指定的Key的范围从start到end输出,类型必须为list,从头部开始输出。
(2)lpop、rpop:
lpop用法:lpop key
,弹出栈顶元素。
rpop用法,rpop key
,弹出栈尾元素。
(3)lindex:lindex key index
,按照索引下标获取元素,从上到下(左到右,头到尾)。
(4)llen:返回list长度。
(5)lrem:lrem key count value
,删除count个value值,从头到尾进行删除,若没有则返回0。
(6)ltrim:ltrim key start end
,截取指定范围的值后再赋值个Key,相当于subString。
(7)rpoplpush:rpoplpush source destination
,用源列表底部弹出,从头部插入到目标列表。
(8)lset:lset key index value
,对某个索引的value进行设值。
(9)linset:linsert key BEFORE|AFTER pivot value
,在第一个pivot的前面或后面,插入一个value。
总结
它是一个字符串链表,left、right都可以插入删除。
若键不存在,创建新的链表;
若键已经存在,新增内容;
如果值全部移除,对应的键也就消失了;
链表的操作无论是头和尾效率都极高,但对中间元素进行操作,效率就很低下。
集合(Set)
单值多Value。
常用用法
(1)sadd、smembers、sismember:
sadd用法:sadd key value [value ...]
,插入一个或多个值,会自动去掉重复的元素进行插入。
smembers用法:smembers key
,查看某个key的set集合的值。
sismember用法:sismember key value
,查看key对应的set集合是否包含value,包含返回1,否则返回0。
(2)scard:scard key
,获取集合里面元素的个数。
(3)srem:srem key value [value ...]
,删除集合中的单个或多个元素。
(4)srandmember:srandmember key [count]
,从指定集合中随机返回count个元素。
(5)spop:spop key [count]
,随机出count个元素。
(6)smove:smove source destination value
,从source中删除,增加到destination中。
(7)数学集合类:差集、交集、并集
差集sdiff:sdiff key [key ...]
,以第一个为全集,减去后面的元素。
交集sinter:sinter key [key ...]
,求几个set集合的交集。
并集sunion:sunion key [key ...]
,求几个set集合的并集。
哈希(Hash)
KV模式不变,但是value是一个键值对。
常用用法
(1)hset、hget、hmset、hmget、hgetall、hdel
hset用法:hset key field value
,设置key对应的field的值。
hget用法:hget key field
,获取key的field对应的value。
hmset用法:hmset key field value [ field value ...]
,设置key对应的多个field的值。
hmget用法:hmget key field [field ...]
,获取key的多个field对应的value。
hgetall用法:hgetall key
,获取对应key的全部[key value]。
hdel用法:hdel key field [field ...]
,删除指定key的指定field(多个)的值。
(2)hlen:hlen key
,返回指定key对应的field的个数。
(3)hexists:hexists key filed
,判断指定key是否具有某个field,有返回1,否则返回0。
(4)hkeys、hvals:
hkeys用法:hkeys key
,返回指定key对应的所有field。
hvals用法:hvalskey
,返回指定key的所有field的所有value。
(5)hincrby、hincrbyfloat:
hincrby用法:hincrby key field increment
,指定key的指定field进行加increment(整数,可以是负数,减法),必须是数字类型。
hincrbyfloat用法:hincrbyfloatkey field increment
,指定key的指定field进行加increment(小数,可以是负数,减法),必须是数字类型。
(6)hsetnx:hsetnx key field value
,没有才设置,不会进行覆盖(putIfAbsent)。
有序集合(Zset)
在set的基础上,加了一个score值,如之前是set是k1 v1 v2 v3,现在zset是k1 score1 v1 score2 v2…。
常用用法
(1)zadd、zrange:
zadd用法:zadd key score value [score value ...]
,给value前面加上一个score值,用于排序。
zrange用法:zrange key start end [withscores]
,按照score从小到大输出set集合,如果带上参数withscroes
则输出的是value+score,注意若分数相同,采用的稳定的(相对位置不变)排序算法进行排序输出。
(2)zrangebyscore:zrangbyscore key min max [withscores] [limit offset count]
,从min的分数到max的分数的value值进行输出,注意:(
代表不包含,如zrangbyscore zset01 (60 (80
,意思是输出分数大于60小于80的value值。limit相当于分页(在有限的第一次结果集中再次截取),从offset开始,输出count个。
(3)zrem:zrem key member [member ...]
,从集合中删除某个Value。
(4)zcard、zcount:
zcard用法:zcard key
,统计value的个数。
zcount用法:zcount key min max
,统计score从min到max的value个数,这里同样可以使用(
取开区间。
(5)zscore:zscore key value
,拿到该Value对应的score。
(6)zrank、zrevrank:
zrank用法:zrank key value
,拿到该Value对应的score的排名,即下标。
zrevrank用法:zrevrankkey value
,拿到该Value对应的score的逆序排名。
(7)zrevrange:zrevrange key start end
,按照分数从大到小输出set集合。
(8)zrevrangebyscore:zrevrangebyscore key max min
,score满足从max到min的value进行输出,同样(
生效。