Redis语法总结

Redis语句总结

一、基本概念

Redis 全称: Remote Dictionary Server(远程字典服务器)的缩写,以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。 使用C语言编写,并以内存作为数据存储介质,所以读写数据的效率极高

*redis的官方只提供了linux版本的redis,window系统的redis是微软团队根据官方的linux版本高仿的

二、Redis数据库特点

  • Redis支持数据的持久化

    可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用

    • 持久化的两种方式:

      • RDB(Redis DataBase)

        RDB持久化通过fork出一个子进程,在指定的时间间隔内将内存中的数据集快照写入到二进制文件中。这个文件通常命名为`dump.rdb`。
        
      • AOF(Append Only File)

        AOF持久化通过记录所有的写命令,并以追加式的方式将这些命令保存到AOF文件中。
        

三、Redis的应用场景

  • 缓存系统(“热点” 数据:高频读、低频写):缓存用户信息,优惠券过期时间,验证码过期时间、session、token等
  • 计数器:帖子的浏览数,视频播放次数,评论次数、点赞次数等
  • 消息队列,秒杀系统
  • 排行榜(有序集合)
  • 发布订阅:粉丝关注、消息通知

四、Redis安装

  • 安装包下载地址 (建议使用5.X+版本)

    • redis官网下载-需要注册账户
    • github下载
  • 平台安装软件

    • Windows 系统安装并启动 Redis

      • 双击 .msi 文件安装软件

      • 通过指定配置文件路径启动Redis服务器

        redis-server D:/soft/redis/redis.windows.conf
        
      • Redis服务器 启动/停止

        # 启动服务
        redis-server --service-start
        # 关闭服务
        redis-server --service-stop
        
  • Ubuntu平台安装软件

    安装命令:sudo apt-get install -y redis-server
    卸载命令:sudo apt-get purge --auto-remove redis-server 
    关闭命令:sudo service redis-server stop 
    开启命令:sudo service redis-server start 
    重启命令:sudo service redis-server restart
    配置文件:/etc/redis/redis.conf
    

五、Redis基本配置

  • 配置

    # window下的配置文件保存在软件 安装目录下# mac或者linux操作系统Redis的配置信息在/etc/redis/redis.conf下。
    # 查看编辑指令: 
    sudo vi /etc/redis/redis.conf
    
  • 核心配置选项

    • 绑定ip:如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip

      bind 127.0.0.1
      
    • 端⼝,默认为6379

      port 6379
      
    • 是否以守护进程运⾏

      # 1. 如果以守护进程运⾏,则不会在命令⾏阻塞,类似于服务
      # 2. 如果以⾮守护进程运⾏,则当前终端被阻塞
      # 3. 设置为yes表示守护进程,设置为no表示⾮守护进程
      # 4. 推荐设置为yes
      daemonize yes
      
    • RDB持久化的备份文件

      dbfilename dump.rdb
      
    • RDB持久化数据库数据文件的所在目录

      dir /var/lib/redis
      
    • ⽇志⽂件

      logfile "/var/log/redis/redis-server.log"
      
    • 数据库,默认有16个

      database 16
      

六、基本指令

# 启动redis服务器
sudo service redis start# 关闭redis服务器
sudo service redis stop# 运⾏连接测试命令
ping
# 本地连接
redis-cli
# 远程连接
redis-cli -h IP地址 -P 端口# 切换数据数据(Redis默认支持16个数据库,从0开始的递增数字命名)
select 库名# 查看服务器端和客户端的帮助⽂档
redis-server --help
redis-cli --help# 其他指令
# 查看redis服务器进程
ps aux | grep redis 
# 杀死redis服务器
sudo kill -9 pid
# 指定加载的配置文件
sudo redis-server /etc/redis/redis.conf# 清空所有库中键值对
flushall  # 清空当前库中键值对
flushdb  

