一文快速搞懂Redis的几种数据类型方式

目录
  • Redis简介
  • Redis有几种数据类型
  • Redis的基本指令
  • String(字符串)
  • List(列表)
  • Set(集合)
  • Hash(哈希)
  • Zset(sorted set:有序集合)
  • RedisDesktopManager数据查看工具

Redis简介

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。

Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

Redis有几种数据类型

Redis是一个以key-value存储系统,一个Key键值对应一个value值,键值不能重复,它支持存储的value类型有5种。

Redis支持五种数据类型:

  • String(字符串)
  • List(列表)
  • Set(集合)
  • Hash(哈希)
  • Zset(sorted set:有序集合)

Redis的基本指令

在讲数据类型前先来看一下Redis的基本指令,主要是针对Key键值和的一些操作。

Redis默认16个数据库,类似数组下标从0开始,初始默认使用0号库

可以通过以下指令来修改默认存放的数据库

select   <dbid>        如: select 1

Redis针对Key键值的一些基本操作。

keys * 			查询当前库的所有键,返回键值
exists  <key>     	判断某个键是否存在,返回0或1
type  <key>			查看键的类型
del  <key>			删除某个键
expire   <key>   <seconds>		为键值设置过期时间,单位秒
ttl   <key>			查看还有多少秒过期,-1表示永不过期,-2表示已过期
dbsize					查看当前数据库的key的数量

Demo样例,初始Redis中有a,b两个键。

清空Redis库的两个指令

Flushdb		清空当前库
Flushall		清空全部库

String(字符串)

  • String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
  • String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
  • String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

基本指令:

set   <key>  <value>		添加键值
get   <key>			查询对应的键值
append  <key>  <value>		将给定的<value> 追加到原键值的末尾
strlen  <key>			获取键值的长度
setnx  <key>  <value>			只有在 key 不存在时设置 key 的值
incr  <key>				将 key 中储存的数字值自增1,只能对数字值操作,如果为空,新增值为1
decr  <key>				将 key 中储存的数字值减1,只能对数字值操作,如果为空,新增值为-1
incrby / decrby  <key>  <步长>			将 key 中储存的数字值增 / 减。自定义步长。

mset  <key1>  <value1>  <key2>  <value2> ....		同时设置一个或多个 key-value对
mget  <key1>   <key2>   <key3> .....					同时获取一个或多个 value
msetnx <key1>  <value1>  <key2>  <value2>  .....		同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
getrange  <key>  <起始位置>  <结束位置>			获得值的范围,类似java中的substring
setrange  <key>   <起始位置>   <value>				用 <value>  覆写<key> 所储存的字符串值,从<起始位置>开始。
setex  <key>  <过期时间>   <value>					设置键值的同时,设置过期时间,单位秒。
getset <key>  <value>											以新换旧,设置了新值同时获得旧值。

Demo样例

List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。

它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

基本指令:

lpush/rpush  <key>  <value1>  <value2>  <value3> ....			从左边/右边插入一个或多个值。
lpop/rpop  <key> 				从左边/右边吐出一个值并删除。值在键在,值亡键亡。
rpoplpush  <key1>  <key2> 		从<key1>列表右边吐出一个值,插到<key2>列表左边。
lrange <key> <start> <stop>		按照索引下标获得元素(从左到右)
lindex <key> <index>					按照索引下标获得元素(从左到右)
llen <key>			获得列表长度
linsert <key>  before <value>  <newvalue>	在<value>的前面插入<newvalue> 插入值
lrem <key> <n>  <value>		从左边删除n个value(从左到右)

Demo样式

Set(集合)

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。

基本指令:

sadd <key>  <value1>  <value2> .....   		将一个或多个 value元素加入到集合 key 当中,已经存在于集合的 value 元素将被忽略。
smembers <key>		取出该集合的所有值。
sismember <key>  <value>			判断集合<key>是否为含有该<value>值,有返回1,没有返回0
scard   <key>		返回该集合的元素个数。
srem <key> <value1> <value2> ....			删除集合中的某个元素。
spop <key>		随机从该集合中吐出一个值并删除。
srandmember <key> <n>		随机从该集合中取出n个值。不会从集合中删除
sinter <key1> <key2>		返回两个集合的交集元素。
sunion <key1> <key2>  	返回两个集合的并集元素。
sdiff <key1> <key2>		返回两个集合的差集元素。

Demo样式

Hash(哈希)

  • Redis hash 是一个键值对集合。
  • Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
  • 类似Java里面的Map<String,String>

基本指令:

hset <key>  <field>  <value>		设置<key>集合中指定字段的值
hget <key>  <field>		从<key>集合取出字段的value
hmset <key>  <field1> <value1> <field2> <value2>...		批量设置hash的值
hexists key  <field>		查看哈希表 key 中,给定域 field 是否存在。
hkeys <key>		列出该hash集合的所有field
hvals <key>			列出该hash集合的所有value
hincrby <key> <field>  <increment>	将该对象中指定域的值增加给定的value,原子自增操作,只能是integer的属性值可以使用
hsetnx <key>  <field> <value>		将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 .

