redis五种数据结构详解
5.相关介绍和命令
5. redis是单线程+多路io复用技术
多路复用是指使用一个线程来检查多个文件描述符的就绪状态,比如调用select和poll函数,传入多个文件毛舒服,如果有一个文件描述符就绪,则返回,否则阻塞到超时。得到就绪状态后进行真正的操作可以在用一个线程里执行,也可以启动线程执行(比如使用线程池)
串行 vs 多线程+锁 vs 单线程+多路io复用(redis)


5.2 redis 健(key)
keys * 才看看当前库所有的key


exists key的名称 1表示在 0表示不存在
type key key的类型
del key 删除 key
expeire key 设置过期时间
ttl key 查看还有多久过期 -1 永不过期 -2过期
select 数字 表示切换库 select 1 切换到1号库
dbsize 查看当前数据库的key的数量
flushdb 清空当前库
flushall 清空所有库
5.2常用数据类型操作 string
string字符串是redis的最基本的啥类型,一个key对应一个value ,string类型是二进制安全的,意味着redis的string可以包含任何数据,比如jpg 图片或者序列化对象
基本命令:
set命令:
set k1 v100 为k1设置值为v100
get k1 查询k1的值
append k1 abc k1的值为v100abc
strlen 获取值的长途
setnx 只有在key不存在的时候,才能成功 setnx k1 v1 返回 0 为不成功 为1 表示成功
incr 将key中存储的数字值增1
decr 将key中存储的数字值减1
** 注意redis中是原子操作:因为redis是单线程+多路io复用**
5.3思考 java中的 i++是否为原子操作


下一波命令:
mset:设置多个key value
mget:设置多个value
msetnx: 任何一个存在,则所有都失败
getrange:获取指定大小的范围的值
setrange 在指定的范围设置值
5.3redis列表
单键多值
redis列表是简单的字符串列表,按照插入顺序飘絮。你可以添加一个元素到列表的头部(左边)或者尾部(右边),它的底层为一个双向列表,
常用命令:
lpush:左边添加value值
rpush: 右边添加value值
lrange: 从左边开始取(到范围为止)
lpop/rpop 从左/右吐出一个值。值在健在,值光健亡
lrange 获取指定范围的值
lindex 按照索引下表获取元素
llen 获取列表长度
linsert before 在的后面插入插入值
lset 将列表key下表为index的值替换为value
5.4 集合 set
set和list差不多,主要是会自动排重,而且数无序的。redis的set是string类型的无序集合,他底层其实是一个value为null的hash表,所以添加、删除、查找的复杂度都是0(1)。
常用命令:
sadd:将一个或多个元素加入到集合可以在指那个,已经存在的member元素将被忽略
smembers:取出所以集合的值
sismember:是否含有该值
scard:返回该集合的元素个数
srem 删除集合中的某个元素
spop:随机从该集合吐出一个值
srandmember:随机从该集合中取出n个值,不会从改集合中删除。
smove:把集合中的某一个值从一个集合移动到另一个集合
**sinter 返回两个集合的交集元素
**sunion;返回两个集合的并集元素 共同好友功能
**sdiff:返回两个集合的差集元素
5.4redis-hash类型
redis hash 是一种键值对的类型
redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。,类似于java中的Map<String,Object>


命令:
hset 给集合中的键赋值
hget 获取某个filed的值
hmset 批量设置多个filed值
hexists:判断是否存在这个字
hkeys:查询所有的filed值
hvals:查询所有的value
hincrby:加一
hsexnx 加数据的
5.5 zset数据结构
redis 有序集合zset与普通的集合set非相似,是一个没有重复的有序集合
底层结构:
命令:
zset的两种实现方式
ziplist(压缩链表):满足以下两个条件的时候
元素数量少于128的时候
每个元素的长度小于64字节
skiplist(跳跃链表):不满足上述两个条件就会使用跳表,具体来说是组合了map和skiplist
map用来存储member到score的映射,这样就可以在O(1)时间内找到member对应的分数
skiplist按从小到大的顺序存储分数
skiplist每个元素的值都是[score,value]对