五、Reids数据结构

  • redis是key-value的数据结构,每条数据都是⼀个键值对
  • 键的类型是字符串
  • 键不能重复
  • 值的类型分为五种自有类型和一种自定义类型
    • 字符串string
    • 哈希hash
    • 列表list
    • 集合set
    • 有序集合zset
  • 数据的操作行为
    • 保存
    • 修改
    • 获取
    • 删除
  • 官⽹命令⽂档

六、数据操作

1. string类型
字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
【保存】

如果设置的键不存在则为添加,如果设置的键已经存在则修改

  • 设置键值

    set key value# eg: 设置键为name值为fl的数据
    set name fl
    
  • 设置键值,值不可修改

    setnx key value# eg: 设置键为name值为fl的数据
    setnx name fl# setnx键对应的值不可修改,这里修改name无效
    setnx name fl1
    get name
    >> "fl"
    
  • 设置多个键值

    mset key1 value1 key2 value2 ...# eg: 设置键为'a1'值为'python'、键为'a2'值为'java'、键为'a3'值为'c'
    mset a1 python a2 java a3 c
    
  • 追加值

    append key value# eg: 向键a1对应的值中追加值' haha'
    append a1 'haha'
    
  • 自增自减

    # key 对用值必须为数字类型字符串
    incr key
    decr key
    incrby key increment
    decrby key increment# eg: 向键age对应的值自增100
    incrby age 100
    
  • 查询字符串长度

    strlen key# eg: 查询键age的长度
    strlen age
    
【查询】
  • 获取:根据键获取值,如果不存在此键则返回nil

    get key# eg: 获取键'name'的值
    get 'name'
    
  • 根据多个键获取多个值

    mget key1 key2 ...# eg: 获取键a1、a2、a3'的值
    mget a1 a2 a3
    
2. 键命令
  • 查找键,参数⽀持正则表达式

    keys pattern# eg1: 查看所有键
    keys *# *:匹配任意字符
    # ?:匹配一个字符
    # []:匹配括号里的任一字符
    # \ :转义
    # eg2: 查看名称中包含a的键
    keys 'a*'
    
  • 判断键是否存在,如果存在返回1,不存在返回0

    exists key1# eg: 判断键a1是否存在
    exists a1
    
  • 查看键对应的value的类型

    type key# eg:查看键a1的值类型,为redis⽀持的五种类型中的⼀种
    type a1
    
  • 删除键及对应的值

    del key1 key2 ...# eg: 删除键a2、a3
    del a2 a3
    
  • 设置过期时间,以秒为单位; 如果没有指定过期时间则⼀直存在,直到使⽤DEL移除

    expire key seconds# eg: 设置键'a1'的过期时间为3秒
    expire 'a1' 3
    
  • 查看有效时间,以秒为单位

    ttl key# eg:查看键'bb'的有效时间
    ttl bb
    
  • 让键重新变成永久(成功返回1, 否则返回0,表示键不存在或者本身就是永久的)

    PERSIST 键
    
  • 设置键值对同时设置过期时间:

    setex key value EX seconds
    setex key seconds value# eg: 设置键为aa值为aa过期时间为3秒的数据
    setex aa aa ex 3
    setex aa 3 aa
    
3.hash类型
hash⽤于存储对象,对象的结构为属性、值; 值的类型为string
【增加、修改】
  • 设置单个属性 或 多个属性

    hset key field value
    hmset key field1 value1 field2 value2 ...# eg: 设置键 user的属性name为fengling
    hset user name fengling
    # eg: 设置键u2的 属性name为fengling、属性age为18
    hmset u2 name fengling age 18
    
  • 其他

    # 存在返回1 不存在返回0
    hexists 键 域# 不存在是添加,存在什么也不做
    hsetnx 键 域 域值# 增加数字
    hincrby 键 域 自增值
    
