java开发技术之Redis类型技能入门篇

字符串

首先Redis数据存储都会以key value 的形式进行存放, 所有的key都是字符串类型。此处所说的类型特指的是value中存放的类型。下文所讲的hash、列表都是基于value上进行讲解的。Redis会根据传入字符串类型规则进行判断,java培训并采取相应的内部编码进行存储。数值型会采用8个字节的长整型进行编码存储,小于等于39个字节的字符串采用emstr编码存储,大于39字节的字符串采用raw编码存储。如果需要查看该键对应值的存储类型可运行object encoding k1命令。

  • 常用写命令

(  )          (   )
  • 常用读命令

1// 1. 获取键 k1 的 值2get k1 3// 2. 批量获取 k1,k2,k3 的值4mget k1 k2 k3 k4

注意:key一般我们都会采用业务名:对象名:属性名的方式进行命名。


哈希

哈希类型在Redis中value是以{{key,value},{key,value}}的形式存储,我们通过字符和哈希类型的存储模型图来更直观的认识它们两者之间的关系,如图1-1

图1-1

Redis对于哈希类型的存储会根据哈希类型个数(对应图中的field个数)采取不同编码进行存储。如果哈希类型个数小于hash-max-ziplist-entries(默认512个)且所有值的(对应图中的value)存储大小都小于hash-max-ziplist-value(默认64字节)那么会使用更加紧凑的ziplist编码进行存储。

当无法满足ziplist条件的时候会采用hashtable编码方式进行存储。因为在节省内存方面ziplist比hashtable更优秀,但如果数据量上来后检索效率不及hashtable。

  • 常用写命令

::  

 ::   

 ::     

 ::
  • 常用读命令

:: 

  ::   

  ::

  ::

 ::

列表

Redis中列表类型的存储模型如图1-2:

图1-2

列表类型中value最多的存储元素为2^32-1个,可重复。value元素的内部编码根据元素个数和大小会采取ziplist和linkedlist两种编码方式进行存储。当value元素个数小于list-max-ziplist-entries(默认512),同时value中每个元素的大小小于list-max-ziplist-value(64字节)会采取ziplist进行编码。

当无法满足ziplist的条件会采取linkedlist编码。ziplist编码对数据进行压缩以减少内存,而linkedlist采用链表的数据结构来存储数据。据说Redis3.2 版本之后提供了一个更合理的内部编码 quicklist,它结合ziplist和linkedlist两者的优势。

  • 常用写命令

为了行文方便 对于从左往右我们用此图标进行标记:➡️, 从右往左用此图标标记⬅️,列表都特指user:1:message

::  

  ::  

  ::   

  ::   

 ::

 ::

 ::  

 :: 

 ::  

 ::   

 ::
  • 常用读命令

::    

  ::   

  :: 

  ::
  • 应用场景

  1. 通过lpush + brpop 命令 实现消息队列。

  2. 每个用户都有属于自己的文章列表,需要分页显示各个用户的文章列表。


集合

集合类型的元素是可以重复的,如图1-3为集合类型的存储模型图:

图1-3

集合类型的内部编码有两种:

  1. intset, 当集合类型为整数且数量小于set-max-inset-entries(默认512),会采取该编码方式

  2. 当无法满足intset编码的条件会采取hashtable

  • 常用的写命令

:   

  :  

  : 

   : :

  : :

  : :
  • 常用的读命令

: 

  : 

  :   : 

  :

 : :

 : :

 : :

注意:当集合的元素过多的时候,使用smembers命令会有损性能,建议使用sscan命令来完成。


有序集合

有序集合类型的存储模型如图1-4:

图1-4

它可以类比集合类型和哈希类型的组合,其中value中包含两个主要的字段score和member,member中元素的值不能够重复,而score中元素的类型为整型值能够重复。通过score中元素的值我们能够对member中的元素进行排序。
内部也采用了两种编码:

  1. ziplist (压缩列表)

  2. skiplist (跳跃表)

  • 写操作命令

1// 1. 添加集合成员 ,(85 、 zmj) 2zadd users 85 zmj 3// 2. 添加集合成员 ,存在才能设置成功 4zadd users XX 87 zhangmoujiang 5// 3. 添加集合成员,不存在才能设置成功 6zadd users NX 87 zhangmoujiang 7// 4. 删除集合内成员 caonimei 8zrem users caonimei 9// 5. 给成员xunini增加 1分,如果没有成员会自动添加10zincrby users 1 xuxnini
  • 读操作命令

