redis数据库基础命令

keys *查看所有的键
在这里插入图片描述

get key返回对应的值
在这里插入图片描述

dbsize统计键的总和
在这里插入图片描述

exists hello检查hello键是否存在,存在返回1,不存在返回0
在这里插入图片描述

del hello删除hello键,不管什么数据类型都可以删除返回1=成功,0=没有
在这里插入图片描述

两个一起删del键1键2,删除mylist
在这里插入图片描述

键过期
expire key seconds指定键过期时间,当超过过期时间后,会自动删除键
tt1返回键的剩余时间
-1:键没设置过期时间
-2:键不存在
在这里插入图片描述

键的数据结构类型
在这里插入图片描述

hello字符串类型 string
mylist列表类型list
在这里插入图片描述

数据结构和内部编码
type命令实际返回的就是当前键的数据结构类型,他们分别是:string(字符串),hash(哈希),list(列表)set(集合)zset(有序集合)但这些只是redis对外的数据结构
实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现,这样redis会在合适的场景选择合适的内部编码
可以通过object encoding命令查询内部编码
string(字符串)3种 raw int embstr
hash(哈希)2种 hashtable ziplist
list(列表)2种 linkedlist ziplist
set(集合)2种hashtablr intest
zset(有序集合)2种 skiplist ziplist
object enconding key值 查询内部编码
在这里插入图片描述

内部编码好处
1可以改进内部编码,而对方的数据结构和命令没有影响,这样在开发除更优秀的内部编码,不需要改变外部数据结构和命令
2多种内部编码实现不同场景下发挥各自的优势

单线程架构
redis使用了单线程架构和i/o多录复用模型来实现高性能的内存数据服务
为什么单线程还能这么快
1redis将所有的数据放在内存当中,内存的相应时长大约为100纳秒,这是redis达到每秒万级别访问的重要基础
2非堵塞型i/o线程,redis使用epoll作为i/o多路复用技术的实现,再加上redis自身的事件处理模型将epoll中的连接读写关闭都转换为事件,不在网络i/o上浪费过多的时间
3单线程避免了因线程切换和竟态产生的消耗

单线程的好处
1单线程可以简化数据结构和算法的实现
2单线程避免了线程切换和竟态产生的消耗

单线程的问题:
当某一条命令执行时间过长,其他命令等待时间过长照成堵塞

数据类型字符串
字符串类型是redis最基础的数据结构。首先键都是字符串类型,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种结构的学习鉴定基础。字符串的值实际可以是字符串(简单的字符串,复杂的字符串),也可以数字甚至是二进制(图片音频视频),但是最大值不能超过512M命令格式
set key value [ex seconds][px miliseconds][nx|xx]
[ex seconds]为键设置秒级别的过期时间
[px miliseconds]为键设置毫秒级别的过期时间
nx键必须不存在,才可以设置成功,用于添加
xx键必须存在,才可以设置成功,用于更新
命令:
setex key seconds value
setnx key value

检测键在不在
在这里插入图片描述

获取值
在这里插入图片描述

批量设置值
在这里插入图片描述

计数
lncr key
lncr只能对数字自增
值不是整数的时候,返回错误
值=整数,返回自增后结果
键不存在,按0开始自增,返回结果为1
在这里插入图片描述

decr key(自减)
在这里插入图片描述

incrby key 数字(自增指定数字)
在这里插入图片描述

decrby key 数字(自减指定数字)
在这里插入图片描述

incrbyfloat key 带小数点的数字(自增浮点数)
在这里插入图片描述

append key value 追加值;相当于把追加的值合并在原值后面
设置key的值redis
最佳key的值world
结果是合并
在这里插入图片描述

strlen key字符串长度
在这里插入图片描述

每个中文占3个字节
在这里插入图片描述

设置并返回原值
getset key value
getset设置了redis的值,但是hello的原值是rorld
单独get hello时候返回刚才getset后的redis
在这里插入图片描述

设置指定位置的字符
setrange key数字位置value
pest第一个字母是0把位置0的p更改b,结果是best
在这里插入图片描述

获取部分字符串(0开始)
getrange key起始数字(0开始)结束数字
在这里插入图片描述

字符串的内部编码
根据我们输入键对应的值,redis自行选择编码
int 8字节的长度整数
embstr小于等于39个字节的字符串
raw大于30个字节的字符串
在这里插入图片描述

哈希
几乎所有的编程语言都提供了哈希类型,它们的叫法可能是哈希字典关联数组。在redis中,哈希类型是指键值本身又是一种键值对结构。哈希类型中的映射关系叫做field-value,这里的value是指field对应的值,不是键对应的值
设置值
hset key field values
成功1,不成功返回0
在这里插入图片描述