【查询】
  • 获取指定键 所有的属性 或 所有的值

    hkeys key
    hvals key# eg1: 获取键u2的所有属性
    hkeys u2
    # eg2: 获取键u2所有属性的值
    hvals u2
    
  • 获取⼀个属性的值 或 多个属性的值

    hget key field
    hmget key field1 field2 ...# eg: 获取键u2属性'name'的值
    hget u2 'name'
    # eg: 获取键u2属性'name'、'age的值
    hmget u2 name age
    
  • 获取键中所有属性和值

    hgetall key
    
  • 获取域的个数

    hlen key# eg: 获取键u2属性个数
    hlen u2
    
【删除】
  • 删除属性,属性对应的值会被⼀起删除

    hdel key field1 field2 ...# eg: 删除键'u2'的属性'age'
    hdel u2 age
    
4. list类型
列表的元素类型为string; 按照插⼊顺序排序
【增加】
  • 插⼊数据

    # 在列表左侧/右侧插入数据
    lpush key value1 value2 ...
    rpush key value1 value2 ...# eg1:从键为'a1'的列表左侧加⼊数据a b c
    lpush a1 a b c
    # eg2:从键为'a1'的列表右侧加⼊数据0 1
    rpush a1 0 1
    
  • 在指定元素的前或后插⼊新元素

    linsert key before或after 现有元素 新元素# eg: 在键为'a1'的列表中元素'b'前加⼊'3'
    linsert a1 before b 3
    
【查询】
  • 返回列表⾥指定范围内的元素

    • start、stop为元素的下标索引

    • 索引从左侧开始,第⼀个元素为0

    • 索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素

      lrange key start stop# eg: 获取键为'a1'的列表所有元素
      lrange a1 0 -1
      
  • 返回列表⾥指定索引值的元素

    lindex key value# eg: 获取列表num中索引为1的元素
    lindex num 1
    
  • 返回列表成员长度

    llen key# eg: 获取列表num中元素个数
    llen num
    
【修改】
  • 设置指定索引位置的元素值

    • 索引从左侧开始,第⼀个元素为0

    • 索引可以是负数,表示尾部开始计数,如-1表示最后⼀个元素

      lset key index value# eg: 修改键为'a1'的列表中下标为1的元素值为'z'
      lset a 1 z
      
【删除】
  • 删除指定元素

    • 将列表中前count次出现的值为value的元素移除

    • count > 0: 从头往尾移除

    • count < 0: 从尾往头移除

    • count = 0: 移除所有

      lrem key count value# eg1:向列表'a2'中加⼊元素'a'、'b'、'a'、'b'、'a'、'b'
      lpush a2 a b a b a b# eg2:从'a2'列表右侧开始删除2个'b'
      lrem a2 -2 b# eg3:查看列表'py12'的所有元素
      lrange a2 0 -1
      
  • 移除并获取列表的第一个成员或最后一个成员

    # 删除列表第一个成员, 并获取移除的元素
    lpop key
    # 删除列表最后一个成员, 并获取移除的元素
    rpop key
    
5. set类型
set 无序集合,元素为string类型;元素具有唯⼀性,不重复
说明:对于集合没有修改操作
【增加】
  • 添加元素

    sadd key member1 member2 ...# eg: 向键'a3'的集合中添加元素'zhangsan'、'lisi'、'wangwu'
    sadd a3 zhangsan sili wangwu
    
【查询】
  • 获取所有的元素

    smembers key# eg: 获取键'a3'的集合中所有元素
    smembers a3
    
  • 随机获取多个元素

    # count>0,随机获取count个元素,不可重复
    # count<0,随机获取count个元素,可重复
    SRANDMEMBER key [count]
    
  • 获取元素个数

    scard 键
    
【删除】
  • 随机删除count个元素

    spop 键 [count]
    
  • 删除指定元素

    srem key value1 value2 value3 ...# eg: 删除键'a3'的集合中元素'wangwu'和 'zs'
    srem a3 wangwu zs
    
【判断】
  • 判断元素是否存在

    sismember 键 元素值
    
