当前位置: 首页 > article >正文

Redis 基本数据类型

Tips:Linux 命令严格区分大小写,redis 命令不区分大小写

redis 键值对中常用的值类型可分为以下几种

目录

1. String 类型

2. Hash 哈希类型

3. List 类型

4. Set 类型

5. 有序集合 Zset


1. String 类型

 添加数据

# 添加键值对name:zhangsan  缓存时间:5秒
set name zhangsan ex 5

# 添加键值对name:zhangsan  缓存时间:100毫秒
set name lisi px 100

 获取数据

get name
# zhangsan

 重复设置 key 

# 当没有name这个key时执行该语句
setNx name zhangsan

 批量设置 key-value

# 批量设置key-value
mset 001 aaa 002 bbb 003 ccc

# 批量获得 value
mget 001 002 003

# tips: 批量命令不支持Nx,Xx,Ex,Px等参数

 删除 key-value

# 格式 del key
del 001

  获取 key-value 的剩余生命时间

ttl 001

#return >0: 代表剩余生命周期
#return -1: 代表未设置过期时间
#return -2: 代表键 001 不存在

2. Hash 哈希类型

hash 类型的数据格式为 key: 哈希表,哈希表里面又存了多个键值对key-value,redis采用链表地址法解决哈希冲突,当哈希表中最后一个元素被删除,该键值对也会被redis回收

 数据操作方式

# 设置格式: hset key field value
hmset user name zhangsan age 18

# 获取数据格式: hget key field
hget user name  # zhangsan

hget user age # 18

  判断 value 是否存在

hexists user name

 通过 key field 删除哈希表中的某个键值对

# 格式: hdel key field
hdel user name

3. List 类型

redis 中的 List 基于链表实现,插入删除的时间复杂度为O(1),查询时间复杂度为O(n)

  数据操作方式

# 将[10 20 30 40 50]按照顺序插入链表头部
lpush score 10 20 30 40 50

# 将[10 20 30 40 50]按照顺序插入链表尾部
rpush score 10 20 30 40 50

  获取 value 值,索引从 0 开始

# 格式: lindex key index
lindex score 3

# 格式: lrange key start stop
lrange score 0 2

  从头部或者尾部删除链表元素

# 从头部弹出一个元素
lpop score

# 从尾部弹出一个元素
rpop score

  删除指定元素

# 格式: lrem key count element
lrem score 0 20

# count==0: 删除所有值为20的元素
# count > 0: 删除从头往尾 count 个值为20的元素
# count < 0: 删除从尾往头 count 个值为20的元素

 删除指定索引范围之外的元素,保留索引范围之内的元素 

# 格式: ltrim key start stop
ltrim score 0 1

 修改链表元素

# 格式: lset key index value
lset score 0 100

# 将 key=score 的第 0 个索引值修改为 100

插入元素

# 格式: linsert key before|after value insert_value
linsert score before 20 90  # 在key=score 值为20的元素前插入一个90

linsert score after 20 80 # 在key=score 值为20的元素后面插入一个80

 获取链表长度

#格式: llen key
llen score

4. Set 类型

Set 与 List 的区别:

  • Set 集合是自动去重的,当用户把相同的元素插入到 Set 中时,会被自动忽略
  • List 基于链表是有序集合,Set 是无序的集合

  数据操作方式

  添加元素到集合

# 格式: sadd key value1 value2 value3...
sadd age 18 20 22 24 26 zhangsan lisi wangwu

# Set集合中允许添加不同类型的值

  获取集合中元素

# 格式: smembers key
smembers set1

  查看集合元素个数 

# 格式: scard key1
scard set2

  判断集合中是否有某个特定元素

# 格式: sismember key value
sismember set1 10

  随机获取指定个数元素

# 格式: SRANDMEMBER key [count]
SRANDMEMBER set3 3
 
# count>0: 随机返回 count 个不重复的元素
# count<0: 随机返回 ads(count) 个允许重复的元素

  从集合中移除元素

# 格式: srem key value1 value2...
srem age 18 20

  随机的从集合中移除某些元素 

# 格式: spop key [count]
spop set3 2

