没有合适的资源?快使用搜索试试~ 我知道了~
redis基本使用,满足日常开发使用
需积分: 2 0 下载量 160 浏览量
2022-12-16
15:13:42
上传
评论
收藏 45KB DOCX 举报
温馨提示
试读
27页
个人redis学习的总结,可满足日常开发使用
资源推荐
资源详情
资源评论
Redis6 笔记.md
一、相关知识
Redis 是单线程+多路 IO 复用技术
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用 select 和 poll 函数,传入多个文件
描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程
里执行,也可以启动线程执行(比如使用线程池)
二、常用五大数据类型
查看常见 redis 操作命令
http://www.redis.cn/commands.html
2.1 键(key)
2.1.1 常见命令
keys * 查看当前库所有 key (匹配:keys *1)
set k1 mary k1 为键,mary 为值
exists key 判断某个 key 是否存在
type key 查看你的 key 是什么类型
del key 删除指定的 key 数据
unlink key 根据 value 选择非阻塞删除。仅将 keys 从 keyspace 元数据中删除,真正的删除会在后续异步操作。
expire key 10 10 秒钟:为给定的 key 设置过期时间
ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已过期
select 命令切换数据库
dbsize 查看当前数据库的 key 的数量
flushdb 清空当前库
flushall 通杀全部库
2.2 字符串(String)
String 类型是 Redis 最基本的数据类型,一个 Redis 中字符串 value 最多可以是 512M
2.2.1 常见命令
set <key><value>添加键值对
*NX:当数据库中 key 不存在时,可以将 key-value 添加数据库
*XX:当数据库中 key 存在时,可以将 key-value 添加数据库,与
NX 参数互斥
*EX:key 的超时秒数
*PX:key 的超时毫秒数,与 EX 互斥
相同的 key,会覆盖
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 中储存的数字值增减。自定义步长。
所谓原子操作是指不会被线程调度机制打断的操作;
这种操作一旦开始,就一直运行到结束,中间不会有任何 context
switch (切换到另一个线程)。
(1)在单线程中, 能够在单条指令中完成的操作都可以认为是"
原子操作",因为中断只能发生于指令之间。
(2)在多线程中,不能被其它进程(线程)打断的操作就叫原子
操作。Redis 单命令的原子性主要得益于 Redis 的单线程。
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>所储存的字符串值,从<起始位置>开始(索引从 0 开始)。
setex <key><过期时间><value> 设置键值的同时,设置过期时间,单位秒。
getset <key><value> 以新换旧,设置了新值同时获得旧值。
2.2.2 数据结构
String 的数据结构为简单动态字符串(Simple Dynamic String,缩写 SDS)。是可以修改的字符串,内部结构实现上类似于
Java 的 ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.
如图中所示,内部为当前字符串实际分配的空间 capacity 一般要高于实际字符串长度 len。当字符串长度小于 1M 时,
扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M 的空间。需要注意的是字符串最大长度为 512M。
2.3 列表(List)
单键多值
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
2.3.1 常见命令
push/rpush <key><value1><value2><value3> .... 从左边/右边插入一个或多个值。
lpop/rpop <key> 从左边/右边吐出一个值。值在键在,值光键亡。
rpoplpush <key1><key2>从<key1>列表右边吐出一个值,插到<key2>列表左边。
lrange <key><start><stop> 按照索引下标获得元素(从左到右)
lrange mylist 0 -1 0 左边第一个,-1 右边第一个,(0-1 表示获取所有)
lindex <key><index> 按照索引下标获得元素(从左到右)
llen <key> 获得列表长度
linsert <key> before <value><newvalue>在<value>的前面插入<newvalue>插入值
lrem <key><n><value>从左边删除 n 个 value(从左到右)
lset<key><index><value>将列表 key 下标为 index 的值替换成 value
2.3.2 数据结构
List 的数据结构为快速链表 quickList。
首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是 ziplist,也即是压缩列表。
它将所有的元素紧挨着一起存储,分配的是一块连续的内存。
当数据量比较多的时候才会改成 quicklist。
因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是 int 类型的数据,结构上还需要
两个额外的指针 prev 和 next。
Redis 将链表和 ziplist 结合起来组成了 quicklist。也就是将多个 ziplist 使用双向指针串起来使用。这样既满足了快速
的插入删除性能,又不会出现太大的空间冗余。
剩余26页未读,继续阅读
资源评论
会飞的二狗
- 粉丝: 0
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功