【交集、差集和并集】
# 交集、比较多个集合中共同存在的成员
sinter key1 key2 key3 ...
# 差集、比较多个集合中不同的成员
sdiff key1 key2 key3 ...
# 并集、合并所有集合的成员,并去重
sunion key1 key2 key3 ...# eg: 计算set1 set2 set3 set4的交并差集
sadd set1 1 2 3 4
sadd set2 1 3 4 5
sadd set3 1 3 5 6
sadd set4 2 3 4sinter set1 set2
>> "1" "3" "4"
sinter set1 set2 set3 set4
>> "3"sdiff set1 set2
>> "2"
sdiff set2 set1
>> "5"sunion set1 set2 set3 set4
>> "1" "2" "3" "4" "5" "6"
6. zset类型
zet 有序集合(sorted set) 元素为string类型; 元素具有唯⼀性,不重复. 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从小到大排序
说明:没有修改操作
【增加】
  • 添加元素

    zadd key score1 member1 score2 member2 ...# 向键'a4'的集合中添加元素'lisi'、'wangwu'、'zhaoliu'、'zhangsan',权重分别为4、5、6、3
    zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan
    
【查询】
  • 返回指定范围内的元素, 按score排序

    • start、stop为元素的下标索引

    • 索引从左侧开始,第⼀个元素为0

    • 索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素

      zrange key start stop [withscores]
      zrevrange key start stop [withscores]# eg1: 获取键'a4'的集合中所有元素,按score从低到高排序
      zrange a4 0 -1
      # eg2: 获取键'a4'的集合中所有元素,按score从低到高排序,并输出score
      zrange a4 0 -1 withscores
      # eg3: 获取键'a4'的集合中所有元素,按score从高到低排序
      zrevrange a4 0 -1
      
  • 返回score值在min和max之间的成员

    # LIMIT中offset代表跳过多少个元素,count是返回几个
    zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
    zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]# eg1: 获取键'a4'的集合中权限值在5和6之间的成员,按score从低到高排序
    zrangebyscore a4 5 6
    # eg2: 获取键'a4'的集合中权限值在5和6之间的成员,按score从高到低排序
    zrevrangebyscore a4 6 5
    # eg3: 获取键'a4'的集合中权限值在3和60之间的成员,按score从低到高排序;跳过第一个元素获取两个元素
    zrangebyscore a4 3 60 limit 1 2
    
  • 返回成员member的score值

    zscore key member# 获取键'a4'的集合中元素'zhangsan'的权重
    zscore a4 zhangsan
    
  • 获取指定分数范围的元素个数

    zcount key min max# 获取键'a4'的集合中的元素权重为 3-5 的元素个数
    zcount a4 3 5
    
  • 按score对指定成员在集合中的排名(排名从0开始计算)

    # score从小到大的排名
    zrank key member
    # score从大到小的排名
    zrevrank key member# 集合a4中元素zhaoliu的排名
    zrank a4 zhaoliu
    
【修改】
  • 修改指定元素的score

    zincrby key 增加值 member# 将 键'a4'的元素zhaoliu的score增加10
    zincrby a4 10 zhaoliu
    
【删除】
  • 删除指定元素

    zrem key member1 member2 ...# eg: 删除集合'a4'中元素'zhangsan'
    zrem a4 zhangsan
    
  • 删除权重在指定范围的元素

    zremrangebyscore key min max# eg: 删除集合'a4'中权限在5、6之间的元素
    zremrangebyscore a4 5 6
    
  • 删除指定数量的成员

    # 删除指定数量的成员,从最低score开始删除, count默认为1
    zpopmin key [count]
    # 删除指定数量的成员,从最高score开始删除, count默认为1
    zpopmax key [count]# eg: 删除集合'a4'中score最小的元素
    zpopmin a4
    
7. 比特流操作
# 按从左到右的偏移量设置一个bit数据的值
setbit key offset value
# 获取一个bit数据的值
getbit
# 统计字符串被设置为1的bit数.
bitcount
# 返回字符串里面第一个被设置为1或者0的bit位。
bitpos# eg:
setbit mykey 7 1
>> "\x01"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch学习笔记之基础函数篇(十四)

文章目录 7.14 torch.fmod() 函数7.15 torch.remainder() 函数7.16 torch.frac() 函数7.17 torch.round() 函数 7.14 torch.fmod() 函数 在PyTorch中&#xff0c;torch.fmod 函数用于计算张量&#xff08;tensor&#xff09;中每个元素除以另一个张量或标量后的浮点余数1。 函…

复习知识点

1. Java常用API 1.1 String类 在java中&#xff0c;String类代表字符串&#xff0c;字符串是常量的&#xff0c;不能被改变。如果想改变字符串。可以用字符串的缓冲区&#xff0c;StringBuffer、StringBuilder 1.1.1 String类的创建方式 第一种&#xff08;常用&#xff09…

一文搞懂PCL中自定义点云类型的构建与函数使用

上周猛男快乐开发时遇到个bug&#xff0c;要用pcl的函数对自定义的点云进行处理。一起解决问题时遇到了很多问题&#xff0c;解决后整理出来分享给各位参考&#xff0c;以免踩一样的坑&#x1f60a;。文章中自定义的点我用PointT来表示&#xff0c;自定义点云一般指的是pcl::Po…

什么是UUID?

UUID&#xff08;Universally Unique Identifier&#xff09;即通用唯一识别码&#xff0c;主要用于在分布式环境中生成全局唯一标识符的标准方法。 UUID是一个128位的数字&#xff0c;通常用32个十六进制数表示&#xff0c;并且按照特定格式显示&#xff0c; 例如&#xff1a…

Linux命令行学习之操作文件和目录

目录 通配符 mkdir – 创建目录 cp – 复制文件和目录 mv – 移动和重命名文件 rm – 删除文件和目录 ln – 创建链接 硬链接 符号链接 本文介绍Linux用于操作文件和目录的命令&#xff0c;介绍的命令有&#xff1a; cp – 复制文件和目录mv – 移动/重命名文件和目录…

文件上传漏洞------一句话木马原理解析

目录 一、实验环境 二、实验过程 构造一句话木马 一句话木马的使用: 木马原理解析: 一、实验环境 小皮面板搭建:upload-labs靶场 二、实验过程 构造一句话木马 这是一个最简单的一句话木马&#xff0c;我们用GET传参接受了两个参数&#xff0c;其最终目的是构造出:ass…

【SQLite数据库】的使用

SQLite数据库 文章目录 SQLite数据库0、linux基础知识补充1、SQLite简介1.1 SQLite & MySQL 的优缺点比较1.2 常见的嵌入式数据库 2、数据库的基本命令和用法2.1 创建数据库2.2 创建一张表格2.3 插入一条数据2.4 增加一列2.5 删2.6 改2.7 查看数据库 3、数据库编程3.1 实验…

牛客网-SQL大厂面试题-1.各个视频的平均完播率

题目&#xff1a;各个视频的平均完播率 DROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video_log (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,uid INT NOT NULL COMMENT 用户ID,video_id INT NOT NULL COMMENT 视频ID,start_time dat…

【爬虫介绍】了解爬虫的魅力

爬虫 爬虫&#xff08;Spider&#xff09;是一种自动化程序&#xff0c;通过模拟人的行为&#xff0c;在互联网上收集、抓取和提取信息。爬虫通常用于网站数据抓取、搜索引擎索引、数据分析和挖掘等领域。 爬虫可以自动访问网页&#xff0c;按照预定的规则抓取网页上的文本、…

python-0009-django对数据的增删改

shell 在虚拟环境中&#xff0c;可以使用python manage.py shell&#xff0c;打开命令行。在命令行中&#xff0c;所见即所得&#xff0c;相当于执行代码片段 对象 from django.db import models# Create your models here.class BookInfo(models.Model):name models.CharF…

小车倒立摆系统线性化,离散化处理

一、线性化 从上一篇文章小车倒立摆物理建模与simulink仿真-CSDN博客 我们推导出了倒立摆小车的运动微分方程&#xff1a; 方程里包含了正弦&#xff0c;余弦运算&#xff0c;因此这个系统是非线性的&#xff0c;不容易控制。 我们的控制目标是把倒立摆直立在小车上(角度在0附…

移动云行动:5.5G技术引领数字化转型

刚刚结束的全国两会上&#xff0c;有人大代表建议应尽快发挥5G-A&#xff08;5.5G&#xff09;优势&#xff0c;加快试点城市布局。此前&#xff0c;中国移动已宣布将在300多个城市启动5.5G商用部署。在通信技术的历史长河中&#xff0c;4G改变了我们的生活方式&#xff0c;而5…

电感基础篇(一)(建议收藏)

大家好&#xff0c;我是砖一。 今天给大家分享一下电感的基础知识&#xff0c;希望对你有用~ 一&#xff0c;什么是电感 电感就是一根导线和磁性材料。 任意一根导线都是电感&#xff0c;只不过电感量很小&#xff0c;加上磁芯是为了控制电感量的大小&#xff0c;比如说我们…

Navicat 面试题及答案整理,最新面试题

Navicat 在数据库管理中的主要用途有哪些&#xff1f; Navicat 是一款数据库管理工具&#xff0c;其主要用途包括&#xff1a; 1、多数据库支持&#xff1a; Navicat 支持多种数据库连接&#xff0c;包括 MySQL、Oracle、PostgreSQL、SQLite、SQL Server 等&#xff0c;方便用…

安卓UI面试题 51-55

51. 如何解决 Android手机圆角失效问题? 通过 background-clip:padding-box为失效的元素设置样式 52. 简述下面是属于 GLSurFaceView 特性的是 ? A、管理一个 surface,这个 surface 就是一块特殊的内存,能直接排版到 android 的视图view 上。 B、管理一个 EGL display,它…

Python中的增强现实(AR)技术和应用

增强现实&#xff08;AR&#xff09;是一种技术&#xff0c;它允许用户在真实环境中与虚拟物体进行交互。在Python中实现AR应用通常涉及使用专门的AR库和框架&#xff0c;这些库和框架提供了创建和渲染虚拟内容的工具。 一个流行的AR框架是ARKit&#xff08;对于iOS设备&#…

基于springboot+vue实现疫情防控物资调配系统项目【项目源码】计算机毕业设计

基于springbootvue实现疫情防控物资调配系统演示 B/S结构的介绍 在确定了项目的主题和研究背景之后&#xff0c;就要确定本系统的架构了。主流的架构有两种&#xff0c;一种是B/S架构&#xff0c;一种是C/S架构。C/S的全称是Client/Server&#xff0c;Client是客户端的意思&am…

Java技术栈 —— RBAC权限模型

什么是RBAC&#xff1f;全称为基于角色的访问控制(Role-Based Access Control)&#xff0c;也就是不同角色权限不同。 参考文章或视频链接[1] 【【IT老齐217】简单粗暴讲解RBAC四级角色权限模型】[2] 【【IT老齐217】简单粗暴讲解RBAC四级角色权限模型】

JVM虚拟机:通过jconsole远程连接解决JVM报错

本文重点 前面我们介绍过的一些工具都是使用命令行的方式来帮助我们完成&#xff0c;本文我们将使用一种图形化界面的方式来远程连接&#xff0c;然后完成关于JVM的检测任务。 jconsole jconsole是一个JVM的检测工具&#xff0c;这个工具任何安装了Java的电脑上都有的&#…

70后姐妹上海创业,要IPO了

一种能与消费者高效互动的自动贩卖机&#xff0c;不仅于近日将一家上海公司送到港交所的门前&#xff0c;还让一对70后姐妹的身价超过13亿元。 在殷珏辉和妹妹殷珏莲的带领下&#xff0c;中国营销服务提供商趣致集团坐拥7543台自动贩卖机和超过5000万注册用户。通过为品牌方提…