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 交集,差集,并集

相关推荐
魔芋红茶1 分钟前
spring-initializer
python·学习·spring
ruanjiananquan992 分钟前
c,c++语言的栈内存、堆内存及任意读写内存
java·c语言·c++
西岭千秋雪_26 分钟前
Redis性能优化
数据库·redis·笔记·学习·缓存·性能优化
随便取个六字27 分钟前
GIT操作 学习
git·学习
chuanauc29 分钟前
Kubernets K8s 学习
java·学习·kubernetes
小张是铁粉34 分钟前
docker学习二天之镜像操作与容器操作
学习·docker·容器
一头生产的驴1 小时前
java整合itext pdf实现自定义PDF文件格式导出
java·spring boot·pdf·itextpdf
YuTaoShao1 小时前
【LeetCode 热题 100】73. 矩阵置零——(解法二)空间复杂度 O(1)
java·算法·leetcode·矩阵
zzywxc7871 小时前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring
小张是铁粉1 小时前
oracle的内存架构学习
数据库·学习·oracle·架构