redis数据类型介绍
你也许已经知道Redis并不是简单的key-value存储,实际上他是一个数据结构服务器,支持不同类型的值。也就是说,你不必仅仅把字符串当作键所指向的值。下列这些数据类型都可作为值类型:
-
Strings(字符串):二进制安全的字符串,意味着redis的string可以包含任何数据。比如jpg图片或者序列化的对象。一个键最多能存储512MB。二进制安全是指,在传输数据的时候,能保证二进制数据的信息安全,也就是不会被篡改、破译;如果被攻击,能够及时检测出来。
-
Lists(列表):按插入顺序排序的字符串元素的集合。他们基本上就是链表(linked lists)。你可以一个元素到列表的头部(左边),或者添加一个元素到尾部(右边)。
-
Sets(无序集合):不重复且无序的字符串元素的集合。
-
Sorted sets(有序集合):不重复且有序的字符串元素的集合。类似Sets,但是每个字符串元素都关联到一个叫score浮动数值(floating number value)。里面的元素总是通过score进行着排序,所以不同的是,它是可以检索的一系列元素。Sorted sets的元素是唯一的,但是score是可以重复的。
-
Hashes(哈希):由field和关联的value组成的map,field和value都是字符串的。是一个键值对集合,特别适用于存储对象。 Redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效key值。
关于key的几条规则:
- key不要太长。例如1024字节的键值就不是个好主意,不仅因为消耗内存,而且在数据中查找这类键值的计算成本很高。
- key也不要太短,要见名知意。比如你要用“u:1000:pwd”来代替“user:1000:password”,这没有什么问题,但后者更易阅读,并且由此增加的空间消耗相对于key object和value object本身来说很小。当然,没人阻止您一定要用更短的键值节省一丁点儿空间。
- 使用统一的命名规则。例如:”object-type:username:field”就是个很不错的主意,见名知意。
- key区分大小写。例如:"user:password"和"user:PASSWORD"是两个不同的key。
redis数据类型常见的操作命令
注:在redis里,执行指令返回结果中,0表示否,1表示是。
-
Strings常用命令:
- set key value:设置指定key的值,示例:
set key1 value1 - setex key seconds value:给指定的key设置value,并设置key的过期时间,单位秒,(set with expire)示例:
setex name 5 zhagnsan - setnx key value:当key不存在时设置key的值。(set if not exists),分布式锁的问题,示例:
setnx key2 helloworld - append key value:追加指定key的值,示例:
append key1 hello - get key:获取指定key的值,示例:
get key1 - getrange key start end:获取key中指定范围的value值,end为-1时,表示从start位置到value值的最后一个字符串,示例:
getrange key1 0 3 - setrange key offset value:替换key中指定offset偏移量的值,示例:
setrange key1 5 kitty - strlen key:返回key所存储的字符串值的长度,示例:
strlen key1 - del key:删除指定的key,示例:
del key1 - incr key:如果key指定的值是integer类型,则值自增1,示例:
incr key1 - decr key:如果key指定的值是integer类型,则值自减1,示例:
decr key1 - incrby key number:如果key指定的值是integer类型,则值自增number个数值,示例:
incrby key1 5 - decrby key number:如果key指定的值是integer类型,则值自减number个数值,示例:
incrby key1 5 - mset key value [key value ...]:批量设置多个key和值,示例:
mset a1 b1 a2 b2 - mget key value [key value ...]:批量获取多个key的值,示例:
mget a1 a2 - getset key value:先get再set,示例:
getset name lisi
- set key value:设置指定key的值,示例:
-
Lists常用命令:
- lpush key element [element ...] :给列表指定的key在头部(左边)设置多个元素,示例:
lpush numbers 1 2 3 4 5 - rpush key element [element ...] :给列表指定的key在尾部(右边)设置多个元素,示例:
rpush numbers1 a b c d e - lrange key start stop:获取key指定范围内的元素,stop为-1时,表示从start位置开始一直到list的最后一个元素,示例:
lrange numbers 1 3 - lpop key:弹出指定key头元素,即左边第一个元素,示例:
lpop numbers - rpop key:弹出指定key:尾元素,即右边第一个元素,示例:
rpop numbers - lindex key index:根据索引下标获得指定key的元素,示例:
lindex numbers 1 - llen key:获取指定key元素的个数,示例:
llen numbers - lrem key count element:
- lpush key element [element ...] :给列表指定的key在头部(左边)设置多个元素,示例:
-
Sets常用命令:
- sadd key member [member ...]:给指定的key添加多个不重复的元素,示例:
sadd set1 1 2 3 4 - smembers key:查看指定key元素,示例:
smembers set1 - sismember key member:判断指定的key是否存在指定的值,示例:
sismember set1 2 - scard key:获取集合指定key元素的个数,示例:
scard set1 - srem key member [member ...]:删除集合中指定key的元素,示例:
srem set1 1 2 - srandmember key [count]:随机获取集合中指定key的count个值,count默认为:1,示例:
srandmember set1 2 - spop key [count]:出栈count个指定key的值,示例:
spop set1 2 - smove source destination member:将source的member元素移动到destination去,示例:
smove set1 set2 3 - sdiff key [key ...]:返回指定key的元素与其他多个key的差集,示例:
sdiff set1 set2 - sinter key [key ...]:返回指定key的元素与其他多个key的交集,示例:
sinter set1 set2 - sunion key [key ...]:返回指定key的元素与其他多个key的并集,示例:
sunion set1 set2
- sadd key member [member ...]:给指定的key添加多个不重复的元素,示例:
-
Sort Sets常用命令:
- zadd key score member [score member ...] :给指定的key添加多个不重复的元素,score用于元素的排序,示例:
zadd zset1 10 b 20 a 30 e 40 c 50 d - zrange key start stop [WITHSCORES]:查询从start到stop区间指定key的元素(顺序),stop为-1时,表示从start开始到最后一个元素,可选参数WITHSCORES表示带score显示,示例:
zrange zset1 0 -1 withscores - zrevrange key start stop [WITHSCORES]:查询从start到stop区间指定key的元素(逆序),stop为-1时,表示从start开始到最后一个元素,可选参数WITHSCORES表示带score显示,示例:
zrevrange zset1 0 -1 withscores - zrangebyscore key min max [WITHSCORES] [LIMIT offset count]:查询从min到max区间的score值的指定key的元素(顺序),可选参数WITHSCORES表示带score显示,可选参数LIMIT offset count用于分页显示,示例:
zrangebyscore zset1 21 50 withscores - zrevrangebyscore key min max [WITHSCORES] [LIMIT offset count]:查询从min到max区间的score值的指定key的元素(逆序),可选参数WITHSCORES表示带score显示,可选参数LIMIT offset count用于分页显示,示例:
zrangebyscore zset1 21 50 withscores - zrem key member [member ...]:移除集合指定key的一个或者多个元素,示例:
zrem zset1 e a - zcard key:返回集合指定key元素的个数,示例:
zcard zset1 - zcount key min max:返回集合指定key元素在min和max的score区间的个数,示例:
zcount zset1 31 50 - zrank key member:返回集合指定key的member元素的下标(通过score顺序排序),示例:
zrank zset1 d - zrevrank key member:返回集合指定key的member元素的下标(通过score逆序排序),示例:
zrevrank zset1 d
- zadd key score member [score member ...] :给指定的key添加多个不重复的元素,score用于元素的排序,示例:
-
Hashes常用命令:
- hset key field value [field value ...]:给指定的key设置一个或多个K-V键值对,示例:
hset user name zhangsan age 30 hight 170 - hsetnx key field value:如果指定的field还没存在,则给指定的key设置一个K-V键值对,示例:
hsetnx user weight 110 - hget key field:获取指定key的field字段的值,示例:
hget user name - hmset key field value [field value ...]:等价于hset,给指定的key设置一个或多个K-V键值对,示例:
hmset user name zhangsan age 30 hight 170 - hmget key field [field ...]:获取指定key的一个或多个field指定的值,示例:
hmget user name age hight - hgetall key:返回指定key的所有K-V键值对,示例:
hgetall user - hdel key field [field ...]:删除指定key的一个或者多个K-V键值对,示例:
hdel user name age - hlen key:返回指定key的K-V键值对的个数,示例:
hlen user - hexists key field:判断指定key的field是否存在,示例:
hexists user hight - hkeys key:返回key指定的所有field,示例:
hkeys user - hvals key:返回key指定的所有field对应的值,示例:
hvals user - hincrby key field increment:给指定的key的field的值进行自增increment数量,前提是field指定的值是integer类型的,示例:
hincrby user age 5 - hincrbyfloat key field increment:给指定的key的field的值进行自增increment数量,示例:
hincrbyfloat user money 11.11
- hset key field value [field value ...]:给指定的key设置一个或多个K-V键值对,示例:
-
其它常用命令:
- select index,切换数据库,index为redis数据库的索引下标,下标从0开始,默认16个库
- keys pattern:查看当前库的所有key,pattern支持正则表达式,示例:
keys * - exists key [key ...]:判断当前库中是否存在指定的key,示例:
exists set1 - move key dbindex:将当前库指定的key移动到dbindex指定下标的数据库,示例:
move user 1 - expire key seconds,给指定的key设置过期时间,单位秒,示例:
expire set1 5 - ttl key:查看指定的key还剩下多少过期时间,单位秒,-1表示永不过期,-2表示已过期,其他值表示剩下过期的时长,示例:
ttl set2 - type key:查看指定key的类型,示例:
type set2 - dbsize:查看当前数据库key的数量
- flushdb:清空当前数据库
- flushall:清空所有数据库