redis 笔记02

对象

1. Redis数据库中的每个键值对的键和值都是一个对象。

2. Redis共有字符串、列表、哈希、集合、有序集合五种类型的对象,每种类型的对象至少都有两种或者以上的编码方式,不同的编码可以在不同的使用场景上优化对象的使用效率。

3. 服务器在执行某些命令之前,会先检查给定键的类型能否执行指定的命令,而检查一个键的类型就是检查键的值对象的类型。

4. Redis的对象系统带有引用计数实现的内存回收机制,当一个对象不再被使用时,该对象所占用的内存就会被自动释放。

5. Redis会共享值为0到9999的字符串对象。Redis只对包含整数值的字符串对象进行共享。

6. 对象会记录自己的最后一个被访问的时间,这个时间可以用于计算对象的空转时间,用以判断回收内存。

1. 每次当我们在Redis的数据库中新创建一个键值对时,我们至少会创建两个对象,一个对象用作键值对的键(键)对象,另一个对象用作键值对的值(值对象)

2. Redis中的每个对象都由一个redisObject结构表示,该结构中和保存数据相关的三个属性分别是type属性,encoding属性和ptr属性。

3. 对于Redis数据库保存的键值对来说,键总是一个字符串对象,而值则可以是字符串对象、列表对象、哈希对象、集合对象或者有序集合对象的其中一种。

4. type key 命令返回该键对应的值对象的类型,而不是键对象的类型。type的返回值:string,list,hash,set,zset

5. 对象的ptr指针指向对象的底层实现数据结构,而这些数据结构由对象的encoding属性决定。encoding属性记录了对象所使用的编码,也即是说这个对象使用什么数据结构

(字典,链表等)作为对象的底层实现。

6. 每种类型的对象都至少使用了两种不同的编码。Redis可以根据不同的使用场景来为一个对象设置不同的编码,从而优化对象在某一场景下的效率。

7. 使用OBJECT ENCODING命令可以查看一个数据库的值对象的编码。

8. 字符串的编码可以是int,raw 或者 embstr。在条件满足的情况下,int和embstr会被转换成raw编码的字符串对象。

9. 字符串常用命令:

SET , GET , APPEDN , INCRBYFLOAT(浮点数加法),INCRBY(整数加法),DECRBY(整数减法),STRLEN(返回字符串的长度),SETRANGE(设置特定索引的值),GETRANGE(获取特定索引的值)

10. 列表对象的编码可以是ziplist或者linkedlist。

11. 列表常用命令:

LPUSH(新元素添加到表头),RPUSH(新元素添加到表尾),LPOP(获取并删除表头节点),RPOP(获取并删除表尾节点),LINDEX(获取指定索引的元素),LLEN(获取列表长度),

LINSERT(在列表指定位置插入元素),LREM(删除不在指定索引范围内的节点),LSET(更新指定位置上的节点)

12. 哈希对象的编码可以是ziplist或者hashtable .

13. 哈希对象常用命令:

HSET(添加新节点),HGET(获取对应的值),HEXISTS(判断指定的键是否存在),HDEL(删除指定的节点),HLEN(返回键值对数量),HGETALL(返回所有键值对)

14. 集合对象的编码可以是intset或者hashtable

15. 集合对象常用命令:

SADD,SCARD(获取元素数量),SISMEMBER(判断元素是否存在),SMEMBERS(返回所有键值),SRANDMEMBER(随即返回一个元素),SPOP(随即获取并删除元素),SREM(删除所有给定元素)

16. 有序集合对象,编码可以是ziplist或者skiplist

17. 有序集合对象常用命令:

ZADD,ZCAR(获取集合元素数量),ZCOUNT(获取给定范围内节点数量),ZRANG(从表头到表尾,返回给定索引范围内的所有元素),ZREVRANGE(从表尾到表头,返回给定索引范围内的所有元素),

ZRANK(从表头向表尾,返回节点排名),ZREVRANK(从表尾到表头,返回节点排名),ZREM(删除),ZSCORE(获取分值)

18. Redis中用于操作键的命令基本上可以分为两种类型:

1). 可以对任何类型的键执行,比如:DEL命令,EXPIRE命令、RENAME命令、TYPE命令 、OBJECT命令等。

2). 只能对特定类型的键执行:

SET,GET,APPEND,STRLEN等命令只能对字符串键执行;

HDEL,HSET,HGET,HLEN等命令只能对哈希键执行;

RPUSH,LPOP,LINSERT,LLEN等命令只能对列表键执行;

SADD,SPOP,SINTER,SCARD等命令只能对集合键执行;

ZADD,ZCARD,ZRANK,ZSCORE等命令只能对有序集合键执行。

19. Redis除了会根据值对象的类型来判断键是否能够执行指定的命令之外,还会根据值对象的编码方式,选择正确的命令实现代码来执行命令,决定调用哪种结构的函数来执行。

