Redis数据类型(5种常用)
string String
hash HashMap
list LinkedList
set HashSet
sorted_set TreeSet
string类型数据
基本操作
添加/修改数据
set key value //添加或修改key&value
获取数据
get key //获取该key下的value
删除数据
del key //删除该key
添加/修改多个数据
mset key1 value1 key2 value2 … //批量添加或修改key&value
获取多个数据
mget key1 key2 … //批量获取key下的value
获取数据字符个数(字符串长度)
strlen key //获取该key下的value字符串的长度
追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
append key value //添加信息到该key尾部(没有则新建该key)
扩展操作
设置数值数据增加指定范围的值
incr key //让key的value增加1(该key的value得是数字)
incrby key increment //让key的value增加指定大小increment(该key的value得是数字)
incrbyfloat key increment //让key的value增加指定大小increment(该key的value得是数字 可以增加小数 已经是小数的不可以增加Integer型数)
设置数值数据减少指定范围的值
decr key //让key的value减少1(该key的value得是数字)
decrby key decrement //让key的value减少指定大小decrement(该key的value得是数字)
设置数据具有指定的生命周期
setex key seconds value //新增一个具有指定生命周期的key(或者修改现有的key的生命周期)
psetex key milliseconds value //新增一个具有指定生命周期的key(或者修改现有的key的生命周期)时间单位为毫秒
操作的注意事项
数据操作不成功的反馈与数据正常操作之间的差异
① 表示运行结果是否成功
(integer) 0 : false 失败
(integer) 1 : true 成功
② 表示运行结果值
(integer) 3 → 3 3个
(integer) 1 → 1 1个
数据未获取到
(nil)等同于null
数据最大存储量
512MB
数值计算最大范围(java中的long的最大值)
9223372036854775807
hash类型数据
基本操作
添加/修改数据
hset key field value //设置key以及其所属下的field与对应的value
获取数据
hget key field //获取key下对应的field的value
hgetall key //获取key下所有field和value(field与value都会显示)
删除数据
hdel key field1 [field2] //删除key下field(可以一次删除多个)
添加/修改多个数据
hmset key field1 value1 field2 value2 … //设置key以及其所属下的多个field与对应的value
获取多个数据
hmget key field1 field2 … //获取key下对应的多个field的value
获取哈希表中字段的数量
hlen key //获取key下有多少个field
获取哈希表中是否存在指定的字段
hexists key field //判断key中是否存在对应的field
扩展操作
获取哈希表中所有的字段名或字段值
hkeys key //获取key中所有的field
hvals key //获取key中所有的value
设置指定字段的数值数据增加指定范围的值
hincrby key field increment //让key中field对应的value增加指定大小increment(该key的value得是数字)
hincrbyfloat key field increment //让key中field对应的value增加指定大小increment(该key的value得是数字 可以增加小数 已经是小数的不可以增加Integer型数)
操作的注意事项
hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到, 对应的值为(nil)
每个 hash 可以存储 2^32-1个键值对
hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存 储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈
list类型数据
基本操作
添加/修改数据
lpush key value1 [value2] …… //设置or修改一个key在其左端添加value
rpush key value1 [value2] …… //设置or修改一个key在其右端添加value
获取数据
lrange key start stop //获取一个key中从start到stop的value
lindex key index //获取一个key中对应index的value
llen key //获取一个key中有多少个value
获取并移除数据
lpop key //在key左端删除一个value
rpop key //在key右端删除一个value
扩展操作
规定时间内获取并移除数据
blpop key1 [key2] timeout //从key的左端弹出一个数据,如果第一个key中没有数据,那么将访问第二个key,依此类推 如果所有的key中都没有数据则会进入阻塞态进行等待,直到有数据或者到达超时时间 并且所有的key只会弹出第一个有数据的key的数据
brpop key1 [key2] timeout //从key的右端弹出一个数据,如果第一个key中没有数据,那么将访问第二个key,依此类推 如果所有的key中都没有数据则会进入阻塞态进行等待,直到到达有数据或者到达超时时间 并且所有的key只会弹出第一个有数据的key的数据
brpoplpush source destination timeout //将一个key的尾部数据弹出放入另一个key的头部,如果第一个key中没有数据,那么会进入阻塞态进行等待,直到有数据或者到达超时时间
移除指定数据
lrem key count value //删除该key中count个对应的value(比如key中有3个qwe删除2个)如果key中对应的value不足count个,那么只会删除key中存在的对应的value
操作注意事项
list中保存的数据都是string类型的,数据总容量是有限的,最多2^32 - 1 个元素 (4294967295)
list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
获取全部数据操作结束索引设置为-1
list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载
set类型数据
基本操作
添加数据
sadd key member1 [member2] //往key中添加数据(没有则新建key)
获取全部数据
smembers key //获取key中的全部数据
删除数据
srem key member1 [member2] //删除key中的数据
获取集合数据总量
scard key //获取key中有多少个member
判断集合中是否包含指定数据
sismember key member //判断key中是否存在指定member
扩展操作
随机获取集合中指定数量的数据
srandmember key [count] //随机从key中获取count个member(默认为1)
随机获取集合中的某个数据并将该数据移出集合
spop key [count] //随机从key中获取并删除count个member(默认为1)
求多个集合的交、并、差集
sinter key [key] //求多个key中member的交集
sunion key [key] //求多个key中member的并集
sdiff key [key] //求多个key中member的差集(第一个key中的member去除其他key中的公共member的结果)
求多个集合的交、并、差集并存储到指定集合中
需要注意的是,将结果放入destination中会将destination中原本的内容去除掉
sinterstore destination key [key] //求多个key中member的交集并放入destination中
sunionstore destination key [key] //求多个key中member的并集并放入destination中
sdiffstore destination key [key] //求多个key中member的差集并放入destination(第一个key中的member去除其他key中的公共member的结果)
将指定数据从原始集合中移动到目标集合中
smove source destination member //将source中的指定member移动到destination中
操作的注意事项
set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份
set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间
sorted_set 类型数据
基本操作
添加数据
zadd key score1 member1 [score2 member2] //给key添加member并标注member的score(排序按照score来排)
获取全部数据
zrange key start stop [WITHSCORES] //返回key中从start到stop的member(按照score排序) 可选择withscores 让member带对应的score一起返回
zrevrange key start stop [WITHSCORES] //返回key中逆序从start到stop的member(按照score排序 可选择withscores 让member带对应的score一起返回)
删除数据
zrem key member [member ...] //删除key中的指定member与其score
按条件获取数据
zrangebyscore key min max [WITHSCORES] [LIMIT offset count] //按照范围获取数据(可选择withscores 让member带对应的score一起返回 limit中offset表示往右几位开始查询 count表示返回几个)
zrevrangebyscore key max min [WITHSCORES] //按照范围逆序获取数据(可选择withscores 让member带对应的score一起返回 limit中offset表示往右几位开始查询 count表示返回几个)
条件删除数据
zremrangebyrank key start stop //按照序列范围删除数据
zremrangebyscore key min max //按照大小范围删除数据
获取集合数据总量
zcard key //获取key中有多少个member
zcount key min max //获取key中有多少个member score在指定范围之间
集合交、并操作
zinterstore destination numkeys key [key ...] //对numkeys个key进行交操作将结果放入destination中(是以member来判断)
zunionstore destination numkeys key [key ...] //对numkeys个key进行并操作将结果放入destination中(是以member来判断)
扩展操作
获取数据对应的索引(排名)
zrank key member //获取member在key中的排名
zrevrank key member //获取member在key中的逆序排名
score值获取与修改
zscore key member //获取key中指定member的值
zincrby key increment member //将key中指定member的值进行修改
操作的注意事项
score保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992
score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时 候要慎重
sorted_set 底层存储还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将被反 复覆盖,保留最后一次修改的结果
key通用操作
基本操作
删除指定key
del key //删除指定key
获取key是否存在
exists key //判断指定key是否存在
获取key的类型
type key //获取指定key的类型
扩展操作(时效性控制)
为指定key设置有效期
expire key seconds //给指定key设置有效期(单位:秒)
pexpire key milliseconds //给指定key设置有效期(单位:毫秒)
expireat key timestamp //使用Unix时间表示key的生存时间(单位:秒)
pexpireat key milliseconds-timestamp //使用Unix时间表示key的生存时间(单位:毫秒)
获取key的有效时间
ttl key //获取key的剩余生存时间(精确到秒)
pttl key //获取key的剩余生存时间(精确到毫秒)
切换key从时效性转换为永久性
persist key //将key的生存时间设置为永久
查询key
keys pattern //查询模式规则:
* 匹配任意数量的任意符号 ? 配合一个任意符号 [] 匹配一个指定符号
keys * 查询所有
keys it* 查询所有以it开头
keys *heima 查询所有以heima结尾
keys ??heima 查询所有前面两个字符任意,后面以heima结尾
keys user? 查询所有以user开头,最后一个字符任意
keys u[st]er 查询所有以u开头,以er结尾,中间包含一个字母,s或t
其他操作
为key改名
rename key newkey //将指定key删除赋值给newkey 如果newkey已存在将覆盖newkey
renamenx key newkey //将指定key删除赋值给newkey 如果newkey已存在操作将失败
对所有key排序
sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
//BY用于生成用于排序的 Key 可以是一个并不存在的key,这会导致SORT命令跳过排序操作
//ASC从小到大 DESC从大到小
//ALPHA使字符串值按照字典顺序排序
//LIMIT后offset表示往右偏移几位开始 count表示个数
//GET获取每一个原始列表、集合或有序集合中元素的key
//STORE将结果存储于一个特定的列表中,以代替返回到客户端
其他key通用操作
help @generic //可以查看其他操作
数据库通用操作
db基本操作
切换数据库
select index //切换到指定数据库
其他操作
quit //退出
ping //判断与服务器连接是否仍然生效(服务器会返回一个pong)
echo message //打印给定的message(一般用于测试)
db相关操作
数据移动
move key db //将当前数据库的key移动到选定的数据库 db 当中。如果key 在目标数据库中已存在,或者key在源数据库中不存在,则key不会被移动。
数据清除
dbsize //返回当前数据库key的数量
flushdb //清空当前数据库中的所有 key
flushall //清空所有数据库中的所有key