Redis常用数据类型和基本使用方法总结

常用数据类型

  1. string
  2. hash
  3. list
  4. set
  5. sorted_set

Rediskey-value的形式存储数据,通常都是以字符串格式存储

一、string类型基本操作
  1. set key value: 设置字符串
  2. get key: 获取内容
  3. del key: 删除内容
  4. mset key1 value1 key2 value2 ...: 批量设置
  5. mget key1 key2 ...: 批量获取
  6. strlen key: 获取内容字符长度
  7. append key value: 在目标内容后增加新内容
string类型扩展操作

string作为数值操作:

  1. incr key: 目标内容加1
  2. incrby key increment: 目标内容加上给定值(可正可负)
  3. incrfloat key float: 目标内容加上给定浮点数
  4. decr key: 目标内容减1
  5. decrby key increment: 目标内容减定值(可正可负)
  6. decrfloat key float: 目标内容减给定浮点数
  • string在redis内部默认存储为字符串, 遇到加减操作时会转化为数值类型计算
  • redis所有操作都是原子性的, 采用单线程处理所有业务, 在一个redis中不用考虑并发数据影响
  • 注意: 如果string不能转化成数值类型或者数值溢出(最大long), 会报错

设置数据生命周期:

  1. setex key seconds value
  2. psetex key milliseconds value

注意事项:

  1. 返回结果表示运行是否成功:
    • (integer)0: 失败
    • (integer)1: 成功
  2. 表示运行结果的值:
    • (integer)3: 3或者3个
    • (integer)1: 1(个)
  3. 数据不存在:
    • (nil): null
  4. 数据最大存储量:
    • 512MB
  5. 数值计算最大范围(long)
    • 64位有符号数long类型

redis应用于各种结构型和非结构型高热度数据的访问加速

  • 命名规范: 如tablename:primarykeyname:keyvalue:fieldname来保存目标field的数据
  • 对于同一个对象的不同属性, 可以分别存储, 也可以以JSON格式存储:{field1:value, field2:value...}, 区别则是前者可以单独获取/更新一条属性, 后者会全部获取/更新
二、hash类型

使用string存储同一个对象的多个属性时, 存取都不方便, 所以有了hash类型的需求

  • hash类型底层使用哈希表结构实现数据存储, 使用字符串key存储一个hash数据, 数据内部分为不同的field和value
  • 优化:
    • field较少时, 存储结构优化为类数组结构,
    • field较多时, 存储结构为HashMap类型
hash类型数据的基本操作
  1. hset key field value: 添加/修改数据
  2. hget key field /hgetall key: 获取数据
  3. hdel key field1 [field2...]: 删除数据
  4. hmset key field1 value1 field2 value2...: 多数据操作
  5. hmget key field1 field2...
  6. hlen key: 获取键中字段数量
  7. hexists key field: 判断键中是否存在指定字段
  8. hsetnx key field value: 字段不存在时设置, 若已存在则返回失败
hash类型数据扩展操作
  • hkeys key: 获取键中所有字段
  • hvals key: 获取键中所有字段的值
  • hincrby key field increment: 操作指定字段加上给定数值
  • hincrbyfloat key field float: 操作指定字段加上给定数值

hash类型操作注意事项

  • hash类型中的value只能存储字符串, 不允许其它类型和嵌套, 不存在的数据返回(nil)
  • 理论上每个hash可以存储232 - 1个键值对
  • hash类型可以按对象的数据格式存储数据,但应该尽量避免大量使用hash类型
  • hgetall可以获取一个键的所有字段, 但如果内部field过多, 会十分影响效率。

hash类型和string类型的json数据: hash注重对字段的更新, json注重对全部数据的读取

