redis学习(二)——redis常见命令及基础数据类型

数据类型
基础数据类型
  • 字符串 String abc
  • Map集合 Hsah {name:"zhangsan",age:18}
  • 列表 List [a, b, c, d]
  • Set集合 Set {a,b,c}
  • 有序Set集合 SortSet {a:1,b:2,c:3}
特殊数据类型
  • GEO 地理坐标 {A:(100.2,35.1)}
  • BitMap 位图,只存储0和1 01101011101
  • HyperLog 基数,两个数据集不重复元素的个数 01101011101
通用命令
  • KEYS 查看符合条件的KEY

    127.0.0.1:6379[1]> KEYS *

    1. "zhangsan"
    2. "lisi"
    3. "wangwu"
  • DEL 删除指定的KEY,可跟多个参数

    127.0.0.1:6379[1]> DEL zhangsan
    (integer) 1
    127.0.0.1:6379[1]> KEYS *

    1. "lisi"
    2. "wangwu"
  • EXISTS 判断KEY是否存在,可跟多个参数

    127.0.0.1:6379[1]> EXISTS zhangsan
    (integer) 0
    127.0.0.1:6379[1]> EXISTS lisi wangwu
    (integer) 2

  • EXPIRE:给KEY设置一个过期时间

  • TTL:查看KEY的剩余有效期(过期后返回-2)

    127.0.0.1:6379[1]> EXPIRE lisi 20
    (integer) 1
    127.0.0.1:6379[1]> TTL lisi
    (integer) 16
    127.0.0.1:6379[1]> EXISTS lisi
    (integer) 1
    127.0.0.1:6379[1]> TTL lisi
    (integer) -2
    127.0.0.1:6379[1]> EXISTS lisi
    (integer) 0
    127.0.0.1:6379[1]> KEYS *

    1. "wangwu"
String类型

字符串类型,value为字符串,格式有三种,本质上都是字符串

  • string:普通字符串

  • int:整数类型,可以做自增、自减操作

  • float:浮点类型,可以做自增、自减操作

String类型常见命令
  • SET 添加String类型键值对,如果已存在KEY则修改VALUE

    127.0.0.1:6379[1]> KEYS *

    1. "wangwu"
      127.0.0.1:6379[1]> SET zhangsan 20
      OK
      127.0.0.1:6379[1]> KEYS *
    2. "zhangsan"
    3. "wangwu"
      127.0.0.1:6379[1]> SET zhangsan 15
      OK
      127.0.0.1:6379[1]> GET zhangsan
      "15"
  • GET 根据KEY值获取对应VALUE

    127.0.0.1:6379[1]> GET wangwu
    "18"

  • MSET 批量添加String类型键值对

    127.0.0.1:6379[1]> KEYS *

    1. "zhangsan"
    2. "wangwu"
      127.0.0.1:6379[1]> MSET lisi 20 zhangsan 25 zhaoliu 22
      OK
      127.0.0.1:6379[1]> KEYS *
    3. "zhangsan"
    4. "lisi"
    5. "zhaoliu"
    6. "wangwu"
  • MGET 批量获取VALUE

    127.0.0.1:6379[1]> MGET zhangsan lisi zhaoliu

    1. "25"
    2. "20"
    3. "22"
  • INCR 让一个整形的KEY自增1

    127.0.0.1:6379[1]> GET zhangsan
    "25"
    127.0.0.1:6379[1]> INCR zhangsan
    (integer) 26
    127.0.0.1:6379[1]> INCR zhangsan
    (integer) 27

  • INCRBY 让一个整形KEY自增指定数

    127.0.0.1:6379[1]> GET zhangsan
    "27"
    127.0.0.1:6379[1]> INCRBY zhangsan 2
    (integer) 29
    127.0.0.1:6379[1]> INCRBY zhangsan -1
    (integer) 28
    127.0.0.1:6379[1]> INCRBY zhangsan -1
    (integer) 27

  • INCRBYFLOAT 让一个浮点类型自增指定数

    127.0.0.1:6379[1]> SET float 17.5
    OK
    127.0.0.1:6379[1]> GET float
    "17.5"
    127.0.0.1:6379[1]> INCRBYFLOAT float 1.5
    "19"
    127.0.0.1:6379[1]>
    127.0.0.1:6379[1]> INCRBYFLOAT float 1.5
    "20.5"

  • SETNX 添加一个String类型的键值对,前提是这个key不存在,否则不执行

    127.0.0.1:6379[1]> KEYS *

    1. "zhangsan"
    2. "lisi"
    3. "zhaoliu"
    4. "wangwu"
      127.0.0.1:6379[1]> SETNX zhangsan 11
      (integer) 0
      127.0.0.1:6379[1]> GET zhangsan
      "27"
      127.0.0.1:6379[1]> SETNX child 11
      (integer) 1
      127.0.0.1:6379[1]> GET child
      "11"
  • SETEX 添加一个String类型的键值对,并且指定有效期 参数为key second value

    127.0.0.1:6379[1]> SETEX tom 10 aaa
    OK
    127.0.0.1:6379[1]> TTL tom
    (integer) 5

