Redis学习-第一节-基本数据类型

redis介绍

  • Redis数据库是一个非关系型数据库(nosql),是一个内存数据库. 以键值对的形式存储数据
  • Redis支持的数据类型 string hash list set zset
  • Redis新增数据类型Bitmaps HyperLogLog Geospatial
  • 单线程架构:redis使用单线程架构和I/O多路复用模型来实现高性能内存数据库服务。

redis为什么快

1-纯内存访问
2-非阻塞io:redis使用epoll作为I/O多路复用技术的实现以及使用自身事件模型;
3-单线程避免线程切换和竟态产生的消耗

key键操作

  • keys *:查询当前库所有key
  • exists key:查询是否存在某个key
  • type key:查询可以的类型
  • del key:删除指定key
  • unlink key:删除指定key,仅将key从keyspace元数据中删除,真正的删除会在后续的异步操作
  • expire key:为给定的key设置过期时间
  • tttl key:查看key还有多少秒过期,-1表示永不过期,-2表示已过期
  • select:切换数据据库
  • dbsize:查看当前数据库key的数量
  • flushdb:清空当前库
  • flushall:清空所有库

Redis字符串(String)

1.基本操作指令

  • set key value:添加键值对,如果key已存在,覆盖value的值
  • get key:查询对应键值对
  • append key value:在指定key的value末尾追加值
  • strlen key:获取指定key的value的长度
  • setnx key value:在key不存在时,设置key的值
  • incr key:将key对应的value值增加1,只能对数字值操作,如果为空,新增值为1
  • decr key:将key对应的value值减小1,只能对数字值操作,如果为空,新增值为-1
  • incrby key len:将key对应的value值增加len
  • decrby key len:将key对应的value值减小len
  • mset key value:同时设置多个key-value值对
  • mget key:同时获取多个key-value值对
  • getrange

2.原子操作

  • 原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会切换到其它线程
  • 在单线程中,能够在单条指令中完成的操作,都可以认为是原子操作。
  • 在多线程中,不能被其它线程(进程)打断的操作就叫原子操作
  • Redis单命令的原子性主要得益于Redis是单线程

3.数据结构

  • 底层为动态字符串,是可以修改的字符串
  • 采用预分配冗余空间的方式来减少内存的频繁分配
  • 如果字符串长度小于1M,扩容为原来的一倍,如果超过1M,每次扩容1M,并且最大为512M

Redis列表(List)

1.简介

  • Redis列表是简单的字符串列表,可以在列表头部(左侧)或者尾部(右侧)添加元素
  • 底层为双向链表,两端数据操作性能高,通过下标操作中间部位元素性能较低

2.常用命令

  • lpush:从左边插入一个或者多个值
  • rpush:从右边插入一个或者多个值
  • lrange:获取某个key指定起始位置和结束位置的所有值
  • lpop:从左边取出一个值
  • rpop:从右边取出一个值
  • rpoplpush key1 key2:从key1右侧取出一个值,插入到key2左侧
  • lindex:根据指定索引下标,获取元素
  • llen:获取列表长度
  • linsert key before value newvalue:在值value前插入新的值newvalue
  • lrem key n value:从左边删除n个指定的元素
  • lset key index value:将指定位置的元素值替换为value

3.数据结构

  • 底层为快速链表quicklist
  • 在列表元素较少时,分配一块连续的内存存储,这个结构是ziplist,也即是压缩链表;数据量较多时才会改成quicklist
  • Redis将链表和ziplist结合起来组成quicklist,也就是将多个ziplist使用双向指针串联起来

Redis集合(Set)

1.简介

  • Set功能与List功能类似,特殊之处在于set可以自动去重
  • Set是String类型的无序集合,它底层是一个value为null的hash表,所以添加、删除、查找的复杂度是O(1)

2.常用命令

  • sadd:将一个或者多个值添加到Set集合
  • smembers:取出集合的所有值
  • sismember:判断集合中是否存在某个值,存在为1,不存在为0
  • scard:获取集合元素个数
  • srem:删除集合中的一个或者多个元素
  • spop:随机从集合中取出指定个数元素,默认取出一个,会从集合中把取出元素删除
  • srandmember:随机从集合中取出指定个数元素,不会从集合中把取出元素删除
  • smove:将一个集合中的值移动到另一个集合
  • sinter:返回两个集合的交集元素
  • sunion:返回两个集合的并集元素
  • sdiff key1 key2:返回两个集合的差集元素(key1中元素,不包含key2的)

3.数据结构

  • Set数据结构是dict字典,字典是用hash表实现的

Redis哈希(Hash)

1.简介

  • Redis Hash是一个键值对集合
  • Redis Hash是一个String类型的field和value的映射表,适合存储对象数据。

2.常用命令

  • hset :向集合中添加field-value元素
  • hget:获取集合中元素
  • hmset:批量添加元素
  • hexists:判断哈希表key中是否存在filed,存在为1,不存在为0
  • hkeys:获取集合所有field
  • hvals:获取集合所有value
  • hincrby:将指定field的值增加指定的值
  • hsetnx:当filed在集合中不存在时,向集合中添加field-value元素

3.数据结构

  • 当field-value长度较小,个数较少时,使用ziplist;否则使用hashtable

Redis有序集合Zset(sorted set)

1.简介

  • 是一个没有重复元素的字符串集合
  • 集合中每个成员关联了一个评分(score),并且会按照评分从低到高的顺序进行排序。
  • 集合中成员唯一,但是评分可以重复

2.常用命令

  • zadd:将一个或者多个元素及其score添加到有序集合key中
  • zrange:获取集合中所有元素,从小到大排序
  • zrevrange:获取集合中所有元素,从大到小排序
  • zrangebyscore:获取指定评分区间的值,结果从小到大排序
  • zrevrangebyscore:获取指定评分区间的值,结果从大到小排序
  • zincrby:为指定元素的score增加值
  • zrem:删除指定元素
  • zcount:获取指定评分区间内元素的个数
  • zrank:获取元素在集合内的排名,从0开始

3.数据结构

  • zset底层使用了两个数据结构:hash和跳跃表
  • hash的作用:关联value和score,保证元素value唯一,可以通过value找到score
  • 跳跃表的作用:给元素value排序,可以根据score的范围获取元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值