【从零学Redis—数据结构】——String && Hash

前提

    Redis提供的丰富的数据结构也是redis受欢迎的重要原因之一,Redis提供了五种数据结构,理解每种数据结构特点以及api对redis的使用是非常重要的。而且数据结构也是Redis的关键。

数据结构

    redis五种数据结构包括字符串,哈希,列表,集合,有序集合,再次基础上划分非集合和集合两大类。本文小编主要介绍一下非集合类,也就是字符串和哈希两种。
Redis基础

    在介绍结构的之前介绍一下通用的key,众所周知,redis是键值对的形式。redis中键类似关系数据库中唯一标识,大部分方法也类似于关系数据库中的主键的操作,其中唯一特殊就是键值过期的情况,关于一些有时间节点的数据,适用expire就是很好的方式。

key值设计原则

不是使用一些特殊字符,比较合理设计—-表名:主键:id值(业务名:对象名:id:[属性])
    这样的设计有利于防止键冲突和项目的可维护性,而且需要在能清楚描述键含义的前提下适当减少键的长度,从而减少键过长造成资源浪费
key使用方式
redis中支持key的模糊查询,有如下三种方式
*:通配任意多个字符
?:通配单个字符
[]:通配括号中某1个字符
这里写图片描述
randomkey 随机获取redis中key值(这一部分可以用于抽奖之类的业务)
rename key newkey 为key赋一个新key名
如果newkey已经存在,则会被覆盖
renamenx key newkey 当newkey不存在的时候才会修改成功
ttl key 返回key的生命周期 (秒数)
persist key 设置key永久有效
move key db 将当前数据库key移动到指定db中

字符串类型基础的操作如下

  • 设置值
    set key value [ex seconds] [px milliseconds] [nx|xx]
    (ex 秒过期级别,px 毫秒,nx键值不存在,才可以(添加操作);xx键存在才可以(更新操作))
    setnx setxx等同于 nx,xx
    批量设置值
    mset key value [key value ….]
  • 获取值
    get key
    批量获取值
    mget key [key …]
  • 自增以及自减
    incr key 自增
    decr key 自减
    incrby key increment 指定自增数字
    decrby keyincrement 指定自减数字
  • 设置新值并返回原值
    getset key value
  • 类似stringbuffer功能
    拼接string
    append key value
    字符串长度
    strlen key
    替换指定字符
    setrange key offeset value
    获取部分字符串(从零开始)
    getrange key start end

字符串类型编码

字符串类型有当前值的字符长度决定使用哪种编码方式

  • int: 8个字节长度
  • embstr:大于8个字节小于39个字节
  • raw:大于39个字节

Hash基本操作方式

hash一般的命令和String很相似,就是在string的使用方法前h用于区分,例如以下命令
- 设置值 hset key field value
- 获取值 hget key field
- 删除field hdel key field
- 批量设置或获取 field-value
hmset key field value [field value…]
hmget key field [field]
- 判断field是否存在 hexists key field
- 计算value长度 hstrlen key field
和String类型不同有
- 获取field个数– hlen key
- 获取所有field– hkeys key
- 获取所有value– hvals key
- 获取所有field-value– hgetall key

Hash编码

  • ziplist(压缩列表)
    在节省内存方面比较优秀

  • hashtable
    读写效率比较高,但是当hashtable作为hash的编码内部实现的时候,ziplist的读写效率会下降
    field的个数小于512个,而且value的小于64字节,hash使用ziplist作为内部编码实现否则使用hashtable作为内部编码实现

使用情景

String


1. 与MySQL做缓存
2. 做Session共享
3. 计数,如视频的播放次数
4. 利用setnx做分布式锁
5. 限速,利用expire过时机制,避免非法的频繁访问

Hash

1.替代关系数据库,例如将用户信息,使用id为主键,其他属性作为field字段

总结

    之前在项目使用redis通常都是当做缓存来使用,对于redis的很多使用方式不是很了解,对个人来说redis的了解很少,所以会用的很少,主要是最基础的内容学习,再结合项目进而有成效的优化系统

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mandy_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值