Redis的基本使用
基本操作
- 信息添加:
set key value
,例如:set myname jerry
- 信息查询:
get key
,例如:get myname
(如果不存在会返回nil) - 清除屏幕信息:
clear
- 退出客户端
quit
exit
esc键
- 帮助命令:
help 命令名称
help @组名
(组名是string等)
数据类型
Redis五种常用数据类型:
- string
- hash
- list
- set
- sorted_set
string类型的使用
redis本身是一个Map,所有的数据都采用key:value的形式存储
数据类型指定value的类型,key永远为string类型
string类型也可以作为数字使用,但注意并不是数字
1. 基本操作:
- 添加数据:
set key value
- 获取数据:
get key
- 删除数据:
del key
- 添加多个数据:
mset key value1 value2 ....
,m是Multiple - 获取多个数据:
mget key1 key2 ....
- 获取字符串长度:
strlen key
- 追加信息到原始信息后面:
append key value
,set
会覆盖
如果选择单数据操作和多数据操作:
数据在发送时和响应时都需要时间,执行的时间是一样的。数据多的时候选择单数据多次发送会浪费发送和响应时间。
2. string类型数据的扩展操作:
string类型可以当作数字使用
假如存的string是一个纯数字:
-
数字加一:
incr key
-
数字加指定数值:
incrby key increment
,increment
是指定的数字 -
数字加指定的值并且可以是浮点数:
incrbyfloat key increment
-
数字减少指定数值:
decr key
decyby key increment
-
减浮点数可以用
incrbyfloat key 负数
如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。
数字最大值:9223372036854775807 -
设置数据具有指定生命周期:
setex key seconds value
-
毫秒级:
psetex key milliseconds value
注意事项:
- 返回值可以是成功或失败,分别为0, 1
- 也可使结果只0,1,2,3
- 数据未获取到:nil 等同于 null
- 数据最大存储了:512MB
- key的命名规范:
表明:主键:主键值:属性
- string可以存储json形式,但是不易修改
hash类型的使用
1. 基本介绍:
hash类型:底层使用哈希表结构实现数据存储
hash存储结构优化
- 如果field数量较少,存储结构优化为类数组结构
- 如果field数量较多,存储结构使用HashMap结构
2. 基本操作:
- 添加数据:
hset key field value
- 获取数据:
hget key field
- 获取所有数据:
hgetall key
- 删除数据:
hdel key field1 [...]
- 添加多个数据:
hmset key field1 value1 field2 value2 .....
- 获取多个数据:
hmget key field1 field2 ......
- 获取哈希表中字段数量:
hlen key
- 获取哈希表中是否存在指定的字段:
hexists key field
3. 扩展操作:
- 获取哈希表中所有字段名:
hkeys key
- 获取哈希表中所有字段值:
hvals key
- 设置指定字段数值数据增加:
hincrby key field increment
- 增加浮点数:
hincrbyfloat key field increment
- 如果不存在添加:
hsetnx key field value
,存在则不改
list类型的使用
1. 介绍:
数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
- 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
- list类型:保存多个数据,底层使用双向链表存储结构实现
- 因为是双向链表,所以有左右操作
2. 基本操作:
- 添加/修改数据:
lpush key value1 [value2] .....
- 添加/修改数据:
rpush key value1 [value2] .....
- 获取范围数据:
lrange key start stop
- 获取指定位置的数据:
lindex key index
- 获取list长度:
llen key
- 获取并删除数据:
lpop key
rpop key
3. 扩展操作:
- 规定时间内获取并移除数据:
blpop key1 [key2] timeout
brpop key1 [key2] timeout
。- 说明,这个操作最多执行一次,如果有数据会直接弹出去,没有数据会在指定时间内等待,这段时间如果有数据进入,弹出即可。
- 指定时间内取出最后一个元素放入另一个list的头部:
brpoplpush source destination timeout
- 移除指定数据:
lrem key count value
,list是可以重复的,从左面数删除多少个此元素
set类型的使用
1. 基本介绍:
- 新的存储需求:存储大量的数据,在查询方面提供更高的效率
- 需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
- set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的(hash的键不允许)
2. 基本操作:
- 添加数据:
sadd key member1 [member2] ...
- 获取全部数据:
smembers key
- 删除数据:
srem key member1 [member2] ...
- 获取集合数据总量:
scard key
- 判断集合中是否包含指定数据:
sismember key member
3. 扩展操作:
- 随机获取集合中指定数量的数据:
srandmember key [count]
- 随机获取集合中的某个数据并将该数据移出集合:
spop key [count]
- 求两个集合的交集:
sinter key1 [key2]
- 求两个集合的并集:
sunion key1 [key2]
- 求两个集合的差集:
sdiff key1 [key2]
- 求两个集合的交集并存储到指定集合中:
sinterstore destination key1 [key2]
- 求两个集合的并集并存储到指定集合中:
sunionstore destination key1 [key2]
- 求两个集合的差集并存储到指定集合中:
sdiffstore destination key1 [key2]
- 将指定数据从原始集合中移动到目标集合中:
move source destination member
sorted_set类型的使用
1. 基本介绍:
- 新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
- 需要的存储结构:新的存储模型,可以保存可排序的数据
- sorted_set类型:在set的存储结构基础上添加可排序字段
2. 基本操作:
- 添加数据:
zadd key score1 member1 [score2 member2]
- 获取指定部分的数据:
zrange key start stop [WITHSCORES]
- 排序是按照从小到大,如果反着获取:
zrevrange key start stop [WITHSCORES]
withscores
展现权重- 删除数据:
zrem key member [member] ....
- 按条件获取数据:
zrangebyscore key min max [WITHSCORES] [LIMIT]
- 6是通过权重获取指定权重范围的数据,
limit
和mysql的分页一个意思,两个参数偏移量
和记录条数
- 反着获取:
zrevrangebyscore key max min [WITHSCORES]
- 按照排序条件删除数据:
zremrangebyrank key start stop
- 按照权重条件删除数据:
zremrangebyscore key min max
- 获取集合数据总量:
zcard key
- 通过权重获取集合数据数量:
zcount key min max
- 交集并集操作:
zinterstore/zunionstore destination numkeys key [key] .....
destination
是存到哪,numkeys
是后面跟着几个集合
3. 扩展操作:
- 获取数据对应的索引(排名):
zrank key member
zrevrank key member
- score值获取与修改:
zscore key member
zincrby key increment member
- 获取当前系统时间:
time