KEY结构

如果想存储两个相同的KEY,可以用:隔开多个单词形成层级结构,在图形化的页面上可以看到层级结构

127.0.0.1:6379[1]> set com:redisStudy1:zhangsan 20
OK
127.0.0.1:6379[1]> set com:redisStudy2:zhangsan 22
OK
127.0.0.1:6379[1]> set com:redisStudy1:lisi 20
OK
127.0.0.1:6379[1]> set com:redisStudy2:lisi 30
OK
HASH类型

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时需要将整个字符串替代,很不方便。Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD。

Hash类型常见命令
  • HSET key field value [field value ...]添加或修改hash类型key的field的值

    127.0.0.1:6379[2]> hset zhangsan age 18 sex 0
    (integer) 2
    127.0.0.1:6379[2]> KEYS *

    1. "zhangsan"
  • HGET key field 获取hash类型key的field值

    127.0.0.1:6379[2]> HGET zhangsan age
    "18"

  • HMSET 批量添加一个hash类型的多个key和field,redis 4.0.0之后已被弃用,用HSET也可达到相同效果

  • HGETALL 获取一个hash类型的所有key和field值

    127.0.0.1:6379[2]> HGETALL zhangsan

    1. "age"
    2. "18"
    3. "sex"
    4. "0"
  • HKEYS 列出hash类型key的所有field值

    127.0.0.1:6379[2]> HKEYS zhangsan

    1. "age"
    2. "sex"
  • HVALS 列出hash类型key的所有field的值

    127.0.0.1:6379[2]> HVALS zhangsan

    1. "18"
    2. "0"
  • HINCRBY 让一个hash类型的key的field的value值按指定数增长

    127.0.0.1:6379[2]> HINCRBY zhangsan age 1
    (integer) 19
    127.0.0.1:6379[2]> HINCRBY zhangsan age 1
    (integer) 20

  • HSETNX 添加一个hash类型的key的field的value值,前提是这个field不存在,否则不执行

List类型

Redis中的list类型类似双向链表结构,支持正向搜索和反向搜索。特点:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般
List类型常见命令
  • LPUSH 在list左侧插入元素,如果没有,则创建list再插入,注意是左侧插入,所以顺序和输入的属性相反

    127.0.0.1:6379[3]> LPUSH namelist zhangsan lisi
    (integer) 2
    127.0.0.1:6379[3]> LRANGE namelist 0 1

    1. "lisi"
    2. "zhangsan"
  • LPOP 移除并返回list左侧第一个元素,如果没有返回nil

    127.0.0.1:6379[3]> LPOP namelist
    "lisi"
    127.0.0.1:6379[3]> LRANGE namelist 0 2

    1. "zhangsan"
  • RPUSH 在list右侧插入元素

    127.0.0.1:6379[3]> RPUSH namelist wangwu zhangsan zhaoliu
    (integer) 4
    127.0.0.1:6379[3]> LRANGE namelist 0 5

    1. "zhangsan"
    2. "wangwu"
    3. "zhangsan"
    4. "zhaoliu"
  • RPOP 移除并返回list右侧第一个元素,如果没有返回nil

