前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis数据结构基本语法

redis数据结构基本语法

作者头像
兰舟千帆
发布2022-10-04 19:51:45
3500
发布2022-10-04 19:51:45
举报

Redis Study

学到技巧

快捷键

ctrl + [

typora很好用,有个问题就是换行会自动跟上面的格式,按删除键也无效

ctrl + [就会把前面的格式给稀释掉。

经验

有关typora上传博客园图片缩放的问题,办法就是在typora中粘贴图片以后发现缩放没有效果,然后就是去先点击缩放一下,然后就会出现style字段样式,这里指定的是zoom,我们把它改成width ,height这样的样式就可以起到效果。

the basic grammar of redis

String类型

Switching databases(切换数据库)

代码语言:javascript
复制
select 1 

将值移动到其它数据库

将key这个键移动到一号数据库

代码语言:javascript
复制
move key1 1
image-20220919185425409
image-20220919185425409

Clearing the database(清空数据库)

代码语言:javascript
复制
flushall
代码语言:javascript
复制
flushdb

1、flushAll 清空数据库并执行持久化操作,也就是RDB文件会发生改变,变成76个字节大小(初始状态下为76字节),所以执行flushAll之后数据库真正意义上清空了。

2、flushDB 清空数据库,但是不执行持久化操作,也就是说RDB文件不发生改变.而redis的数据是从RDB快照文件中读取加载到内存的,所以在flushDB之后,如果想恢复数据库,则可以直接kill掉redis-server进程,然后重新启动服务,这样redis重新读取RDB文件,数据恢复到flushDB操作之前的状态。

注意:要直接kill 掉redis-server服务,因为shutdown操作会触发持久化。

查看端口占用

lsof(list open files )

代码语言:javascript
复制
lsof -i : 6379

lsof -i 需要 root 用户的权限来执行

代码语言:javascript
复制
netstat -tunlp | grep 8080

参数说明如下 -t (tcp) 仅显示tcp相关选项 -u (udp)仅显示udp相关选项 -n 拒绝显示别名,能显示数字的全部转化为数字 -l 仅列出在Listen(监听)的服务状态 -p 显示建立相关链接的程序名

查看数据库当中所有的键

代码语言:javascript
复制
keys *

查看当前数据库的大小

代码语言:javascript
复制
dbsize

测试代码段 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> dbsize (integer) 0 127.0.0.1:6379[1]> set 2 3 OK 127.0.0.1:6379[1]> dbsize (integer) 1 127.0.0.1:6379[1]>

一些与键值有关的命令

一般赋值

代码语言:javascript
复制
set hello helloword   

不存在就赋值

代码语言:javascript
复制
setnx hello helloword

进行批量的赋值

代码语言:javascript
复制
mset key1 value1 key2 value2 

原子性的批量赋值

原子性的批量赋值的特点就是这些多个赋值之中,如下,结合不存在这种赋值的话,也就是当这种多个赋值之中,有的已经存在了,那么就不会进行赋值成功,那么另外一个页不会成功,这里类似sql中的事务

代码语言:javascript
复制
msetnx hello helloword hello3 helloword3

设置对象类型的赋值

代码语言:javascript
复制
set user:1 {name:sail,age:27}
set user:2 {name:hello,age:28}

获取到对应键的值

代码语言:javascript
复制
get user:1

取值赋值

代码语言:javascript
复制
getset hello "nice to meet you"

获取键对应的长度

代码语言:javascript
复制
strlen hello

获取所有的键

代码语言:javascript
复制
keys *

删除key

代码语言:javascript
复制
del  hello

判断键是否存在

代码语言:javascript
复制
exists hello

自增

自增单位1(incr)

先设定一个数字的值

代码语言:javascript
复制
set num 1

让这个数字的值自增

代码语言:javascript
复制
incr num

再重新获取到这个值

代码语言:javascript
复制
get num
image-20220919185443479
image-20220919185443479

自增设置步长(incrby)

代码语言:javascript
复制
incrby num 10

自减(decr)

代码语言:javascript
复制
decr num1

截取键索引范围字段

代码语言:javascript
复制
getrange hello 0 -1
image-20220914212933164
image-20220914212933164

指定索引位置替换

代码语言:javascript
复制
setrange hello 2 r

设置过期时间

代码语言:javascript
复制
setex hello 60 "hello word"

查看过期时间

代码语言:javascript
复制
ttl hello
image-20220919185524914
image-20220919185524914

List 类型

redis这里这个类型其实可以认为是一个双端队列

所有的list命令都是以l开头

相关的命令

从左边插入,相当于从双端对比、列额左边插入到列表的头部可以插入多个值

代码语言:javascript
复制
lpush list one two three

这样插入的话再从一个方向获取值的话就是按照先进后出的规则

代码语言:javascript
复制
lrange list 0 -1
image-20220915145927715
image-20220915145927715

还可与从右边进行push

代码语言:javascript
复制
rpush list 2 3 4

获取到值

代码语言:javascript
复制
lrange list 0 -1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q6JDIh68-1663585401083)(https://img2022.cnblogs.com/blog/2145006/202209/2145006-20220919185537039-353541965.png)]

​ 这样从右边push进去的话,然后lrange 取得话,就会变成先进先出了。这里可以理解为从右边进的话,其实还是lrange还是从左边取,这样就可以发现符合这样的规律。

还可以给元素的前后进行插入赋值

代码语言:javascript
复制
linsert list before 2 1
image-20220919185602166
image-20220919185602166
代码语言:javascript
复制
linsert list after 4 5
image-20220915153436256
image-20220915153436256

元素指定下标进行赋值

代码语言:javascript
复制
lset list 0 one

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rBv4RNFl-1663585401084)(https://img2022.cnblogs.com/blog/2145006/202209/2145006-20220919185606817-2095471764.png)]

索引范围取值

代码语言:javascript
复制

lrange list 0 -1

代码语言:javascript
复制
*  获取指定索引的值

```redis 
lindex list 0
image-20220919185716577
image-20220919185716577

获取列表的长度

代码语言:javascript
复制

llen list

代码语言:javascript
复制
![image-20220919185734415](https://img-blog.csdnimg.cn/img_convert/682751a20f79736dcd1d10e4c881614d.png)

* 判断列表是否存在

```redis
exists list
image-20220915155911882
image-20220915155911882

移除操作

从左边进行移除

代码语言:javascript
复制

lpop

代码语言:javascript
复制
从右边移除

```redis
rpop 
image-20220919185749643
image-20220919185749643

一次移除多个元素(需要指定元素移除)

这种情况出现在list里面存在重复元素的时候,一次可以指定移除多个这样的元素

lrem list 2 4

代码语言:javascript
复制
![image-20220919185801334](https://img-blog.csdnimg.cn/img_convert/d61b2be3b765c9d879644e453a8e750e.png)

*  `截取指定索引范围当中的元素(这样的截取其实就是类似于一次lpop掉多个元素)

```redis
ltrim list 0 -1
image-20220919185822311
image-20220919185822311
  • 移除最后一个元素到新的列表当中

这里其实将列表中头部的元素push到另外的一个列表当中

代码语言:javascript
复制
rpoplpush list list2
image-20220919185837598
image-20220919185837598

set(无序不重复集合)

基本的一些语法

set集合添加元素

代码语言:javascript
复制
sadd set set1
sadd set set2

查看集合当中存放的元素

代码语言:javascript
复制
smembers set

判断集合当中的元素是否存在

存在返回1,不存在返回0

代码语言:javascript
复制
sismember set hello

计算出集合当中的元素个数

代码语言:javascript
复制
scard set

查找出集合当中随机的一个元素

代码语言:javascript
复制
srandmember set

集合运算逻辑

1 求两个集合的差集

代码语言:javascript
复制
sdiff set1 set2
image-20220919185950764
image-20220919185950764

2 求两个集合的交集

代码语言:javascript
复制
sinter set1 set2
image-20220919190003170
image-20220919190003170

3 求两个集合的并集

代码语言:javascript
复制
sunion set1 set2
image-20220919190012650
image-20220919190012650

删除元素

代码语言:javascript
复制
srem set1 hello

删除随机元素

代码语言:javascript
复制
spop set1
image-20220919190025317
image-20220919190025317

移动元素

将set1 集合当中的name移动到set集合当中

代码语言:javascript
复制
smove  set1 set name

哈希

提供思维的理解图

image-20220919190036076
image-20220919190036076

哈希赋值

  • 单个哈希赋值
代码语言:javascript
复制
hset hash f1 sail

获取到键对应的值

代码语言:javascript
复制
hget hash f1

多个hash赋值

代码语言:javascript
复制
hset hash f1 sail f2 sail1

不存在才赋值

代码语言:javascript
复制
hsetnx hash f4 1

自增

自增1

代码语言:javascript
复制
hincrby hash f3 1

设置自减的时候只需要将后面的数值设置为负数就可以

取值

代码语言:javascript
复制
hget hash f1

取多个键值

代码语言:javascript
复制
hmget hash f1 f2

取到所有的值

代码语言:javascript
复制
hgetall hash

取到所有的键

代码语言:javascript
复制
hkeys hash

取到所有的值

代码语言:javascript
复制
hvals hash

获取长度

代码语言:javascript
复制
hlen hash

判断字段是否存在

代码语言:javascript
复制
hexists hash f1

删除字段

代码语言:javascript
复制
hdel hash f1

zset

思维图

image-20220919175212628
image-20220919175212628

zset是set的有序集合,set集合是无序不重复的,zset是有序不重复。

相比set,zset变得有序。

添加一个键的时候会对应一个值,二值对应的会有数字。这些数字其实就是可以作为排序的条件。

  • 赋值
代码语言:javascript
复制
zadd set1 1 one 2 two 3 three
image-20220919190053883
image-20220919190053883

取值(取所有的值)

代码语言:javascript
复制
zrange set1 0 -1
image-20220919190103271
image-20220919190103271

倒序取值

代码语言:javascript
复制
zrevrange set1 0 -1
image-20220919190113850
image-20220919190113850
  • 统计元素到的个数
代码语言:javascript
复制
zcard set1
image-20220919190125372
image-20220919190125372
  • 指定区间查看元素数量
代码语言:javascript
复制
zrange set1 0 -1

进行排序

正序排列

代码语言:javascript
复制
zrangebyscore set1 -inf +inf
image-20220919190135888
image-20220919190135888

从负无穷排序到指定的数字

代码语言:javascript
复制
 zrangebyscore set1 -inf 2
image-20220919190151073
image-20220919190151073

排序限定结果条数

从负无穷排序到2,然后限定条数是0~2条

代码语言:javascript
复制
 zrangebyscore set1 -inf 2 limit 0 2
image-20220919190205782
image-20220919190205782

排序附带分数

代码语言:javascript
复制
zrangebyscore set1 -inf +inf withscores
image-20220919190216266
image-20220919190216266

倒序

zrevrangebyscore

语法格式一样

删除元素

删除指定的元素

代码语言:javascript
复制
zrem set1 three

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WRy9bbTd-1663585401096)(C:/Users/jgdabc/AppData/Roaming/Typora/typora-user-images/image-20220919190226560.png)]

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis Study
    • 学到技巧
      • 快捷键
        • 经验
          • the basic grammar of redis
            • String类型
            • List 类型
            • set(无序不重复集合)
            • 哈希
            • zset
        相关产品与服务
        云数据库 Redis
        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档