[]

    []

几个管理键的常用命令

1//1. 当前数据库的键数量 2dbsize 3//2. 随机返回当前数据的一个键 4randomkey 5//3. 设置键key1 20 秒过期,如果键不存在返回结果为0。某个键设置了过期时间,然后执行了set命令,那么该键的过期时间会被清除。 6expire key1 20  7//4. 查看key1键还剩几秒过去,返回数字的单位为秒。返回-2 表示已过期 8ttl key1 9//5. 移除键key1的过期时间10persisit  key1 11//6. 获取所有键,keys后面可接类正则的表达式来匹配键的名称12keys * 13//7. 选择0号数据库,redis中默认有16个数据库 ,编号从0开始...14select 015//8. 清除当前数据库数据16flushdb17//9. 清除所有数据库数据18flushall

(0)

相关推荐

  • redis五大数据类型使用场景

    Redis是一种基于键值对的NoSQL数据库,它的值主要由string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)五种基本数据结构构成,除此之外还支持一些其他的 ...

  • 如何使用好 Redis 内存数据库

    接下来,我们来聊聊如何使用好 Redis 内存数据库. 目前主流的内存数据库是 Redis,它使用 IO 多路复用机制监听多个文件描述符的读写事件,然后使用单线程来处理任务.如下图所示. 虽然能避免线 ...

  • Redis 数据结构

    一.Redis简介 Redis是一款基于key-value的高性能NoSQL数据库,开源免费,遵守BSD协议.支持string(字符串) . hash(哈希) .list(列表) . set(集合) ...

  • Redis学习笔记:Redis简介

    一.NoSQL和关系型数据库区别 NoSQL非关系型数据库:Redis.MongoDB.HBase等,基于Key-Value存储,采用命令操作. 关系型数据库:Oracle.MySQL.DB2.SQL ...

  • Java开发技术之 SSM框架的学习分享

    Spring框架: Spring是一个轻量级JavaEE开发框架,以Ioc和AOP为核心,在spring中,认为一切都是资源,而资源是类的实例化对象(Bean),容纳并管理这些Bean的是spring ...

  • java开发技术之tomcat的参数调优

    一般最常做的更改,就是修改服务器的端口,也就是server.xml里的Connector部分.典型如下图所示: 其实,大部分优化,也是在Connector标签之内,从端口.并发到线程,都可以在这里配置 ...

  • java开发技术之Netty几个核心类介绍

    ByteBuf JDK原生ByteBuffer的核心功能 字节缓冲区,主要对字节进行操作的一个类 能够将缓冲区建立在堆内和堆外.普通的new byte[] ,都只是建立在堆内 Netty之所以要自己封 ...

  • java开发技术之Executors创建线程池的弊端

    java开发技术之Executors创建线程池的弊端

  • java开发技术之synchronized的使用浅析

    synchronized 这个关键字的重要性不言而喻,几乎可以说是并发.多线程必须会问到的关键字了.synchronized 会涉及到锁.升级降级操作.锁的撤销.对象头等.所以理解 synchroni ...

  • 厨艺技能入门篇——炒素菜厨房工作的小弟想...

    厨艺技能入门篇--炒素菜 厨房工作的小弟想要上灶炒菜,第一关就是炒素菜的考试.想把一盘普通的素菜炒好,原料少出水还能保持色泽翠绿,口感鲜嫩.这里面也是有大学问的,师傅不教的话,靠自己去悟又需要很长时间 ...

  • Java开发常用技术基础部分有哪些?

    在Java中,OOM是java.lang.OutOfMemoryError异常的缩写,简单来说是应用的内存用完了.而这个内存,指代的是JVM管理的内存模型. Java开发常用技术基础有如下几种: Pr ...

  • java多线程技术从入门到精通,40个Java多线程问题总结

    这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题. 这些多线程的问题,有些来源于各大网站.有些来源于自己的思考.可能有些问题网上有.可能有些问题对应的答案也有.也可能有些各位网友也 ...

  • Java开发中POJO和JSON互转时如何忽略隐藏字段

    Java开发中POJO和JSON互转时如何忽略隐藏字段