zdd:添加内容(一个或者多个)
zrange:返回有序集key中,下标在之间的元素
zrangbyscore :取指定区域的方法
zrevrangbyscore:与上述的排序方式相反
zincrby: 为score值进行增加操作
zrem:删除某个 指定的元素
zcount:统计功能
redis五种数据结构详解的更多相关文章
- redis 五种数据结构详解(string,list,set,zset,hash)
redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...
- redis 五种数据结构详解(string,list,set,zset,hash),各种问题综合
redis 五种数据结构详解(string,list,set,zset,hash) https://www.cnblogs.com/sdgf/p/6244937.html redis 与 spring ...
- 【Redis】redis 五种数据结构详解(string,list,set,zset,hash)
redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...
- Redis 五种数据结构详解(string,hash,list,set,zset)
一.五种数据结构: 1. String--字符串 String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候e ...
- 2.Redis五种数据结构
2.Redis五种数据结构2.1 预备2.1.1 全局命令2.1.2 数据结构和内部编码2.1.3 单线程架构2.2 字符串2.2.1 命令2.2.2 内部编码2.2.3 典型使用场景2.3 哈希2. ...
- Redis(一)、Redis五种数据结构
Redis五种数据结构如下: 对redis来说,所有的key(键)都是字符串. 1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value. String类型是二进制安 ...
- rabbitmq五种模式详解(含实现代码)
一.五种模式详解 1.简单模式(Queue模式) 当生产端发送消息到交换机,交换机根据消息属性发送到队列,消费者监听绑定队列实现消息的接收和消费逻辑编写.简单模式下,强调的一个队列queue只被一个消 ...
- Redis五种数据结构(Windows Server)
1.Redis的五种数据结构 这里推荐大家在命名redis的key的时候最好的加上前缀,并且使用 :来分割前缀 ,这里在使用可视化工具查看的时候就比较好区分,比如我的的前缀是 Demo:test:(一 ...
- Redis五种数据结构简介
Redis五种结构 1.String 可以是字符串,整数或者浮点数,对整个字符串或者字符串中的一部分执行操作,对整个整数或者浮点执行自增(increment)或者自减(decrement)操作. 字符 ...
- Android特效 五种Toast详解
Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失.而且Toast主要用于向用户显示提示消 ...
随机推荐
- SpringMVC 06: 日期类型的变量的注入和显示
日期处理和日期显示 日期处理 此时SpringMVC的项目配置和SpringMVC博客集中(指SpringMVC 02)配置相同 日期处理分为单个日期处理和类中全局日期处理 单个日期处理: 使用@Da ...
- Linux之Samba服务器搭建
一,samba的基本概念 SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务. ...
- KingbaseES 全局临时表
Postgresql 支持会话级别的临时表,表的存续期只在创建临时表的会话存活期间,会话退出后,临时表自动删除,表结构及数据也无法跨会话共享.KingbaseES 除了支持PG原生的临时表机制外,还支 ...
- JS 模块化 - 03 AMD 规范与 Require JS
1 AMD 规范介绍 AMD 规范,全称 Asynchronous Module Definition,异步模块定义,模块之间的依赖可以被异步加载. AMD 规范由 Common JS 规范演进而来, ...
- 【前端必会】前端开发利器VSCode
介绍 工欲善其事必先利其器,开发工具方面选择一个自己用的顺手的,这里就用VSCode 安装参考 https://www.runoob.com/w3cnote/vscode-tutorial.html ...
- do...while循环体
基本语法 不要忘记while()后还需要加分号!!! 例(输出五句hello): int i = 1; //循环变量初始化 int max = 5; //循环的最大次数 do{ printf(&quo ...
- vue2.x核心源码深入浅出,我还是去看源码了
平常的工作就是以vue2.x进行开发,因为我是个实用主义者,以前我就一直觉得,你既然选择了这个框架开发你首先就要先弄懂这玩意怎么用,也就是先熟悉vue语法和各种api,而不是去纠结实现它的原理是什么. ...
- POJ2955 Brackets (区间DP)
很好的区间DP题. 需要注意第一种情况不管是否匹配,都要枚举k来更新答案,比如: "()()()":dp[0][5]=dp[1][4]+2=4,枚举k,k=1时,dp[0][1]+ ...
- 空 Maven项目转成 Web项目 & SpringMVC调用其他 Module中的方法可能会遇到的小问题
SpringMVC调用其他 模块内的方法的 坑 下次别在阴沟里翻船啦.. 一共花费 4个小时,解决项目中的这个问题 OMG 1. 首先是 Maven新建工程 一般使用 Maven都是先创建 空工程 当 ...
- Java中的反射与代理(2)
在经典的GoF设计模式中,有一种模式叫做代理模式,好比以前洋务运动的时候所说的「买办」,还有现在咱们经常听到的「代理人」战争中的「代理」,都是同一个意思--代替某人打理. 例如,很多北漂都找中介或者二 ...