Java中高级核心知识全面解析(1),95%Java开发者已收藏的十大开源库

C语言不是面向对象语言,这里将redisObject称呼为对象是为了讲述方便,让里面的内容更容易被理解,redisObject其实是一个结构体。

1)redisObject对象

Redis内部使用一个redisObject对象来表示所有的key和value,每次在Redis数据块中创建一个键值对时,一个是键对象,一个是值对象,而Redis中的每个对象都是由redisObject结构来表示。

在Redis中,键总是一个字符串对象,而值可以是字符串、列表、集合等对象,所以我们通常说键为字符串键,表示这个键对应的值为字符串对象,我们说一个键为集合键时,表示这个键对应的值为集合对象

redisobject最主要的信息:

redisobject源码 
typedef struct redisObject{
    
	//类型 
	unsigned type:4; 
	//编码 
	unsigned encoding:4; 
	//指向底层数据结构的指针 
	void *ptr; 
	//引用计数 
	int refcount; 
	//记录最后一次被程序访问的时间 
	unsigned lru:22; 
}robj
  • type代表一个value对象具体是何种数据类型
    • type key :判断对象的数据类型
  • encoding属性和*prt指针
    • prt指针指向对象底层的数据结构,而数据结构由encoding属性来决定
      image
    • 每种类型的对象至少使用了两种不同的编码,而这些编码对用户是完全透明的。
      image
    • object encoding key命令可以查看值对象的编码

2)命令的类型检查和多态

①、Redis命令分类
  • 一种是只能用于对应数据类型的命令,例如LPUSH和LLEN只能用于列表键, SADDSRANDMEMBER只能用于集合键。
  • 另一种是可以用于任何类型键的命令。比如TTL

当执行一个处理数据类型的命令时,Redis执行以下步骤:

  • 根据给定 key ,在数据库字典中查找和它相对应的 redisObject ,如果没找到,就返回 NULL
  • 检查 redisObjecttype 属性和执行命令所需的类型是否相符,如果不相符,返回类型错误。
  • 根据 redisObjectencoding 属性所指定的编码,选择合适的操作函数来处理底层的数据结构。
  • 返回数据结构的操作结果作为命令的返回值。

2.5种数据类型对应的编码和数据结构

1)string

string 是最常用的一种数据类型,普通的key/value存储都可以归结为string类型,value不仅是string,也可以是数字。其他几种数据类型的构成元素也都是字符串,注意Redis规定字符串的长度不能超过512M

编码字符串对象的编码可以是intrawembstr

  • int编码
    • 保存的是可以用long类型表示的整数值
  • raw编码
    • 保存长度大于44字节的字符串
  • embstr编码
    • 保存长度小于44字节的字符串

int用来保存整数值,raw用来保存长字符串,embstr用来保存短字符串。embstr编码是用来专门保存短字符串的一种优化编码。

Redis中对于浮点型也是作为字符串保存的,在需要时再将其转换成浮点数类型

编码的转换

  • 当 int 编码保存的值不再是整数,或大小超过了long的范围时,自动转化为raw
  • 对于 embstr 编码,由于 Redis 没有对其编写任何的修改程序(embstr 是只读的),在对embstr对象进行修改时,都会先转化为raw再进行修改,因此,只要是修改embstr对象,修改后的对象一定是raw的,无论是否达到了44个字节。

常用命令

  • set/get
    • set:设置key对应的值为string类型的value (多次set name会覆盖)
    • get:获取key对应的值
  • mset /mget
    • mset 批量设置多个key的值,如果成功表示所有值都被设置,否则返回0表示没有任何值被设置
    • mget批量获取多个key的值,如果不存在则返回null
127.0.0.1:6379> mset user1:name redis user1:age 22 
OK
127.0.0.1:6379> mget user1:name user1:age 
1) "redis" 
2) "22"
  • 应用场景
    • 类似于哈希操作,存储对象

incr && incrby<原子操作>

  • incr对key对应的值进行加加操作,并返回新的值,incrby加指定的值

decr && decrby<原子操作>

  • decr对key对应的值进行减减操做,并返回新的值,decrby减指定的值

setnx <小小体验一把分布式锁,真香>

  • 设置Key对应的值为string类型的值,如果已经存在则返回0

setex

  • 设置key对应的值为string类型的value,并设定有效期

setrange/getrange

  • setrange从指定位置替换字符串
  • getrange获取key对应value子字符串

其他命令

  • msetnx 同mset,不存在就设置,不会覆盖已有的key
  • getset 设置key的值,并返回key旧的值
  • append 给指定的key的value追加字符串,并返回新字符串的长度
  • strlen 返回key对应的value字符串的长度

