redis基础命令
Redis数据存储格式:
Redis常用命令:
功能 | 命令 | 范例 |
---|---|---|
设置数据 | set key value | set name Tom |
获取数据 | get key | get name |
清屏 | clear | clear |
获取帮助 | help | help |
退出 | quit/exit | quit/exit |
Redis数据类型(5种):
string类型数据的基础操作:
- 添加/修改数据
单个数据 | 多个数据 |
---|---|
set key value | mset key1 value1 key2 value2 … |
- 获取数据
单个数据 | 多个数据 |
---|---|
get key | mget key1 key2 … |
- 删除数据
del key |
- 获取数据字符个数(字符串长度)
strlen key |
- 追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
append key value |
string类型数据的扩展操作:
数据库分表场景:
- 设置数值数据增加指定范围的值
命令 | 范例(num初始值为”1”) | 结果 |
---|---|---|
incr key | incr num | num=”2” |
incrby key increment | incrby num 10 | num=”12” |
incrbyfloat key increment | incrbyfloat num 1.5 | num=”13.5” |
- 设置数值数据减少指定范围的值
命令 | 范例(num初始值为”15”) | 结果 |
---|---|---|
decr key | decr num | num=”14” |
decrby key increment | decrby num 10 | num=”4” |
设置数据生命周期:
- 设置数据具有制定的生命周期
命令 | 范例 | 结果 |
---|---|---|
setex key seconds value | setex num 10 Tom | 10秒后数据消失 |
psetex key milliseconds value | psetex num 1000 Tom | 1000毫秒后数据消失 |
tips:
- Redis控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作。
string类型数据操作的注意事项:
数据操作不成功的反馈与数据正常操作之间的差异
①表示运行结果是否成功
(integer)0 —> false 失败
(integer)1 —> true 成功
②表示运行结果
(integer)3 —> 3 3个
(integer)1 —> 1 1个
数据未获取到
(nil)等同于null
数据最大存储量
512MB
数值计算最大范围(java中long的最大值)
±9223372036854775807
key的设置约定
表名 :主键名 :主键值 : 字段名
hash类型数据的基础操作:
- 添加/修改数据
单个数据操作 | 多个数据操作 |
---|---|
hset key field value | hmset key field1 value1 field2 value2… |
- 获取数据
单个数据操作 | 多个数据操作 |
---|---|
hget key field | hmget key field1 field2 … |
hgetall key |
- 删除数据
hdel key field1 [field2] |
- 获取哈希表中字段的数量
hlen key |
- 获取哈希表中是否存在指定的字段
hexists key field |
hash类型数据扩展操作
- 获取哈希表中所有的字段名或字段值
命令 |
---|
hkeys key |
hvals key |
- 设置指定字段的数值数据增加指定范围的值
命令 |
---|
hincrby key field increment |
hincrbyfloat key field increment |
hash类型数据操作注意事项
hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果未获取到数据,对应值为(nil)
每个hash可以存储2^32-1
hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可将hash作为对象列表使用。
hgetall操作可以获取全部属性,如果内部field过多,遍历整体数据效率就会很低,有可能成为数据访问瓶颈。
hash类型应用场景
购物车订单场景
以客户id作为key,每位客户创建一个hash存储结构对象。
将商品编号作为field,购买数量作为value进行存储。
设一个新的key,将所有商品基本信息独立存储在一个hash。
将商品编号作为field,商品信息的json数据作为value进行存储。
添加商品:追加全新的field与value
浏览:遍历hash
更改数据:自增/自减,设置value值
删除商品:删除field
清空:删除key
如果当前对应的key中的field有值就什么都不做,如果没有值就添加
hsetnx key field value
list类型数据的基础操作:
数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分。
需要的存储结构:一个存储空间保存多个数据,且通过数据可以提现进入顺序。
list类型:保存多个数据,底层使用双向链表存储结构实现。
添加/修改数据
| 命令 |
| :—————————————: |
| lpush key value1 [value2] …… |
| rpush key value1 [value2] …… |
- 获取数据
命令 |
---|
lrange key start stop |
lindex key index |
llen key |
- 获取并移除数据
命令 |
---|
lpop key |
rpop key |
list类型数据扩展操作
- 规定时间内获取并移除数据
命令 |
---|
blpop key1 [key2] timeout |
brpop key1 [key2] timeout |
- 移除指定数据
lrem key count value |
set类型数据的基础操作:
- 添加数据
sadd key member1 [member2] |
- 获取全部数据
smembers key |
- 删除数据
srem key member1 [member2] |
- 获取集合数据总量
scard key |
- 判断集合中是否包含指定数据
sismember key member |
set类型数据的扩展操作
根据用户兴趣爱好推荐场景(操作随机数据)
- 随机获取集合中指定数量的数据
srandmember key [count] |
- 随机获取集合中的某个数据并将该数据移出集合
spop key |
set数据交并差操作
- 求两个集合的交、并、差集
操作名称 | 命令 |
---|---|
交集 | sinter key1 [key2] |
并集 | sunion key1 [key2] |
差集 | sdiff key1 [key2] |
- 求两个集合的交、并、差集并存储到指定集合中
操作名称 | 命令 | 范例 |
---|---|---|
key1与key2的交集存储到destination指定的集合中 | sinterstore destination key1 [key2] | sinterstore u3 u1 u2 |
key1与key2的并集存储到destination指定的集合中 | sunionstore destination key1 [key2] | sunionstore u3 u1 u2 |
key1与key2的差集存储到destination指定的集合中 | sdiffstore destination key1 [key2] | sdiffstore u3 u1 u2 |
- 将指定数据从原始集合中移动到目标集合中
smove source destination member |
- Tips:
- redis 应用于同类信息的关联搜索,二度关联搜索,深度关联搜索。
- 显示共同关注(一度)
- 显示共同好友(一度)
- 由用户A出发,获取到好友用户B的好友信息列表(一度)
- 由用户A出发,获取到好友用户B的购物清单列表(二度)
- 由用户A出发,获取到好友用户B的游戏充值列表(二度)
set类型数据操作的注意事项
set类型不允许数据重复,如果添加的数据在set中已经存在,将只保留一份
set虽然与hash的存储结构相同,但是无法启用hash中存储值的空间
sorted_set类型数据的基础操作:
新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
需要的存储结构:新的存储模型,可以保存可排序的数据
sorted_set类型:在set的存储结构基础上添加可排序字段
- 添加数据
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] | 升序 | zrangebyscore u1 50 80 withscores 或zrangebyscore u1 50 80 limit 0 3 withscores |
zrevrangebyscore key max min [WITHSCORES] | 降序 | zrevrangebyscore u1 80 50 withscores |
- 按条件删除数据
命令 | 范例 | 删除方式 |
---|---|---|
zremrangebyrank key start stop | zremrangebyrank u1 0 1 | 按索引删除 |
zremrangebyscore key min max | zremrangebyscore u1 50 80 | 按score删除 |
注意:
min与max用于限定搜索查询条件
start与stop用于限定查询范围,作用与索引,表示开始和结束的索引
offset与count用于限定查询范围,作用与查询结果,表示开始位置和数据总量
- 获取集合数据总量
命令 |
---|
zcard key |
zcount key min max |
- 集合交、并操作
命令 |
---|
zinterstore destination numkeys key [key …] |
zunionstore destination numkeys key [key …] |
sorted_set类型数据的扩展操作
- 获取数据对应的索引(排名)
命令 |
---|
zrank key member |
zrevrank key member |
- score值获取与修改
命令 | 操作名称 |
---|---|
zscore key member | 获取 |
zincrby key increment member | 修改 |
- 获取当前系统时间
命令 | 结果 |
---|---|
time | 1)“1569575565” 2) “434277” |
sorted_set类型数据操作的注意事项
score保存的数据存储空间是64位,如果 是整数范围是-9007199254740992~9007199254740992
score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时要慎重
sorted_set底层存储还是基于set结构,因此数据不能重复,如果重复添加相同数据,score值将被反复覆盖,保留最后一次修改结果