Redis数据库安装与使用总结

Redis语句总结

一、基本概念

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

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

二、Redis数据库特点

  • Redis支持数据的持久化

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

    • 持久化的两种方式:

      • RDB(Redis DataBase)

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

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

三、Redis的应用场景

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

四、Redis安装

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

  • 平台安装软件

    • Windows 系统安装并启动 Redis

      • 双击 .msi 文件安装软件

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

        bash 复制代码
        redis-server D:/soft/redis/redis.windows.conf
      • Redis服务器 启动/停止

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

    bash 复制代码
    安装命令: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基本配置

  • 配置

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

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

      bash 复制代码
      bind 127.0.0.1
    • 端⼝,默认为6379

      bash 复制代码
      port 6379
    • 是否以守护进程运⾏

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

      bash 复制代码
      dbfilename dump.rdb
    • RDB持久化数据库数据文件的所在目录

      bash 复制代码
      dir /var/lib/redis
    • ⽇志⽂件

      bash 复制代码
      logfile "/var/log/redis/redis-server.log"
    • 数据库,默认有16个

      bash 复制代码
      database 16

六、基本指令

bash 复制代码
# 启动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类型

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

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

  • 设置键值

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

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

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

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

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

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

    bash 复制代码
    get key
    
    # eg: 获取键'name'的值
    get 'name'
  • 根据多个键获取多个值

    bash 复制代码
    mget key1 key2 ...
    
    # eg: 获取键a1、a2、a3'的值
    mget a1 a2 a3

2. 键命令

  • 查找键,参数⽀持正则表达式

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

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

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

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

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

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

    bash 复制代码
    PERSIST 键
  • 设置键值对同时设置过期时间:

    bash 复制代码
    setex key value EX seconds
    setex key seconds value
    
    # eg: 设置键为aa值为aa过期时间为3秒的数据
    setex aa aa ex 3
    setex aa 3 aa

3.hash类型

tex 复制代码
hash⽤于存储对象,对象的结构为属性、值; 值的类型为string
【增加、修改】
  • 设置单个属性 或 多个属性

    bash 复制代码
    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
  • 其他

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

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

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

    bash 复制代码
    hgetall key
  • 获取域的个数

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

    bash 复制代码
    hdel key field1 field2 ...
    
    # eg: 删除键'u2'的属性'age'
    hdel u2 age

4. list类型

tex 复制代码
列表的元素类型为string; 按照插⼊顺序排序
【增加】
  • 插⼊数据

    bash 复制代码
    # 在列表左侧/右侧插入数据
    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
  • 在指定元素的前或后插⼊新元素

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

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

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

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

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

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

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

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

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

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

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

    • count > 0: 从头往尾移除

    • count < 0: 从尾往头移除

    • count = 0: 移除所有

      bash 复制代码
      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
  • 移除并获取列表的第一个成员或最后一个成员

    bash 复制代码
    # 删除列表第一个成员, 并获取移除的元素
    lpop key
    # 删除列表最后一个成员, 并获取移除的元素
    rpop key

5. set类型

tex 复制代码
set 无序集合,元素为string类型;元素具有唯⼀性,不重复
说明:对于集合没有修改操作
【增加】
  • 添加元素

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

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

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

    bash 复制代码
    scard 键
【删除】
  • 随机删除count个元素

    bash 复制代码
    spop 键 [count]
  • 删除指定元素

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

    bash 复制代码
    sismember 键 元素值
【交集、差集和并集】
bash 复制代码
# 交集、比较多个集合中共同存在的成员
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 4

sinter 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类型

tex 复制代码
zet 有序集合(sorted set) 元素为string类型; 元素具有唯⼀性,不重复. 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从小到大排序
说明:没有修改操作
【增加】
  • 添加元素

    bash 复制代码
    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表示最后⼀个元素

      bash 复制代码
      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之间的成员

    bash 复制代码
    # 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值

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

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

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

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

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

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

    bash 复制代码
    # 删除指定数量的成员,从最低score开始删除, count默认为1
    zpopmin key [count]
    # 删除指定数量的成员,从最高score开始删除, count默认为1
    zpopmax key [count]
    
    # eg: 删除集合'a4'中score最小的元素
    zpopmin a4

7. 比特流操作

bash 复制代码
# 按从左到右的偏移量设置一个bit数据的值
setbit key offset value
# 获取一个bit数据的值
getbit
# 统计字符串被设置为1的bit数.
bitcount
# 返回字符串里面第一个被设置为1或者0的bit位。
bitpos

# eg:
setbit mykey 7 1
>> "\x01"

六、分布订阅

  • 订阅 subscribe

    bash 复制代码
    # 订阅法语
    subscribe channel1 channel2 channel3...
    
    # eg: 订阅一个名为 info 的 channel
    subscribe info
    
    >>>
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "info"
    3) (integer) 1
  • 发布 public

    bash 复制代码
    # 发布法语
    publish channel message
    
    # eg: 给 info 频道发布消息 "python"
    publish info python
    
    # 返回订阅的人数
    >>>
    publish info "python"
    (integer) 2
  • 运行结果

    bash 复制代码
    # 订阅方终端显示内容
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "info"
    3) (integer) 1
    1) "message"
    2) "info"
    3) "python"
  • redis与python交互

    • 发布订阅消费者

      python 复制代码
      import redis
      
      my_redis = redis.Redis(host="127.0.0.1", port=7777)
      
      # 创建订阅者对象
      subscribe = my_redis.pubsub()
      subscribe.subscribe("room_01")
      
      # 忽略 订阅本身的响应
      subscribe.parse_response()
      
      while True:
          print("waitting...")
          listen_msg = subscribe.parse_response()
          print(listen_msg)
    • 发布订阅生产者

      python 复制代码
      import redis
      import time
      
      my_redis = redis.Redis(host="127.0.0.1", port=7777)
      
      for item in "hello":
          time.sleep(1)
          my_redis.publish("room_01", item)
相关推荐
TDengine (老段)16 分钟前
TDengine 开发指南—— UDF函数
java·大数据·数据库·物联网·数据分析·tdengine·涛思数据
云动雨颤25 分钟前
告别数据僵尸!Redis实现自动清理过期键值对
redis
Waloo1 小时前
STUFF 函数
数据库·sql server
YUNYINGXIA1 小时前
Redis集群
redis·wpf
?ccc?1 小时前
MySQL故障排查与生产环境优化
数据库·mysql
零叹2 小时前
篇章二 论坛系统——系统设计
数据库·数据库设计·技术选型·表的设计
重生之后端学习2 小时前
苍穹外卖-day03
java·开发语言·数据库·spring boot·mysql·spring·tomcat
快起来别睡了2 小时前
传统数据表创建与Prompt方式的对比:以NBA赛季投篮数据表设计为例
数据库·程序员
远方16092 小时前
21-Oracle 23 ai-Automatic SQL Plan Management(SPM)
数据库·sql·oracle
语风方伯2 小时前
Mysql docker部署8.0升级到8.4
数据库