首页 > 数据库 >redis五种数据结构详解

redis五种数据结构详解

时间:2022-11-18 16:35:26浏览次数:34  
标签:元素 redis value k1 详解 key 集合 数据结构

5.相关介绍和命令

5. redis是单线程+多路io复用技术

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

redis底层实现

5.2 redis 健(key)

keys * 才看看当前库所有的key
0

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,value,k1,详解,key,集合,数据结构
From: https://www.cnblogs.com/wiseleer/p/16903666.html

相关文章

  • centos7.4系统: redis配置密码
    背景:因为安全需要,对redis进行密码配置说明:默认redis没有密码,需要自己配置密码一、配置临时密码(重启后失效)以下以密码:wangzy为例1.1连接客户端[root@wangzyredis]#......
  • 基础数据结构 -链表
    链表描述:内存中内部的存储方式,通常情况下可以认为是多个节点存储一串的的结构链表存储结构数据域Datafield指针域pointerfield......
  • MyBatis 延迟加载代码详解
    在我们的实际开发中,会面临各种各样的查询操作。如果单表查询能满足业务需求。尽量用单表查询,因为单表查询的效率比多表关联查询快。那么当业务需求需要用到的数据来源于多......
  • 在微信小程序上做一个「博客园年度总结」:使用redis存储数据
    前面写过一篇博客:在微信小程序上做一个「博客园年度总结」:解决前端获取接口数据太慢的一种思路当时是从博客园接口获取数据比较慢,所以从博客园拿到数据后,先把数据存到一个......
  • Day8-4 static关键字详解
    static关键字详解packagecom.oop.demo07;​//staticpublicclassStudent{privatestaticintage;//静态变量privatedoublescore;//非静态变量......
  • Redis缓存雪崩,击穿和穿透
    这三个问题的发生,会导致大量的请求直接积压到数据库,如果并发量很大,则可能会导致数据库宕机或故障。缓存雪崩 描述:大量的请求无法在redis缓存中进行处理而被发送到数据......
  • Springboot项目java -jar 启动jar包参数详解
    Windows1、指定端口java-jarspringboot.jar--server.port=81812、指定配置文件java-jarspringboot.jar--spring.profiles.active=dev3、同时指定端口与配置文件ja......
  • 详解webpack构建优化
    当项目越来越复杂时,会面临着构建速度慢和构建出来的文件体积大的问题。webapck构建优化对于大项目是必须要考虑的一件事,下面我们就从速度和体积两方面来探讨构建优化的策略......
  • 53:双分支选择结构_三元运算符的使用详解
    ###双分支选择结构双分支结构的语法格式如下:if 条件表达式:   语句1/语句块1else:   语句2/语句块2【操作】输入一个数字,小于10,则打印该数字;大于10,......
  • 52:单分支选择结构_条件表达式详解
    ###选择结构选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分支、双分支、多分支。流程图如下:      但分支结构     ......