echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!!


Redis的基本数据类型

最基本的数据类型strings

最基本也是最常用的数据类型就是String,对应的操作命令也比较简单的,有get/set/del等;它的对应的值可以是任何种类的字符串,最大保存长度512MB。基本命令的使用如下:

set name echo
get name
del name set key 1
incr key
decr key
incrby key 20
decrby key 20
incrbyfloat key 2.1 set name ab
append name c
getrange name 1 5
strlen name
mget name1 name2 name3
mset name4 echo4 name5 echo5 name6 echo6

字符串中一个特殊操作setnx

setnx name echo
如果name存在就返回0存入不成功,如果name不存在就返回1存入成功。

基于该特性我们可以用它来实现分布式锁。但是注意:使用改特性也有一个缺点就是,可能会造成死锁。如果我们在使用过程当中,使用del key释放锁,有可能会释放锁失败,导致其他操作永远获取不到锁。当让我们也可以对ke设置过期时间,但是也会有相同的问题。解决方案:

数据类型list

对于该数据类型,我觉得用list一点也不贴切,应该叫做:有序的队列,才合适。毕竟list是无序的,而且也没有先后一说。基本操作命令如下:

lpush queue a
lpush queue b c
rpush queue d e
lpop queue
rpop queue
lindex queue 0
lrange queue 0 -1
ltrim queue 0 3
del queue
llen queue
brpop queue 50

list数据结构中brpop是一个高级操作

brpop queue 60
如果queue队列中存在元素,直接弹出最右边的按个元素,如果不存在,轮询等待60s。超时,直接返回null。

该数据结构有一个明显的特点,那就是有序,不管是从左边存入还是右边存入,都能够有效的实现队列的进出。我们可以看到最后一个条命令,它其实是redis提供的一个高级操作,利用list队列的特性,实现了阻塞式访问,我们可以使用该功能做一个简单的发布订阅功能。如果存入数据作为发布消息,使用brpop阻塞式访问来订阅。

数据类型set

Redis中Set 是 String 类型的无序集合。该集合有set集合的属性,元素唯一, 所以对应的redis set数据成员是唯一的,这就意味着集合中不能出现重复的数据。

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

在set中,元素都不是重复的,所以我们可以用它来记录一些唯一的值。这几个基本的命令里面我们可以看到有一个spop myset 随机弹出一个元素,利用set的唯一性,和随机弹出元素的特性,我们可以使用set集合实现一个抽奖活动。将所有人的id存入set集合中,然后使用spop随机弹出元素,弹出的元素id就是中奖人。

Redis的zset -- 有序集合

zset和Set类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它和set集合的区别只去在于zset是有序的,set是无序的。而且set的存储和zset的存储不一样

zadd myzset 10 java 20 php 30 ruby 40 cpp 50 python
zrange myzset 0 -1 withscores
zrevrange myzset 0 -1 withscores
zrangebyscore myzset 20 30
zrem myzset php cpp
zcard myzset
zincrby myzset 5 python
zcount myzset 20 60
zrank myzset java
zscore myzset java

zset是一个有序的集合,它的排序是根据score来进行的,所以我们可以使用该特性来实现一个最热文章的功能,当文章的热度上涨之后,我们对文章对应score来进行递增即可。

Redis的数据类型Hash

Redis的哈希数据类型存储的是一个string类型的field和value的映射表,hash适合存放对象

hset h1 f 6
hmset h1 a 1 b 2 c 3 d 4
hget h1 a
hmget h1 a b c d
hkeys h1
hvals h1
hgetall h1
hexists h1 f
hdel h1 f
hlen h1

hash的操作和我们java开发中操作map很类似,比如添加一个key为h1、field为f、value为6的hash值,在java中就相当于创建一个名字为h1的map,存入key为f,value为6的键值对。该数据结构的特点很适合我们在业务中存放对象,比如使用他来实现购物车。将hash设计成为后面这种模式即可:key:用户 id;field:商品 id;value:商品数量。商品在购物车中的数据量使用如下命令来实现即可

对我们的hash值来进行加1
hincrby h1 d 1 对我们的hash值来进行减1
hincrby h1 d -1

做一个有底线的博客主