应用场

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ...................................................................面试.................................................................................... 19 2.1. 线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 ..................................................................................................................................... 21 2.2.1. 程序计数器(线程私有) ................................................................................................................ 22 2.2.2. 虚拟机栈(线程私有) .................................................................................................................... 22 2.2.3. 本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 ...................................................................................... 23 2.2.5. 方法区/永久代(线程共享) ..................................................................................................... 23 2.3. JVM 运行时内存 ................................................................................................................................. 24 2.3.1. 新生代 .......................................................................................................................................... 24 2.3.1.1. 2.3.1.2. 2.3.1.3. 2.3.1.4. Eden 区 .................................................................................................................................................... 24 ServivorFrom........................................................................................................................................... 24 ServivorTo ...........................................
### 回答1: Java开源企业知识是一种基于Java语言开发的、具有开放源代码的企业知识管理软件。它旨在帮助企业有效地管理和共享内部知识,提高团队协作效率。 Java开源企业知识具有以下几个特点: 1. 开放源代码:这个项目是开源的,任何人都可以查看和修改源代码,以适应自己的需求和业务流程。 2. 跨平台:由于基于Java语言开发,该知识可以在不同的操作系统上运行,如Windows、Linux、Mac等。 3. 多种知识管理功能:它提供了多种功能,如文档管理、版本控制、协作编辑、知识分享和搜索等,帮助企业建立起完善的知识体系。 4. 灵活的权限控制:可以根据不同的用户角色和权限设置不同的操作权限,确保知识的安全性和机密性。 5. 高效的搜索功能:通过在知识中建立索引,可以快速搜索到所需的知识内容,提高用户的查询效率。 6. 数据统计与分析:可以对知识中的数据进行统计和分析,提供报表和图表,为企业决策提供参考依据。 7. 第三方集成:可以与其他企业软件进行集成,如企业资源规划(ERP)系统、客户关系管理(CRM)系统等,提高企业的整体管理效率。 Java开源企业知识的出现,为企业提供了一个便捷、高效的知识管理平台,可以帮助企业更好地组织和利用内部知识资源,提高工作效率和竞争力。同时,它的开放源代码也为开发者提供了一个学习和创新的平台,促进了Java技术的发展和应用。 ### 回答2: Java开源企业知识是一种由Java语言编写的开源软件工具,旨在帮助企业有效管理和分享内部知识资源。该知识以集成化的方式提供了一套完整的功能模块,包括知识的存储、组织、检索和共享等。 首先,Java开源企业知识可以为企业建立一个统一的知识管理系统,将企业内部的各种知识资源集中在一起,并通过分类、标签等方式对知识进行组织和归档。这样一来,员工可以方便地检索和获取需要的知识,避免了重复工作和知识浪费。 其次,该知识具备强大的搜索功能,可以根据关键词、标签、作者等进行高效的检索,帮助员工快速定位所需的知识,提高工作效率。同时,搜索结果还可以按照相关度和时间等维度进行排序,进一步提高知识的获取效果。 另外,Java开源企业知识还支持多样化的知识共享方式。员工可以通过文章、文档、代码、图片等多种媒体形式来分享自己的经验和知识,同时也可以在评论和讨论区进行互动交流,促进知识的共享和碰撞。 此外,该知识还支持权限管理功能,可以根据员工角色和部门等设置不同的权限,确保知识的安全和保密性。同时,也提供了版本控制和历史记录功能,保留知识的演变过程,便于追溯和回溯。 总的来说,Java开源企业知识是一种功能强大、易于使用的知识管理工具,为企业提供了一个集中化、高效化的平台,有助于提升企业的协同效率和竞争力。 ### 回答3: Java开源企业知识是一种基于Java技术实现并且开源的企业级知识管理系统。它旨在提供一个集中存储和管理企业内部知识的平台,方便用户分享和获取知识,提升企业的协作效率和决策能力。 Java开源企业知识具有以下特点和功能: 1. 知识的集中存储与管理:该系统允许用户将各种类型的知识文档、文件和信息集中存储在一个统一的平台上,方便用户进行分类、管理和检索。 2. 信息的分享与协作:用户可以通过知识发布和分享自己的经验、教程、技术文档等信息,也可以与其他用户进行协作和讨论,促进知识的共享与传播。 3. 文档的版本控制和权限管理:知识支持文档的版本控制,可以记录和管理文档的修改历史,同时也可以设置不同的权限来控制用户对知识中不同内容的访问和修改权限。 4. 搜索与检索:知识提供强大的搜索和检索功能,用户可以通过关键字、标签、分类等方式来快速找到所需的知识和文档。 5. 统计与报表:知识可以对用户的活动、知识分享情况等进行统计和报表,帮助企业了解知识管理的效果和参与度。 6. 安全性与可扩展性:该系统具有较高的安全性,可以对用户的信息和文档进行加密和权限控制;同时也具备良好的可扩展性,可以根据企业的需求进行定制和扩展。 总之,Java开源企业知识通过提供一个集中管理和分享知识的平台,帮助企业提升知识共享和协作能力,促进创新和业务发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值