127.0.0.1:6379> 复制代码
>127.0.0.1:6379[3]> RPOP namelist
"zhaoliu"
127.0.0.1:6379[3]> LRANGE namelist 0 5
1) "zhangsan"
2) "wangwu"
3) "zhangsan"
  • LRANGE 返回范围内的所有list元素,左闭右闭

    127.0.0.1:6379[3]> LRANGE namelist 0 5

    1. "zhangsan"
    2. "wangwu"
    3. "zhangsan"
  • BLPOP 移除并返回list左侧第一个元素,可以设置等待时间,在没有元素时先等待一段时间,不会立刻返回

  • BRPOP 移除并返回list右侧第一个元素,可以设置等待时间,在没有元素时先等待一段时间,不会立刻返回

  • LSET value index element 设置list下标为index的元素为element

    127.0.0.1:6379[3]> LRANGE namelist 0 5

    1. "lisi"
    2. "zhangsan"
      127.0.0.1:6379[3]> LSET namelist 0 wangwu
      OK
      127.0.0.1:6379[3]> LRANGE namelist 0 5
    3. "wangwu"
    4. "zhangsan"
SET类型

set可以看做一个value都为空的hashMap,set类型特点:

  • 无序
  • 不可重复
  • 查找快
  • 支持交集、并集、差集
SET类型常见命令
  • SADD 往SET类型里面添加元素

    127.0.0.1:6379[4]> SADD zhangsan lisi wangwu
    (integer) 2
    127.0.0.1:6379[4]> SADD lisi wangwu zhangsan zhaoliu mazi
    (integer) 4
    127.0.0.1:6379[4]> SMEMBERS zhangsan

    1. "lisi"
    2. "wangwu"
      127.0.0.1:6379[4]> SMEMBERS lisi
    3. "zhangsan"
    4. "mazi"
    5. "zhaoliu"
    6. "wangwu"
  • SREM 从SET类型中移除元素

    127.0.0.1:6379[4]> SREM zhangsan wangwu
    (integer) 1
    127.0.0.1:6379[4]> SMEMBERS zhangsan

    1. "lisi"
  • SCARD 返回SET中元素个数

    127.0.0.1:6379[4]> SCARD lisi
    (integer) 4

  • SISMEMBER 判断元素是否存在

    127.0.0.1:6379[4]> SISMEMBER zhangsan wangwu
    (integer) 0
    127.0.0.1:6379[4]> SISMEMBER lisi wangwu
    (integer) 1

  • SMEMBERS 获取SET类型中的所有元素

    127.0.0.1:6379[4]> SMEMBERS lisi

    1. "zhangsan"
    2. "mazi"
    3. "zhaoliu"
    4. "wangwu"
  • SINTER 求交集

    127.0.0.1:6379[4]> SINTER zhangsan lisi
    (empty array)

  • SDIFF 求差集

    127.0.0.1:6379[4]> SDIFF zhangsan lisi

    1. "lisi"
      127.0.0.1:6379[4]> SDIFF lisi zhangsan
    2. "zhangsan"
    3. "wangwu"
    4. "zhaoliu"
    5. "mazi"
  • SUNION 求并集

    127.0.0.1:6379[4]> SUNION zhangsan lisi

    1. "zhangsan"
    2. "lisi"
    3. "zhaoliu"
    4. "mazi"
    5. "wangwu"
ZSET类型

