String

String类型,可以用来存储字符串、整型、浮点型数据、甚至二进制数据(因为redis的String类型是二进制安全的)。

常用命令:

#设置多个值,原子性。
mset aaa 2673 bbb 666#如果key存在,就设置不成功,分布式锁的原理。
setnx qingshan #Ex 秒数 或者 PX 毫秒数 设置过期时间
#NX(存在不设置)/XX (存在也设置)
set key value [expiration EX seconds|PX milliseconds][NX|XX]#该key自增1
incr key#该key自增100
incrby key 100#递减1
decr key#自减100
decrby key 100set f 2.6#浮点数+7.3incrbyfloat f 7.31#获取多个key的值
mget a b#获取该key值的长度
strlen key#往该key后面追加字符串。
append a good#获取key的值的 指定下标范围的字符串
getrange key 0 8

用途:

  1. 缓存:热点数据的缓存,比如对象缓存、文本缓存等,可以提升访问的速度。
  2. 数据共享:比如共享配置、分布式session等。
  3. 分布式锁。
  4. 全局ID,可以在分库分表的情况下,incrby userid 1000 一次性拿一段id使用。
  5. 计数器,文章阅读数、网站访问量、秒杀库存计数等。
  6. 简单的限流,比如某个接口10秒内只能访问1000次,就设置一个过期时间为10秒的key,然后每访问一次就加一,超过1000次后,就拒绝访问。
hash类型


field,value都只能是字符串,不能存储其他类型。

常用命令:

#设置 key h1 field f  value 6
hset h1 f 6
hset h1 e 5
#批量设置
hmset h1 a 1 b 2 c 3 d 4
#获取key为h1 field为 a的值
hget h1 a
#批量获取
hmget h1 a b c d
#获取key为h1 的所有field
hkeys h1
#获取key为h1的所有value
hvals h1
#获取key h1的所有field value
hgetall h1
#判断key h1  field 为a 存不存在
hget exists h1 a
#删除key 为h1 field为a
hdel h1 a
#判断key的元素个数
hlen h1

哈希和String类型的主要区别:
哈希的优势:

  1. 把所有相关的值聚集到一个 key 中,节省内存空间。
  2. 只使用一个 key,减少 key 冲突。
  3. 当需要批量获取值的时候,只需要使用一个命令,减少内存/IO/CPU 的消耗

哈希的劣势:

  • Field 不能单独设置过期时间

用途:
String 可以做的事情,Hash 都可以做,只是两个之间的适用度问题。

List类型

是一个双端队列。

相关命令对应的数据情况:

#获取左边开始第一个元素。
lindex queue 0#从左到右获取所有元素
lrange queue 0 -1

用途:

  1. 因为 List 是有序的,可以用来做用户时间线,比如博客系统,每新增一遍博客,就以用户为key,lpush一条数据,然后获取时,也是lrange key 0 -1 就可以按时间顺序从新到旧展示博客。
  2. 可以当分布式队列、栈使用。
Set类型

String 类型的无序集合,最大存储数量 2^32-1(40 亿左右),元素不能重复,类比java的hashset。

常用命令:

#设置并添加多个元素
sadd myset a b c d e f g#获取所有元素
smembers myset#获取元素个数
scard myset#随机获取其中一个元素
srandmember key#随机弹出一个元素/删除
spop myset#删除多个元素
srem myset d e f#查看元素是否存在
sismember myset a#差集
sdiff set1 set2#交集
sinter set1 set2#并集
sunion set1 set2

应用场景:

  1. 抽奖:spop myset,随机弹出一个元素。
  2. 比如记录一篇文章的点赞的所有用户。
    b001是文章的id,like:b001组成key。u001 、u002是用户id
    sadd like:b001 u001 u002

用户u003点赞
sadd like:b001 u003

用户u002取消点赞:
srem like:b001 u002

用户是否点赞u003:
sismember like:b001 u003

点赞的所有用户:
smembers like:b001

点赞数:
scard like:b001

  1. 用户关注、 推荐模型等。
ZSet 有序集合


每个元素由元素值和分数组成。
score 相同时,按照 key 的 ASCII 码排序。

常用命令:

#添加元素
zadd myzset 10 java 20 php 30 ruby 40 cpp 50 python#正序获取所有元素
zrange myzset 0 -1 withscores
#反序获取所有有序
zrevrange myzset 0 -1 withscores
#获取20分-30分的元素
zrangebyscore myzset 20 30#删除元素
zrem myzset php cpp#统计元素个数
zcard myzset#给元素5分。
zincrby myzset 5 python#获取20分至60分的元素
zcount myzset 20 60#获取某个元素的排名
zrank myzset java#获取某个元素的分数
zsocre myzset java