获取值hget key field
在这里插入图片描述

删除field
在这里插入图片描述

计算field个数
hlen key
在这里插入图片描述

批量设置获取field value
hmset key field value [field…]
hmget key field [field value…]
在这里插入图片描述

判断hexists是否存在
hexists key field
在这里插入图片描述

获取所有的field
hkeys key
在这里插入图片描述

获取所有的value
hvais key
在这里插入图片描述

获取所有的field的value的值
(元素过多容易造成堵塞)
hgetall key
在这里插入图片描述

hincrby key field增的数字
hincrbyfloat key field
在这里插入图片描述

计算value的字符串长度
hstrlen key filed
在这里插入图片描述

哈希的内部编码
ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)同时所有的值都小于hash-max-ziplist-value配置(默认64字节)时,redis会使用ziplist作为哈希的内部实现,ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀

list列表
列表类型是用来存储多个有序的字符串,比如abcde五个元素从左到右组成了一个有序的列表,列表中每个字符串成为元素,一个列表最多可以存储2的32次方-1个元素。在redis中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表获取指定索引下标的元素

操作类型
增rpush lpush linsert
查lrange lindex lien
删lpop rpop lrem ltrim
改lset
堵塞操作bipop brpop

添加操作
rpush key value [value…]
添加rpush lpush insert
在这里插入图片描述

可以重复添加重复的值
在这里插入图片描述

向某个元素前或后插入元素
linsert key before |after pivot value
在这里插入图片描述

查看
Lrange key start end
lrange lindex llen
查看0-1从左到右所有元素0 1两个
在这里插入图片描述

获取列表指定索引下标的元素
lindex listkey -1显示最右边的第一个
在这里插入图片描述

获取列表长度
llen key
在这里插入图片描述

删除
删除lpop rpop lyrim
lpop key从左侧
在这里插入图片描述

rpop key从右边删
在这里插入图片描述

删除指定的元素
lrem key count(数字) value(值)
count >0 从左往右删,删多少看count的数,如果几个位置内没有那个值,则不删
count<0 从右往左删,删多少看count的数,如果几个位置内没有那个值,则不删
count=O删除所有
在这里插入图片描述

修改
lset key index(数字,第二个,从0开始)newvalue
在这里插入图片描述

阻塞操作 blpop brpop并发量太大,阻塞,缓解压力
blppop key [key… .] timeout(阻塞多少秒)从左开始
brppop key [key…] timeout(阻塞多少秒)从右开始
timeout=0一直阻塞下去(不要用)
在这里插入图片描述

内部编码
列表类型的内部编码有两种。
Ziplist (压缩列表):当列表的元素个数小于list-max-ziplist-entries配置(默认512个),同时列表中每个元素的值都小于list-max-ziplist-value配置时(默认64字节),Redis会选用ziplist来作为表的内部实现来减少内存的使用。
Linkedlist(链表):当列表类型无法满足ziplist的条件时,Redis会使用linkedlist作为列表的内部实现。

使用场景
1、消息列队2、文章列表

集合
集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素。一个集合最多可以存储2的32次方-1个元素,Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集。
命令
1、集合内的操作
添加sadd key element [element… .]插入重复的值,出错
在这里插入图片描述

删除元素
srem key element
在这里插入图片描述

计数元素个数
scard key
在这里插入图片描述

判断元素是否在这个集合中
sismember key element
在这里插入图片描述

随机从集合中返回指定个数的元素
srandmember key [count],count不写默认为1
在这里插入图片描述

从集合随机删除元素spop key数字(默认1)
在这里插入图片描述

查看集合内所有元素smembers key
smembers myset
集合间的操作
求多个集合交集sinter key [key…]
在这里插入图片描述

求多个集合差集saiff key key …
在这里插入图片描述

求多个集合之间的并集sunion key key…
在这里插入图片描述

差集并集交集的结果保存
Sinterstore destination
sunionstore destination
sdiffstore destination
在这里插入图片描述

集合的内部编码
集合类型的内部编码有两种:
intset(整数集合):当集合中的元素都是整数且元素个数小于set-max-intest-entries配置(默认512个)时,Redis会选用intset来作为集合的内部实现,从而减少内存的使用。
hashtable(哈希表):当集合类型无法满足intset的条件时,Redis会使用hashtable作为集合的内部实现
在这里插入图片描述