20. 内存回收:当对象的引用计数值变为0时,对象所占用的内存会被释放。

时间: 2024-12-21 13:35:06

redis 笔记02的相关文章

Redis笔记整理(二):Java API使用与Redis分布式集群环境搭建

[TOC] Redis笔记整理(二):Java API使用与Redis分布式集群环境搭建 Redis Java API使用(一):单机版本Redis API使用 Redis的Java API通过Jedis来进行操作,因此首先需要Jedis的第三方库,因为使用的是Maven工程,所以先给出Jedis的依赖: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactI

Redis笔记整理(三):进阶操作与高级部分

[TOC] Redis笔记整理(三):进阶操作与高级部分 Redis发布订阅 Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis客户端可以订阅任意数量的频道. 下图展示了频道channel1,以及订阅这个频道的三个客户端--client1,client2,client5之间的关系. 当有新消息通过PUBLISH命令发送给频道channel1时,这个消息就会被发送给订阅它的三个客户端: 相关操作命令如下: 命令 描述 PSUBS

redis笔记

redis笔记 下载完redis,执行make命令. 然后启动redis就进src文件夹,执行./redis-server就可以了. 再在文件夹下执行 ./redis-cli 就可以执行redis的命令了. pipelining  一次请求发送多个命令,以提高性能.我们在使用redis时都是向它发送命令,每次都是需要和redis建立tcp连接,然后发送命令信息,redis执行命令后,客户端等待着redis的响应.这个我们当然知道,就像访问db,IO开销都是消耗资源的大头,所以redis提供了pi

【OpenGL 学习笔记02】宽点画线

我们要知道,有三种绘图操作是最基本的:清除窗口,绘制几何图形,绘制光栅化对象. 光栅化对象后面再解释. 1.清除窗口 比如我们可以同时清除颜色缓冲区和深度缓冲区 glClearColor (0.0, 0.0, 0.0, 0.0);//指定颜色缓冲区清除为黑色 glClearDepth(1.0);//指定深度缓冲区的清除值为1.0 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//指定要清除的缓冲区并清除 2.绘制几何图形 先要设置绘制颜色,

SWIFT学习笔记02

1.//下面的这些浮点字面量都等于十进制的12.1875: let decimalDouble = 12.1875 let exponentDouble = 1.21875e1 let hexadecimalDouble = 0xC.3p0//==12+3*(1/16) 2.//类型别名,用typealias关键字来定义类型别名 typealias AudioSample = UInt16 var maxAmplitudeFound = AudioSample.min 3.//元组 let ht

Blender学习笔记 | 02 | 操作

Shift 点击不同图层 同时显示多图层物件 z 切换 Solid / Wireframe 视图模式 点选物件后M 移动到图层选项 Ctrl + 鼠标左键拖动 自由全选物件 B 方形区域圈选物件 Tab Object / Edit Mode 切换 T 开 / 关 侧栏 Ctrl + Tab 编辑状态下切换编辑对象 E Extrude Region 推挤区域.以发现为轴线. X 删除物件菜单 Blender学习笔记 | 02 | 操作,布布扣,bubuko.com

《构建之法》阅读笔记02

<架构之美>阅读笔记02 今天,我读了<架构之美>第三.四章,第三章主要讲伸缩性架构设计,书中说设计系统架构时,要确保系统在伸缩时的弹性,根据书中的介绍我对系统伸缩性的理解是每个网站在不同时期都会有不同的访问量,有时会很多,有时会较少,当较多的人访问你的系统时,你可能需要数量较多的设备来满足用户与系统的交互,但当访问的用户越来越少时,系统伸缩性如果不够好,很多设备就会被浪费,不能够与系统分离,这对于软件开发者是不可取的.Darkstar项目就是由Sun公司实验室承担的一个将在架构的

《用户故事与敏捷开发》阅读笔记02

 <用户故事与敏捷开发>阅读笔记02       这周读了<用户故事与敏捷开发>的第四至七章,第四章讲述的是如何搜集故事,也就是如何正确的去找到用户需求.作者明确指出"引用"和"捕捉"是不合用的.所谓"引用"和"捕捉",我想是通过用户对功能的表述,开发人员从中获取需求信息吧.如果是这种方法来获取需求,正如作者所说,用户不会知道所有的需求,所以只靠着这方法是远远不够的.对于故事编写的数量以及程度,作者认为

mongodb 学习笔记 02 -- CURD操作

mongodb 学习笔记 02 – CURD操作 CURD代表创建(Create).更新(Update).读取(Read)和删除(Delete)操作 创建库 直接 use 库名 然后创建collection 就可以创建库 创建collecion db.createCollection("collectionName") 隐式创建collection db.collectionName.insert({xxxxxx}) 删除collection db.collectionName.dro