常用场景:

  1. 排行榜,比如获取50个热搜,按照访问量从高到低排序。
    zrevrange myzset 0 50 withscores
    如果访问了一次,就加一分,zincrby myzset 1 python 。

Redis五大基本数据类型及其相关命令及常用用途相关推荐

  1. Redis入门系列数据类型及相关命令

    2019独角兽企业重金招聘Python工程师标准>>> 一.Redis数据类型 Redis支持5中数据类型,分别是字符串(Strings),列表(Lists),集合(Sets),哈希 ...

  2. Redis五大基本数据类型(String、LIst、Set、Hash、ZSet)及其底层结构

    文章目录 零.Redis中Key相关操作 一.字符串(String) 二.列表(List) 三.集合(Set) 四.哈希(Hash) 五.有序集合(Zset) 零.Redis中Key相关操作 keys ...

  3. 【Redis】基于Redis6的数据类型以及相关命令、应用场景整理

    文章目录 数据类型与命令 常用 字符串(String) 列表(List) 集合(Set) 有序集合(Sorted Set) 哈希(Hash) 特殊 地理位置(GEO) 流(Stream) 基数统计(H ...

  4. Redis五大基本数据类型String练习笔记

    String(字符串) ####################################################################### 127.0.0.1:6379&g ...

  5. 【Redis】Redis 五大基本数据类型

    1.概述 相关文档参考: 菜鸟教程 官网 视频教程:狂神 这里我没有看五种类型,因为暂时用不到 2.String类型 追加字符串长度 127.0.0.1:6379> set key1 v1 OK ...

  6. Redis学习笔记 - 数据类型与API(1)Key

    Redis学习笔记 - 数据类型与API(1)Key Key相关命令 1. 常用命令 命令 含义 时间复杂度 keys 查找所有符合给定模式 pattern 的 key O(N), N 为数据库中 k ...

  7. 第一季:12Linux常用服务类相关命令【Java面试题】

    第一季:12Linux常用服务类相关命令[Java面试题] 前言 推荐 第一季:12Linux常用服务类相关命令 题目 分析 service (centos6) 运行级别runlevel(centos ...

  8. Redis五大数据类型常用命令

    Redis五大数据类型 Redis-Key 1.查看当前数据库的key keys * #返回当前数据库下的所有key 2.设置key set key value 3.获取key的value get k ...

  9. Redis五大数据类型及常见命令

    1. Redis字符串(String) String是Redis最基本的value类型,一个key对应一个value. String类型是二进制安全的,所有Redis的String对象可以包含任何数据 ...

最新文章

  1. 将PDF文件拆分成多个文件的教程
  2. java对象转xml jackson_五分钟Jackson入门(三) JSON数据类XML转换(附项目源码)
  3. java线程中的常用方法_[多线程] 线程中的常用方法-最详细
  4. Angular Jasmine 里一些常用概念学习笔记 - describe, it, beforeEach的用法
  5. 日常spoken英语学习
  6. 禅道备份功能_更新禅道燃尽图及数据备份
  7. pb自定义控件 事件_Android WebView与下拉刷新控件滑动冲突的解决方法
  8. 程序员:你的效率可以提高三倍
  9. swiper实现触摸滑动
  10. java折叠自行车x1-auto,java入门第三季 7-1 简易扑克练习
  11. 传奇服务器怎么修改升级武器成功,传奇服务端中设置装备元素升级不会破碎教程...
  12. JUCE学习笔记03-Slider、Listener、Label类
  13. CentOS 开启端口
  14. PC版微信发送无损视频除了使用压缩还有另外的方法
  15. 独家 | A/B测试的定义、操作方法、案例与实用工具分享
  16. python通过ip获取地理位置等ip信息
  17. Redis的Java客户端之Jedis(Jedis)
  18. 【学习小记】狄利克雷卷积+杜教筛
  19. vue.js的简单自动求和计算
  20. 科创板丨柏楚电子5位实际控制人为上海交大硕士 都是80后

热门文章

  1. 【BZOJ2115】Xor,第一次的线性基
  2. 【codevs2421】【BZOJ1858】序列操作,线段树
  3. 【OJ2726】集合问题,堆
  4. 2017.9.27 书架 思考记录
  5. 2017.9.22 小约翰的游戏John 失败总结
  6. 【英语学习】【English L06】U06 Banking L3 Do you have a credit card?
  7. python附件发送到邮箱里_使用python将最新的测试报告以附件的形式发到指定邮箱...
  8. mysql源码分析书籍_从源码分析 MySQL 死锁问题入门
  9. Linux的进程/线程/协程系列4:进程知识深入总结:上篇
  10. linux mysql 没有密码忘记,在linux系统中,如果忘记了MySQL的root密码,有没有办法重新设置新密码呢?...