三、list类型
  • 按顺序存储, 使用双向链表实现
  1. lpush key value1 value2 : 左入数据
  2. rpush key value1 value2 : 右入数据
  3. lrange key start stop : 从左向右获取数据[start, stop], 可以使用负索引(类比Python切片)
  4. lindex key index : 获取单个元素
  5. llen key : 获取指定列表长度
  6. lpop key : 左出数据
  7. rpop key : 右出数据
  8. blpop key timeout : 阻塞式获取数据, 为空时阻塞, timeout超时返回
  9. brpop key timeout
  10. lrem key count value : 在列表中移除给定数量的value值

list类型数据的注意事项

  • list中数据以string格式存储, 理论最大元素个数为232 - 1
  • list具有索引的概念, 但双向链表尽量不使用索引, 通常使用左/右弹出数据
  • 获取全部数据-1索引表示最后一个元素
  • list通常对分页数据存储第一页内容, 其余从数据库加载
  • list顺序结构, 可以利用数据先后顺序进行简单的时间排序
四、set类型
  • sethash的关系, 类比Java中HashSetHashMap的关系
  • 仅存储键, 不存储值(nil)
  1. sadd key member1 [member2] : 添加数据
  2. smembers key : 获取全部数据
  3. srem key member1 [member2]: 删除数据
  4. scard key : 获取集合数据总量
  5. sismember key member : 判断集合中是否存在指定数据
set类型数据扩展操作
  1. srandmember key [count] : 从集合中随机获取数据

  2. spop key [count]: 从集合中随机弹出数据

    • 常用于随机随机检索、推荐。
  3. sinter key1 [key2] : 集合交集

  4. sunion key1 [key2] : 集合并集

  5. sdiff key1 [key2] : 集合差集

  6. sinterstore destination key1 [key2] : 求集合交集并保存到指定集合

  7. sunionstore destination key1 [key2] : 集合并集并保存到指定集合

  8. sdiffstore destination key1 [key2] : 集合差集并保存到指定集合

  9. smove source destination member : 将指定数据从原集合移动到目标集合

    • 常用于同类信息的关联搜索、二度关联搜索、深度关联搜索

set类型数据注意事项

  • set集合不允许重复数据, 重复数据会失败
  • 可以利用set集合对数据去重处理,如网站访问流量:用户流量,IP流量
五、sorted_set类型
  • zadd key score1 member1 [score2, member2] : 添加数据
  • zrange key start stop [withsocres] : 获取指定范围的数据(从小到大)
  • zrevrange key start stop [WITHSCORES] : 获取指定范围的数据(从大到小)
  • zrem key member [member1] : 删除数据
sorted_set基本操作
  1. zrangebyscore key min max [withscores] [limit] : 按排序条件获取数据
  2. zrevrangebyscore key min max [withscores] [limit] : 按排序条件获取数据反序
  3. zremrangebyrank key start stop : 按排序位置删除数据
  4. zremrangebyscore key min max : 按排序条件删除数据
  5. zcard key : 获取全集合数量
  6. zcount key min max : 获取区间数量
  7. zinterstore destination munkeys key [key…] : 交集
  8. zunionstore destination munkeys key [key…] : 并集
    • 交集还可以使用聚合函数sum|min|max(默认是sum效果)
    • zinterscore zz 3 z1 z2 z3 aggregate maxzrang 0 -1 zz withscores
sorted_set类型扩展操作
  1. zrank key member : 获取数据的对应排名
  2. zrevrank key member : 反序排名
  3. zscore key member : 获取数据排序score条件
  4. zincrby key increment member : 指定数据加

sorted_set类型注意事项

  • 排序条件score的存储空间为64位
  • score数据支持双精度double数据, 但要注意浮点数的精度问题
  • sorted_set是基于set类型的, 数据不能重复添加, 但score会被最后一次覆盖
  • sorted_set可以用于时间过期任务处理, 使用时间戳作为score, 每次处理最顶端的数据
  • time指令获取当前系统时间
  • sorted_set集合也可以处理带权重的数据

使用帮助

使用redis时,对某个指令用法不清楚,可以使用help 指令在交互式客户端查看帮助文档,也可以在官方文档查找帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值