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+版本)

  • 平台安装软件

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

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"

六、分布订阅

  • 订阅 subscribe

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

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

    # 订阅方终端显示内容
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "info"
    3) (integer) 1
    1) "message"
    2) "info"
    3) "python"
  • redis与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)
    • 发布订阅生产者

      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)

Redis数据库安装与使用总结的更多相关文章

  1. redis数据库安装 redis持久化及主从复制

    ----------------------------------------安装redis-5.0.4---------------------------------------- wget h ...

  2. Linux服务器运行环境搭建(二)——Redis数据库安装

    官网地址:http://redis.io/ 官网下载地址:http://redis.io/download 1. 下载Redis源码(tar.gz),并上传到Linux 2. 解压缩包:tar zxv ...

  3. Redis数据库安装与配置调试

    主要培养自我对Redis数据库安装能力, 并且进行个性化的数据库配置.掌握本实验的重点,即在于数据库的安装与启动参数的配置.同时,理解NOSQL数据库的体系结构. ①下载Redis安装包进行数据库平台 ...

  4. Redis数据库安装简介

    方法一:Redis手动cmd启动服务 端客户端的方法-------Redis 服务端测试使用1. 下载Redis(https://github.com/mythz/redis-windows)2. 解 ...

  5. redis数据库安装

        一. 简单介绍: REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用A ...

  6. 数据库之redis篇(1)—— redis数据库安装,简单使用

    简介 reids,由Salvatore Sanfilippo写的一个高性能的key-value数据库,并且它是非关系型数据库,也就是没有像mysql那样多表链接操作,并且它是是完全开源免费的,遵守BS ...

  7. redis 数据库安装和基本使用

    Redis 介绍: Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure server). Redis的键值可以包 ...

  8. redis数据库安装及简单的增删改查

    redis下载地址:https://github.com/MSOpenTech/redis/releases. 解压之后,运行 redis-server.exe redis.windows.conf  ...

  9. Linux安装redis数据库

    这几天在搞redis数据库,花了好大功夫,才成功安装在Linux上,这里将自己的安装步骤分享出来,同时也做个记录,备忘. 新人一枚,不对之处,请多指教! 首先登陆Linux服务器 Linux里,我习惯 ...

  10. sqlite数据库安装配置

    一.SQLite简介    SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中, ...

随机推荐

  1. [Java]ArrayList源码解析

    ArrayList源码解析 1. 核心源码解读 package java.util; import java.util.function.Consumer; import java.util.func ...

  2. 了解一下基本的tcp代理配置

    我们首先用一个简单例子了解一下基本的tcp代理配置 worker_processes 1; #nginx worker 数量 error_log logs/error.log; #指定错误日志文件路径 ...

  3. 【Unity3D】MonoBehaviour的生命周期

    1 前言 ​ Unity3D 中可以给每个游戏对象添加脚本,这些脚本必须继承 MonoBehaviour,用户可以根据需要重写 MonoBehaviour 的部分生命周期函数,这些生命周期函数由系统自 ...

  4. 基于keras的胶囊网络(CapsNet)

    1 简介 胶囊网络(CapsNet)由 Hinton 于2017年10月在<Dynamic Routing Between Capsules>中提出,目的在于解决 CNN 只能提取特征,而 ...

  5. spring boot读取json文件并实现接口查询

    0.源码下载 https://download.csdn.net/download/IndexMan/84238085 1.说明 最近需要在spring boot项目启动时读取json文件并保存到Li ...

  6. 【Java复健指南07】OOP中级02-重写与多态思想

    前情提要:https://www.cnblogs.com/DAYceng/category/2227185.html 重写 注意事项和使用细节 方法重写也叫方法覆法,需要满足下面的条件 1.子类的方法 ...

  7. 详解SSL证书系列(3)如何选择SSL证书

    我们知道了在网站部署 SSL 证书后,不管是对网站本身还是对网站的用户都能够带来许多好处.那么随着 HTTPS的普及,市面上也出现了各种不同的 SSL 证书.并且由于 SSL 证书的多样性,很多人对于 ...

  8. zynq7000 I2C RTC 与 串口使用

    RS485 串口 测试 硬件上2路串口,其中UART 1对应PS STD IN/OUT,UART 0对应RS485: 图 ‑1 RS485电路,自动转换输入.输出方向 可参考 https://blog ...

  9. The OCaml Language Cheatsheets

    The OCaml Language Cheatsheets OCaml v.4.08.1 Syntax Implementations are in .ml files, interfaces ar ...

  10. 【Azure 存储服务】Azure Blob上传大文件(600MB)出现内存溢出情况(Java SDK)

    问题描述 Java 云端开发,调用 blob 上传会产生内存溢出,Java上调用的方式如下: InputStream inputStream = new BufferedInputStream(new ...