Redis的使用--基本数据类型的操作命令和应用场景的更多相关文章

  1. 3.redis 都有哪些数据类型?分别在哪些场景下使用比较合适?

    作者:中华石杉 面试题 redis 都有哪些数据类型?分别在哪些场景下使用比较合适? 面试官心理分析 除非是面试官感觉看你简历,是工作 3 年以内的比较初级的同学,可能对技术没有很深入的研究,面试官才 ...

  2. 《【面试突击】— Redis篇》--Redis都有哪些数据类型?分别在哪些场景下使用比较合适?

    能坚持别人不能坚持的,才能拥有别人不能拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>--Redis都有哪些数据类型?分别在哪些场景下使用 ...

  3. Redis 都有哪些数据类型?分别在哪些场景下使用比较合适?

    redis 主要有以下几种数据类型: string hash list set sorted set string 这是最简单的类型,就是普通的 set 和 get,做简单的 KV 缓存. set c ...

  4. redis都有哪些数据类型?分别在哪些场景下使用比较合适?

    (1)string 这是最基本的类型了,没啥可说的,就是普通的set和get,做简单的kv缓存 (2)hash 这个是类似map的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象 ...

  5. Redis(三)数据类型

    之前的文章中说了Redis的常见应用场景和特性,在特性章节中也大致说了数据结构契合场景.因为我想在更深入.更全面的学习Redis之前,了解场景和特性,才能在学习时更加全面且理解更透彻: redis的什 ...

  6. Redis学习笔记1-Redis数据类型

    Redis数据类型 Redis支持5种数据类型,它们描述如下: Strings - 字符串 字符串是 Redis 最基本的数据类型.Redis 字符串是二进制安全的,也就是说,一个 Redis 字符串 ...

  7. Redis学习手册(Set数据类型)

    一.概述: 在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加.删除或判断某一元素是否存在等操作.需要说明的是,这些操作的时间复杂度 ...

  8. redis key和value数据类型

    exists key del key1 key2 Redis 的vauleredis 提供五种数据类型:string,hash,list,set 及sorted set. string 是最基本的类型 ...

  9. Redis系列(2)之数据类型

    Redis系列(2)之数据类型 <Redis系列(1)之安装>中介绍了Redis支持以下几种数据类型,那么本节主要介绍学习下这几种数据类型的基本操作 字符串类型,string 散列类型,h ...

随机推荐

  1. python import cv2异常(dll load fail / windows server 2008)

    最近服务器迁移,从得win7系统迁移到云服务器器上的windows server2008系统,迁移过程中安装Python的opencv一直出错,不管是用whl安装或者是在线pip安装都报错,尝试打包成 ...

  2. python openpyxl内存不主动释放 ——关闭Excel工作簿后内存依旧(MemoryError)

    在openpyxl对Excel读写操作过程中,发现内存没有马上释放,如果得多次读取大文件,内存爪机,后续代码就无法运行. 尝试:各种wb.save()或者with open等途径无法解决. 发现:因为 ...

  3. JQuery 源码解析 · extend()详解

    前言:最近想重写一个dropdown插件,于是想到了使用jquey实现插件,于是重温了一波$.extend()的知识,然后总结了这篇笔记 正文: $.extend(src)  jQuery.exten ...

  4. sublime text2解决中文乱码,支持中文的设置方法

    步骤: 1.安装Sublime Package Control.        在Sublime Text 2上用Ctrl+-打开控制台并在里面输入以下代码,Sublime Text 2就会自动安装P ...

  5. Springboot2.x + ShardingSphere 实现分库分表

    之前一篇文章中我们讲了基于Mysql8的读写分离(文末有链接),这次来说说分库分表的实现过程. 概念解析 垂直分片 按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用. 在拆分之前 ...

  6. 利用 turtle库绘制简单图形

    turtle库是python的基础绘图库,这个库被介绍为一个最常用的用来介绍编程知识的方法库,其主要是用于程序设计入门,是标准库之一,利用turtle可以制作很多复杂的绘图. turtle名称含义为“ ...

  7. 【干货系列之萌新知识点】python与变量和运算符

    一.注释 注释一行:# 为注释符 注释多行:'或者"为注释符 二.print输出 print()函数,作用是打印一些信息语屏幕上. 例如:print("hello world!&q ...

  8. JVM 中发生内存溢出的 8 种原因及解决办法

    1. Java 堆空间 2. GC 开销超过限制 3. 请求的数组大小超过虚拟机限制 4. Perm gen 空间 5. Metaspace 6. 无法新建本机线程 7. 杀死进程或子进程 8. 发生 ...

  9. opencv::Mat属性

    OpenCV支持JPG.PNG.TIFF等常见格式图像文件加载 加载图像 Mat imread( const String& filename, int flags = IMREAD_COLO ...

  10. NOIP2018提高组初赛游记

    AH省的,好像水军多,走的都比较早(莫非是真·大佬!!) 本人考了71,较去年退步了.(去年还考80多的来着) 题目坑.. 第一.二大题选择 第三题年份,看了试卷标题,第二十二届,算出来后没有这个选项 ...