# count必须大于0,小于0将会报错

集合之间的运算


  将元素从一个集合移动到另外一个集合

# 格式: smove key1 key2 value
smove set1 set2 10

# 将 set1 集合中的元素 10 移动到集合 set2

  计算集合的交集

# 格式: sinter key1 key2 key3...
sinter set1 set2 set3

  计算集合的并集

# 格式: sunion key1 key2 key3...
sunion set1 set2 set3

  计算集合的差集

# 格式: sdiff key1 key2 key3...
sdiff set1 set2 set3

5. 有序集合 Zset

Zset 集合中每个元素都有一个值和这个值的分数:

  • 值以字符串形式存储,分数以64位双精度浮点数存储
  • 有序集合中的元素基于其分数大小排序,组成有序集合
  • 分数除了数字形式,还有两种字符串表示无穷大 "+inf" 和无穷小 "-inf"

 数据操作方式

 集合中添加元素

# 格式: zadd key score1 member1 score2 member2...
zadd sort-set 10 u1 20 u2 30 u3

  获取指定成员的分数值

#格式: zscore key member
zscore sort-set u1

  移除成员

# 格式: zrem key member1 member2...
zrem sort-set u1 u2

  增加或者减少成员的分数值

# 格式: zincrby key increment member
zincrby sort-set 30 u1

# 将key=sort-set 的集合中成员u1的分数值+30
# increment=-30 : 将成员u1的分数值-30

  获取成员的排名

# 格式: zrank key member
zrank sort-set u3

#降序排名
zrevrank sort-set u3

  获取有序排名数据

# 格式: zrange key start end
zrange sort-set 0 2  # 获取分数值从小到大前三名

zrevrange sort-set 0 2  # 获取分数值从大到小前三名

  获取指定分数范围内的成员

# 格式: zrangebyscore key minscore maxscore
zrangebyscore sort-set 10 50  # 按照升序获取分数在(10,50)之间的成员

# 格式: zrevrangebyscore key maxscore minscore
zrevrangebyscore sort-set 90 30  # 按照降序获取分数在(30,90)之间的成员

  统计指定分数范围内的成员个数

# 格式: zcount sort-set minscore maxscore
zcount sort-set 50 90

# 统计分数在50-90之间(不包括90)的成员个数
zcount sort-set 50 (90

# 统计分数大于50的成员个数
zcount sort-set 50 +inf

# 统计分数小于100的成员个数
zcount sort-set -inf 100


http://www.kler.cn/a/4810.html

相关文章:

  • 计算机网络之---TCP连接管理
  • 基类指针指向派生类对象,基类指针的首地址永远指向子类从基类继承的基类首地址
  • Three.js教程015:全面讲解Three.js的UV与应用
  • OpenCV相机标定与3D重建(48)对三台相机进行极线校正(rectification)函数rectify3Collinear()的使用
  • ubuntu22.04 gcc,g++从10.5切换到低版本9.5
  • android四大组件之一——Service
  • 辉煌优配|猪肉概念股大幅拉升,巨星农牧涨停
  • Docker 安装 Redis
  • 2023年广东省网络安全竞赛——Linux 操作系统渗透解析(超级详细)
  • 基于WebSocket的网页聊天室
  • 【TPV】TPVFormer代码解析
  • python实战应用讲解-【numpy专题篇】常见问题解惑(十五)(附python示例代码)
  • 6 Nginx常用核心模块指令
  • 华为OD机试题【剩余可用字符集】用 Java 解 | 含解题说明
  • 【Python学习笔记(八)】threading多线程模块的使用
  • python实战应用讲解-【numpy专题篇】实用小技巧(四)(附python示例代码)
  • mycat2 安装 jDK
  • Python 反射
  • 【TDengine】详解 taosAdapter 适配器
  • Html5代码实现动态三角形
  • Elasticsearch 搜索测试与集成Springboot3
  • 18005 它不是丑数
  • 算法第十九期——图论初入门
  • Java多线程
  • CSS Grid 网格布局详解
  • 【故障检测】基于 KPCA 的故障检测【T2 和 Q 统计指数的可视化】(Matlab代码实现)