redis学习,常用数据类型

    技术2025-12-16  13

    1、string类型

    常用的string类型

    添加、修改数据 set key value 获取数据 get key 删除数据 del key

    添加、修改多个数据 mset key1 value1 key2 value2 ... 获取多个数据 mget key1 key2 ... 获取数据字符个数(字符串长度) strlen key 追加信息到原始信息后部(如果原始信息存在就追加,否则新建) append key value

    这里补充一下mget ,取多个key时,如果其中一个key不存在,但是也会按顺序返回nil

    单个key操作和多个key操作的对比:当我们从客户端发送一条指令到服务端,有以下几个操作

    客户端发送 --> 服务端处理 --> 服务端响应给客户端

    多key操作:指令在发送和响应都是一次,但是到服务端处理还是会拆分开来,数据量大会造成阻塞 单key操作:需要发送很多条指令,发送和响应耗时长

    string的扩展

    首先想到一个业务:分库分表的时候,需要主键自增; 解决方案:

    设置数值数据增加指定范围的值 incr key incrby key increment incrbyfloat key increment 设置数值数据减少指定范围的值 decr key decrby key increment

    这里需要注意的是除了incrbyfloat能加小数之外,其他的会报错

    自增string需要注意的地方:

    string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发 带来的数据影响。注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。 9223372036854775807(java中long型数据最大值,Long.MAX_VALUE) string 作为数值操作

    Tips 1:

    redis用于控制数据库表主键id,为数据库表主键提供生成策略,保障数据库表的主键唯一性此方案适用于所有数据库,且支持数据库集群

    为string做过期时间

    设置数据具有指定的生命周期 setex key seconds value psetex key milliseconds value

    string 的应用场景

    比如需要统计的数值,且经常被查看的数据:如csdn账号的粉丝数、博客数等:

    eg: user:id:1001:fans → 12210947 eg: user:id:1001:blogs → 6164 eg: user:id:1001:focuss → 83 在redis中以json格式存储用户信息,定时刷新(也可以使用hash类型) eg: user:id:1001 {"id":1001,"name":"java","fans":12210862,"blogs":6164, "focus":83}

    2、hash的使用

    新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息需要的存储结构:一个存储空间保存多个键值对数据hash类型:底层使用哈希表结构实现数据存储

    hash存储结构优化

    如果field数量较少,存储结构优化为类数组结构如果field数量较多,存储结构使用HashMap结构

    hash的操作

    添加/修改数据 hset key field value 获取数据 hget key field hgetall key 删除数据 hdel key field1 [field2] 添加/修改多个数据 hmset key field1 value1 field2 value2 … 获取多个数据 hmget key field1 field2 … 获取哈希表中字段的数量 hlen key 获取哈希表中是否存在指定的字段 hexists key field

    获取哈希表中所有的字段名或字段值 hkeys key hvals key 设置指定字段的数值数据增加指定范围的值 hincrby key field increment hincrbyfloat key field increment

    hash的应用场景

    可以用来做购物车可以用来限制销售数量、优惠券数量等

    list的使用

    类型数据基本操作

    添加/修改数据 lpush key value1 [value2] …… rpush key value1 [value2] …… 获取数据 lrange key start stop lindex key index llen key 获取并移除数据 lpop key rpop key

    注意: 这里需要注意的是当使用 lpush 和 lpop的时候,他只是是类似于栈的先进后出,这里的**-1**指的是倒数第一个

    list的扩展

    做阻塞队列 blpop key1 [key2] timeout brpop key1 [key2] timeout brpoplpush source destination timeout

    分页查数据 这个就是通过 lrange来进行分页的

    移除指定数据

    lrem key count value

    set的基本使用

    添加数据 sadd key member1 [member2] 获取全部数据 smembers key 删除数据 srem key member1 [member2]

    获取集合数据总量 scard key 判断集合中是否包含指定数据 sismember key member

    随机获取集合中指定数量的数据 srandmember key [count] 随机获取集合中的某个数据并将该数据移出集合 spop key [count]

    tips: 可以从上面看出,当插入多个数据的时候,他是无序的

    求两个集合的交、并、差集 sinter key1 [key2] sunion key1 [key2] sdiff key1 [key2]

    tips: 这里可以看出有一点需要注意的是 sdiff 在两种情况下是不同的结果

    求两个集合的交、并、差集并存储到指定集合中 sinterstore destination key1 [key2] sunionstore destination key1 [key2] sdiffstore destination key1 [key2] 将指定数据从原始集合中移动到目标集合中 smove source destination member

    set的使用场景

    随机生成几个热点推荐,比如csdn首页的推荐栏比如微信或者其他一些社交软件:如发现共同好友之类的,也可以反过来UV的统计,每个用户对一篇博客的访问只能是一次

    sorted_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] zrevrangebyscore key max min [WITHSCORES] 条件删除数据 zremrangebyrank key start stop zremrangebyscore key min max 获取集合数据总量 zcard key zcount key min max 集合交、并操作 zinterstore destination numkeys key [key ...] zunionstore destination numkeys key [key ...] 获取数据对应的索引(排名) zrank key member zrevrank key member score值获取与修改 zscore key member zincrby key increment member
    Processed: 0.012, SQL: 9