Demo样式

Zset(sorted set:有序集合)

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。

因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。

基本指令:

zadd  <key> <score1> <value1>  <score2> <value2>...		将一个或多个 value元素及其 score 值加入到有序集 key 当中。
zrange <key>  <start> <stop>  [WITHSCORES]  		返回有序集 key 中,下标在<start> <stop>之间的元素,带WITHSCORES,可以让分数一起和值返回到结果集。
zrangebyscore key min max [withscores] [limit offset count]		返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
zrevrangebyscore key max min [withscores] [limit offset count]		同上,改为从大到小排列。
zincrby <key> <increment> <value>		为元素的score加上增量
zrem  <key>  <value>  		删除该集合下,指定值的元素
zcount <key>  <min>  <max> 		统计该集合,分数区间内的元素个数
zrank <key>  <value> 			返回该值在集合中的排名,从0开始。

Demo样式

RedisDesktopManager数据查看工具

RedisDesktopManager是一款开源的Redis数据库管理应用程序。

下载完成后,安装就直接点下一步即可

安装完成后创建连接后就可以使用了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Redis基本数据类型List常用操作命令

    目录 Redis数据类型List操作 一.push 插入元素 1. lpush,在头部插入 2. rpush,在尾部插入 二.range 通过区间获取元素 三.pop 移除元素 1. lpop 左边移除 2. rpop 右边移除 四.lindex 通过下标获取元素 五.llen 获取list长度 六.lrem 移除指定元素 七.ltrim 修剪 八.组合命令 rpoplpush 移除并添加 九.exists 判断key 是否存在 十.lset,设置指定下标的值 十一.linsert,指定位置之前

  • Redis不同数据类型的命令语句详解

    目录 一.String Ⅰ.set.get.append.strlen.exists Ⅱ.incr.decr.incrby.decrby Ⅲ.getset.setnx Ⅳ.setex.ttl Ⅴ.mget.mset.msetnx 二.List Ⅰ.lpush.lpushx.lrange Ⅱ.lpop.llen Ⅲ.lrem.lset.lindex.ltrim Ⅳ.linsert Ⅴ.rpush.rpushx.rpop.rpoplpush 三.Hash Ⅰ.hset.hget.hexisits.h

  • Redis基本数据类型String常用操作命令

    目录 Redis数据类型String操作命令 一.append 追加字符串 二.strlen 获取key 字符串长度 三.自增.自减 四.字符串range 五.替换字符串 六.设置值及其过期时间 setex setnx 七.批量操作 1. mset.mget 2. msetnx 八.设置一个json对象 九.getset 先获取再设置 Redis数据类型String操作命令 一.append 追加字符串 append name 2222 二.strlen 获取key 字符串长度 strlen n

  • Redis基本数据类型Set常用操作命令

    目录 Redis基本数据类型Set常用操作 一.sadd 添加一个.多个元素 二.smembers 查看集合 三.scard 元素数量 四.srem 移除一个.多个元素 五.srandmember 随机元素 六.spop 随机移除一个.多个元素 七.smove 移动元素到目标集合 八.sdiff 差集 九.sinter 交集 十.sunion 并集 Redis基本数据类型Set常用操作 Set是String类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. 另外,redis中

  • Python利用redis-py实现哈希数据类型的常用指令操作

    目录 哈希数据类型的创建与数据的添加 - hmset 哈希数据类型已存在的记录添加记录 - hset 哈希数据类型已存在的记录删除记录 - hdel 哈希数据类型判断某记录是否存在 - hexists 获取哈希数据类型的所有元素 - hgetall 哈希数据类型相关指令演示小案例 哈希数据类型的创建与数据的添加 - hmset 利用 “redis-py” 模块实现 “哈希数据类型” 的创建及哈希表数据的添加. con.hmset("userinfo", {"name"

  • 一文快速搞懂Redis的几种数据类型方式

    目录 Redis简介 Redis有几种数据类型 Redis的基本指令 String(字符串) List(列表) Set(集合) Hash(哈希) Zset(sorted set:有序集合) RedisDesktopManager数据查看工具 Redis简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(so

  • 一文带你搞懂Redis分布式锁

    目录 1.分布式锁简介 2.setnx 3.Redis-分布式锁-阶段1 4.Redis-分布式锁-阶段2 5.Redis-分布式锁-阶段3 6.Redis-分布式锁-阶段4 7.Redis-分布式锁-阶段5 1.分布式锁简介 分布式锁是控制分布式系统不同进程共同访问共享资源的一种锁的实现.如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性. 业界流行的分布式锁实现,一般有这3种方式: 基于数据库实现的分布式锁 基于Redis实现的分布式锁 基于

  • 一文彻底搞懂IO底层原理

    目录 一.混乱的 IO 概念 二.用户空间和内核空间 三.IO模型 3.1.BIO(Blocking IO) 3.2."C10K"问题 3.3.NIO非阻塞模型 3.4.IO多路复用模型 3.4.1.select() 3.4.2.poll() 3.4.3.epoll() 四.同步.异步 五.总结 一.混乱的 IO 概念 IO是Input和Output的缩写,即输入和输出.广义上的围绕计算机的输入输出有很多:鼠标.键盘.扫描仪等等.而我们今天要探讨的是在计算机里面,主要是作用在内存.网卡

  • 一篇文章带你彻底搞懂Redis 事务

    目录 Redis 事务简介 Redis 事务基本指令 实例分析 Redis 事务与 ACID 总结 Redis 事务简介 Redis 只是提供了简单的事务功能.其本质是一组命令的集合,事务支持一次执行多个命令,在事务执行过程中,会顺序执行队列中的命令,其他客户端提交的命令请求不会插入到本事务执行命令序列中.命令的执行过程是顺序执行的,但不能保证原子性.无法像 MySQL 那样,有隔离级别,出了问题之后还能回滚数据等高级操作.后面会详细分析. Redis 事务基本指令 Redis 提供了如下几个事

  • 3分钟快速搞懂Java的桥接方法示例

    什么是桥接方法? Java中的桥接方法(Bridge Method)是一种为了实现某些Java语言特性而由编译器自动生成的方法. 我们可以通过Method类的isBridge方法来判断一个方法是否是桥接方法. 在字节码文件中,桥接方法会被标记为ACC_BRIDGE和ACC_SYNTHETIC,其中ACC_BRIDGE用于表示该方法是由编译器产生的桥接方法,ACC_SYNTHETIC用于表示该方法是由编译器自动生成. 什么时候生成桥接方法? 为了实现哪些Java语言特性会生成桥接方法?最常见的两种

  • 一文彻底搞懂Kotlin中的协程

    产生背景 为了解决异步线程产生的回调地狱 //传统回调方式 api.login(phone,psd).enquene(new Callback<User>(){ public void onSuccess(User user){ api.submitAddress(address).enquene(new Callback<Result>(){ public void onSuccess(Result result){ ... } }); } }); //使用协程后 val use

  • 一文彻底搞懂Java和JDK的版本命名问题

    Java是面向对象的编程语言,在我们开发Java应用的程序员的专业术语里,Java这个单词其实指的是Java开发工具,也就是JDK(Java Development Kit).所以我们常常在CSDN等各大程序员论坛讨论到安装Java8或者JDK8或者JDK1.8或J2SE8或J2SE1.8或J2SE8或J2SE1.8,其实这3个专业词汇的概念是一样的. 告诉庆哥,你对Java的版本号以及JDK的命名真正清楚嘛?比如: Java8 Java SE 8.0 JDK1.8 -- 知道这些是怎么回事嘛?

  • 一分钟搞懂Redis的慢查询日志操作

    目录 什么是慢查询? 什么是慢查询日志? 如何获取慢查询日志? 如何获取慢查询日志的长度? 如何清理慢查询日志? 怎么配置慢查询的参数? slowlog-log-slower-than slowlog-max-len 如何进行配置 总结 什么是慢查询? 慢查询,顾名思义就是比较慢的查询,但是究竟是哪里慢呢?首先,我们了解一下Redis命令执行的整个过程: 发送命令 命令排队 命令执行 返回结果 在慢查询的定义中,统计比较慢的时间段指的是命令执行这个步骤.没有慢查询,并不表示客户端没有超时问题,有

  • 一文彻底搞懂Vue的MVVM响应式原理

    目录 前言 Vue的MVVM原理 创建一个html示例 在MVue.js中创建MVue入口 创建Compile 1.处理元素节点compileElement(child) 2.处理文本节点compileText(child) 3.实现compileUtil指令处理 更新器Updater更新数据 实现数据观察者Observer 数据依赖器Dep 观察者Watcher 实现视图驱动数据驱动视图 总结 前言 这些天都在面试,每当我被面试官们问到Vue响应式原理时,回答得都很肤浅.如果您在回答时也只是停

  • 这一次搞懂Spring事务注解的解析方式

    前言 事务我们都知道是什么,而Spring事务就是在数据库之上利用AOP提供声明式事务和编程式事务帮助我们简化开发,解耦业务逻辑和系统逻辑.但是Spring事务原理是怎样?事务在方法间是如何传播的?为什么有时候事务会失效?接下来几篇文章将重点分析Spring事务源码,让我们彻底搞懂Spring事务的原理. 正文 XML标签的解析 <tx:annotation-driven transaction-manager="transactionManager"/> 配置过事务的应该

随机推荐