ZSET是一个可排序的SET,SET里面的每一个元素有一个score属性,可以根据score属性排序,ZSET特点:

  • 可排序
  • 元素不重复
  • 查询速度快

ZSET常被用来实现排行榜功能

ZSET类型常见命令
  • ZADD key score member 给ZSET添加元素

    127.0.0.1:6379[5]> ZADD nameset 100 zhangsan 98 lisi
    (integer) 2

  • ZREM 删除ZSET中的元素

    127.0.0.1:6379[5]> ZREM nameset zhangsan
    (integer) 1

  • ZSCORE 获取ZSET元素的score值

    127.0.0.1:6379[5]> ZSCORE nameset lisi
    "98"

  • ZRANK 获取ZSET中指定元素的排名,从0开始,正序

  • ZREVRANK 获取ZSET中指定元素的排名,从0开始,逆序

    127.0.0.1:6379[5]> ZRANGEBYSCORE nameset 1 100

    1. "wangwu"
    2. "zhangsan"
    3. "zhaoliu"
    4. "mazi"
    5. "lisi"
      127.0.0.1:6379[5]> ZRANK nameset mazi
      (integer) 3
      127.0.0.1:6379[5]> ZREVRANK nameset mazi
      (integer) 1
  • ZCARD 获取ZSET中元素数量

    127.0.0.1:6379[5]> ZCARD nameset
    (integer) 5

  • ZCOUNT key min max 获取score值在min和max之间的元素数量

    127.0.0.1:6379[5]> ZCOUNT nameset 0 100
    (integer) 5

  • ZINCRBY 让ZSET中的指定元素按照指定数递增

    127.0.0.1:6379[5]> ZSCORE nameset zhangsan
    "66"
    127.0.0.1:6379[5]> ZINCRBY nameset 2 zhangsan
    "68"
    127.0.0.1:6379[5]> ZINCRBY nameset 2 zhangsan
    "70"

  • ZRANGE key min max 获取排序之后的下标从 min到max的元素,正序

  • ZREVRANGE key start end 获取排序之后的下标从start到end的元素,逆序

    127.0.0.1:6379[5]> ZRANGE nameset 0 3

    1. "wangwu"
    2. "zhangsan"
    3. "zhaoliu"
    4. "mazi"
      127.0.0.1:6379[5]> ZREVRANGE nameset 0 3
    5. "lisi"
    6. "mazi"
    7. "zhaoliu"
    8. "zhangsan"
  • ZRANGEBYSCORE key min max 获取排序后的score值再min和max之间的元素,正序

  • ZREVRANGEBYSCORE key max min 获取排序后的score值再min和max之间的元素,逆序,注意参数不同

    127.0.0.1:6379[5]> ZRANGEBYSCORE nameset 0 100

    1. "wangwu"
    2. "zhangsan"
    3. "zhaoliu"
    4. "mazi"
    5. "lisi"
      127.0.0.1:6379[5]> ZREVRANGEBYSCORE nameset 100 0
    6. "lisi"
    7. "mazi"
    8. "zhaoliu"
    9. "zhangsan"
    10. "wangwu"
  • ZINTER,ZDIFF,ZUNION 交集,差集,并集

相关推荐
陈大爷(有低保)13 分钟前
UDP Socket聊天室(Java)
java·网络协议·udp
kinlon.liu26 分钟前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
李小星同志28 分钟前
高级算法设计与分析 学习笔记6 B树
笔记·学习
霜晨月c39 分钟前
MFC 使用细节
笔记·学习·mfc
码爸1 小时前
flink 批量压缩redis集群 sink
大数据·redis·flink
王哲晓1 小时前
Linux通过yum安装Docker
java·linux·docker
java6666688881 小时前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存1 小时前
源码分析:LinkedList
java·开发语言
小江湖19941 小时前
元数据保护者,Caesium压缩不丢重要信息
运维·学习·软件需求·改行学it
执键行天涯1 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis