Redis学习(四)Redis浅度解析篇之数据类型

本文围绕Redis展开,介绍其特点,如单线程模型但支持10万QPS,采用NIO多路复用。详细阐述了Redis的五种数据类型,包括String、Hash、List、Set、ZSet的操作方法和应用场景,还提及Redis锁保证线程安全。此外,说明了可给Redis的key设置过期时间,满足条件后会自动删除。

特点:

  1. 单线程模型,但支持10万QPS,由于采用NIO多路复用
  2. 数据类型有String,hash,list,set,zset,五种。
  3. redis锁:数据插入保证线程安全
一、数据类型

redis中 key是区分大小写的,而操作命令如get和GET是相同的,这点类似于mysql 的语句。

String类型

最常见的数据类型,使用通用的get key / set key value 形式。
修改值,一般都是对key进行重新赋值即可,当value的值为数字类型的时候,有自增和自减操作。而这些操作是原子性的。

  1. 自增自减(项目分库分表主键ID避免重复可以采用这个方案)
    语法:incr decr

    127.0.0.1:6379> set test 1
    OK
    127.0.0.1:6379> incr test
    (integer) 2
    
    127.0.0.1:6379> set test 1
    OK
    127.0.0.1:6379> incr test
    (integer) 2
    
  2. 自增自减指定数值
    语法:incrby decrby

    127.0.0.1:6379> INCRBY test 11
    (integer) 13
    127.0.0.1:6379> DECRBY test 12
    (integer) 1
    
  3. 代码里方法对应如下(以springboot的redisTemplate为例
    在这里插入图片描述

  4. 仅当不存在时赋值 setnx【SET if Not eXists】,如果存在,则set失败
    可应用于分布式redis锁:如图看到提示中支持HSetNx MsetNx SetNx
    在这里插入图片描述

    mysec_139.196.194.253:0>setnx testNx 9999
    "1" # 首次setKey成功
    mysec_139.196.194.253:0>setnx testNx 0000
    "0" # 更新失败
    mysec_139.196.194.253:0>get testNx
    "9999"
    

    代码如下:
    在这里插入图片描述

  5. Mset Mget 【Multiple】

    mysec_139.196.194.253:0>mset testMset1 1 testMset2 2
    "OK"
    mysec_139.196.194.253:0>mget testMset1 testMset2
     1)  "1"
     2)  "2"
    

    代码如下:
    在这里插入图片描述

Hash类型
  1. 增加语法 hset key field value
    hash可以针对一个对象的属性进行赋值,如学生的身高年龄等信息
    hset student name zhangsan
    hset student age 23
  2. 批量增加 hmset key field value field value
    hmset student name zhangsan age 23 score 100
    3.同setnx(仅当null时set成功,返回1,反之返回0),有hsetnx与之类似
    setnx student name lisi ---->0 # name域已存在
    setnx student name2 zhangsan---->0 #name2域不存在
    在这里插入图片描述

    如果一个对象的多个属性经常变化,那么可以采用hash类型

List类型

list 可以作为一个队列,使用lpush,最新的数据最先得到处理,做到先进后出,类似栈。同样可以rpush,达到队列的效果。
redis的list类型是双向链表,在首尾增删查很快。

  1. lpush/rpush
    lpush testKey 1
    rpush testKey 2
    –>1
    –>2
    在这里插入图片描述
  2. 获取多个数据 lrange
    lrange testKey 0,1
    –>1
    –>2
    在这里插入图片描述
  3. 获取队列首尾数据lpop,rpop
    lpop testKey ->1 #这时1已经被删除了,不在testKey里了
    rpop testKey ->2 #这时2已经被删除了,这时的testKey没有数据了
    lrange testKey 0 1 # 没有数据了
    在这里插入图片描述
Set类型

特点:无序,且不重复

  1. 添加/删除 sadd/srem
    在这里插入图片描述
  2. 集合操作:sdiff/sinter/sunion
    进行集合的差/交和并操作
    在这里插入图片描述
ZSet类型

特点:有序集合,有和分数和属性的绑定关系

  1. zadd(score类似于权重)
    zadd key score member
    zadd student 98 张三
    zadd student 99 李四
  2. zrem
    zrem key member
    zrem student 张三
  3. zrange key start stop
    zrange student 0 1
    报错
    例如:数据库中有一个key的数据存储的是Hash类型的,但是你使用jedis执行数据操作的时候却使用了非Hash的操作方法。此时就会报:
    WRONGTYPE Operation against a key holding the wrong kind of value这个错误!
    换个key测试即可
二、过期时间

可以给redis的key设置过期时间(s),满足过期条件后,redis将删除这个key。

  1. 设置key的过期时间:expire key time # 单位是秒。

    type testKey #可以查看key的类型,采用哪种查询方式

    EXPIRE testKey 30 #30s后查询此key
    get testKey -->null
    在这里插入图片描述

    1. 设置为永久key: PERSIST key
      persist testKey
    2. 查看key的剩余过期时间:TTL key
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值