使用场景
集合类型比较典型的使用场景是标签(tag)。比如一个用户可能对娱乐、体育比较感兴趣,另一个用户可能对历史、新闻比较感兴趣,这些兴趣点就是标签。有了这些数据就可以得到喜欢同一个标签的人,以及用户的共同喜好的标签,这些数据对于用户体验以及增强用户黏度比较重要。例如一个电子商务的网站会对不同标签的用户做不同类型的推荐,比如对数码产品比较感兴趣的人,在各个页面或者通过邮件的形式给他们推存最新的数码产品,通常会为网站带来史多的利益。

有序集合
有序集合相对于哈希、列表、集合来说会有一点点陌生,但既然叫有序集合,那么它和集合必然有着联系,它保留了集合不能有重复成员的特性,但不同的是,有序集合中的元素可以排序。但是它和列表使用索引下标作为排序依据不同的是,它给每个元素设置一个分数(score)作为排序的依据。合理的利用有序集合,能帮助我们在实际开发中解决很多问题。

数据结构 是否允许重复元素 是否有序有序实现方式 应用场景
列表 是 是 索引下标 时间轴、消息队列等
集合 否 否 无标签、社交等
有序集合 否 是 分值排行榜系统、社交等

命令
集合内添加成员
zadd key score(分数)member [socre member]
NX:必须不存在,才可以设置,用于添加
Xx.必须存在,才可以设置,用于更新
Ch:此次操作完成后,有序集合元素和分数发生变化的个数
Incr:对soure分数做增加,zincrby
在这里插入图片描述

计算成员个数
zcard key
在这里插入图片描述

求某个成员的分数
zscore key member
在这里插入图片描述

求成员的排名
Zrank key member低到高成员的排名
Zrevrank key member高到低成员的排名
在这里插入图片描述

删除成员
Zrem key member1 member2
在这里插入图片描述

增加某个成员的分数
zincrby key increment member
若没有成员,还能指定分数并添加成员
在这里插入图片描述

指定排名范围的成员
Zrange key start end [withscores]低到高
Zrevrange key start end [withscores]高到低
在这里插入图片描述

求指定分数范围内的成员
低到高
Zrangebyscore key min max [withscores] [limit offset count]高到低
Zrevrangebyscore key man mix [withscores] [limit offset count][limit offset count] 限制输出的起始位置和个数
在这里插入图片描述

200以后的,通过设置-inf(无限小)和+inf(无限大)
在这里插入图片描述

求指定分数的范围查看成员的个数
zcount key min max
在这里插入图片描述

册除指定排名内的升序元素
Zrem range by rank(把单词拆开看了)key start end
在这里插入图片描述

删除指定分数范围的成员
Z rem range by score(把单词拆开看了) key min max
在这里插入图片描述

2、有序集合间的操作
先创建2个集合
在这里插入图片描述

交集
zinterstore destination numkeys key [key…] [weights weight ] [ aggregate sum]minlmax]destination:交集计算结果保存到这个键
numkeys:需要做交集计算键的个数
key key… .:需要做交集计算的键
weights:每个键的权重2个集合,写两个权重,默认1,用于分数乘以权重得到的数
aggregate sum|min/max:就按成员交集后,分值可以按照sum(和)min(最小值) max(最大值)做汇总,默认是sum
1和2做交集权重(默认1,默认分数乘以权重得到的数)aggregate
在这里插入图片描述

1和2交集,2个权重边0.5(分数乘以权重得到的数)求max
那2个0.5至集合1和集合2的分数都乘以0.5
在这里插入图片描述

并集
Zunionstore destination numkeys key [key…] [weights weight ] [ aggregate sum|minJmax]destination:交集计算结果保存到这个键
numkeys:需要做交集计算键的个数key key…:需要做交集计算的键
weights:每个键的权重2个集合,写两个权重,默认1,用于分数乘以权重得到的数
aggregate sum/min|max:就按成员交集后,分值可以按照sum(和)min(最小值) max(最大值)做汇总,默认是sum
在这里插入图片描述

有序集合内部编码
有序集合类型的内部编码有两种:
Ziplist(压缩列表):当有序集合的元素个数个数小于zset-max-ziplist-entries配置(默认128个),同时每个元素的值都小于zset-max-ziplist-value配置(默认64字节)时,Redis会用ziplist来作为有序集合的内部实现,ziplist可以有效减少内存的使用。
Skiplist (跳跃表)︰当ziplist条件不满足时,有序集合会使用skiplist作为内部实现,因此此时ziplist的读写效率会降低。
在这里插入图片描述

使用场景
有序集合比较典型的使用场景就是排行榜系统。例如视频网站需要对用户上传的视频做排行榜,榜单的维度可能是多个方面的:按照时间、按照播放数量、按照获得的赞数。可以使用赞数这个维度,记录每天用户上传视频的排行榜。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值