概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
命令 | 说明 |
---|---|
set key value | 添加/修改数据 |
get key | 获取数据 |
del key | 删除数据 |
mset key1 value1 key2 value2 … | 添加/修改多个数据 |
mget key1 key2 … | 获取多个数据 |
strlen key | 获取数据字符长度 |
append key value | 追加数据到原始数据后面 |
string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。
redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发 带来的数据影响。
注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。
9223372036854775807(java中long型数据最大值,Long.MAX_VALUE)
incr key
incrby key increment
incrbyfloat key increment
decr key
decrby key increment
setex key seconds value
psetex key milliseconds value
新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
需要的存储结构:一个存储空间保存多个键值对数据
hash类型:底层使用哈希表结构实现数据存储
命令 | 说明 |
---|---|
hset key field value | 添加/修改数据 |
hget key field | 获取指定字段数据 |
hgetall key | 获取全部字段数据 |
hdel key field | 删除字段数据 |
hmset key field1 value1 field2 value2 … | 添加/修改多个数据 |
hmget key field1 field2 … | 获取多个数据 |
hlen key | 获取哈希表中字段的数量 |
hexists key field | 获取哈希表中是否存在指定的字段 |
hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)。
hash 类型数据操作的注意事项每个 hash 可以存储 2^32 - 1 个键值对。
hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用。
hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈。
hkeys key
hvals key
hincrby key field increment
hincrbyfloat key field increment
lpush key value1 [value2] ……
rpush key value1 [value2] ……
lrange key start stop
lindex key index
llen key
lpop key
rpop key
list中保存的数据都是string类型的,数据总容量是有限的,
最多2^32- 1 个元素 (4294967295)。
list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
获取全部数据操作结束索引设置为-1
list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载
blpop key1 [key2] timeout
brpop key1 [key2] timeout
brpoplpush source destination timeout
lrem key count value
命令 | 说明 |
---|---|
sadd key member1 [member2] | 添加数据 |
smembers key | 获取全部数据 |
srem key member1 [member2] | 删除数据 |
scard key | 获取集合数据总量 |
sismember key member | 判断集合中是否包含指定数据 |
srandmember key [count] | 随机获取集合中指定数量的数据 |
spop key [count] | 随机获取集合中的某个数据并将该数据移出集合 |
set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份
set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间
sinter key1 [key2]
sunion key1 [key2]
sdiff key1 [key2]
sinterstore destination key1 [key2]
sunionstore destination key1 [key2]
sdiffstore destination key1 [key2]
smove source destination member
命令 | 说明 |
---|---|
zadd key score1 member1 [score2 member2] | 添加数据 |
zrange key start stop [WITHSCORES] | 获取全部数据 |
zrevrange key start stop [WITHSCORES] | 获取全部数据 |
zrem key member [member …] | 删除数据 |
zrangebyscore key min max [WITHSCORES] [LIMIT]
zrevrangebyscore key max min [WITHSCORES]
zremrangebyrank key start stop
zremrangebyscore key min max
zcard key
zcount key min max
zinterstore destination numkeys key [key ...]
zunionstore destination numkeys key [key ...]
score保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992
score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时候要慎重
sorted_set 底层存储还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将被反复覆盖,保留最后一次修改的结果
zrank key member
zrevrank key member
zscore key member
zincrby key increment member
getbit key offset
setbit key offset value
bitop op destKey key1 [key2...]
bitcount key [start end]
pfadd key element [element ...]
pfcount key [key ...]
pfmerge destkey sourcekey [sourcekey...]
geoadd key longitude latitude member [longitude latitude member ...]
georadius key longitude latitude radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count]
geopos key member [member ...]
georadiusbymember key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count]
geodist key member1 member2 [unit]
geohash key member [member ...]