Redis 安装与使用

种地  金牌会员 | 2022-9-16 17:13:01 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 555|帖子 555|积分 1665

NoSQL

1. 定义

NoSQL(Not Only SQL)即不仅仅是 SQL,泛指非关系型的数据库
2. 为什么使用 NoSQL?

传统关系数据库在应付动态网站、特别是超大规模和高并发的纯动态网站已经显得力不从心了,如商品网站中对商品数据的频繁查询、热搜商品的排行统计、订单超时问题。虽然能实现功能,但性能不乐观,而且实现异常复杂,nosql 的出现更好地解决了这些问题
3. 分类

键值存储数据库:

  • 说明:主要使用哈希表,这个表有一个特定的键和一个指针指向特定的数据
  • 特点:简单易部署,海量数据下对其中部分值进行查询或更新时,效率低下
  • 相关产品:Redis、SSDB
列存储数据库:

  • 说明:通常用来应付分布式存储的海量数据
  • 特点:键依然存在,但一个键指向多个列,由路由键决定实际指向哪一个列
  • 相关产品:HBase
文档型数据库:

  • 说明:同第一种键值存储类似,该类型的数据模型是版本化的文档,以特定格式存储,比如 JSON
  • 特点:以文档形式存储,允许嵌套键值,可以存储与表现更复杂的数据,查询效率更高
  • 相关产品:MongoDB
图形数据库:

  • 说明:使用灵活的图形模型,并且能扩展到多个服务器
  • 特点:可以存储灵活的数据模型,比如地图
  • 相关产品:InfoGrid
4. 应用场景


  • 数据模型比较简单
  • 系统灵活性要求高
  • 对数据库性能要求较高
  • 不需要高度的数据一致性(Nosql产品对于事务支持不是特别好)

Redis 概述

1. 什么是 Redis?

Redis 是一个开源的基于内存数据存储结构,通常用于数据库,缓存和消息中间件
2. 特点


  • 高性能 key-value 内存型数据库
  • 支持丰富的数据类型(String、List、Set、Hash)
  • 支持数据持久化
  • 单进程,单线程,不存在并发问题,线程安全
  • 效率高,自身有优化异步处理
3. windows 环境安装


该项目已经多年未更新了,不过作为学习测试还是足够的,下载 Redis-x64-3.2.100.zip 并解压,进入解压目录
打开 cmd 指令窗口,输入命令
  1. .\redis-server.exe .\redis.windows-service.conf
复制代码
即可运行 Redis
4. Linux 环境安装

以 Ubuntu 18.04.5 为例,安装方法有三种:
4.1 apt-get 方式安装

安装命令
  1. apt-get install -y redis-server
复制代码
查看 Redis 状态
  1. service redis-server status
复制代码

可以看到 Redis 状态是 active(running),正在运行当中
启动、停止、重启命令如下
  1. service redis-server start
  2. service redis-server stop
  3. service redis-server restart
复制代码
默认配置文件位于 /etc/redis/redis.conf
卸载 Redis 命令如下
  1. apt-get purge --auto-remove redis-server
复制代码
4.2 源码方式安装

下载源码压缩包并解压
  1. wget https://download.redis.io/releases/redis-7.0.4.tar.gz
  2. tar -zxvf redis-7.0.4.tar.gz
复制代码
由于 Redis 使用 C 语言编写,所以我们需要先安装 gcc 依赖才能完成编译
  1. apt-get update
  2. apt-get install build-essential
复制代码
进入解压缩目录执行命令,开始编译
  1. make MALLOC=libc
复制代码
编译完成后会生成一些可执行文件,执行如下命令进行安装
  1. # 表示安装位置在 /usr/redis
  2. make install PREFIX=/usr/redis
复制代码
进入 /usr/redis/bin 目录启动 Redis 服务
  1. ./redis-server        # 使用默认配置
复制代码
进入 /usr/redis/bin 目录启动 Redis 客户端
  1. # raw 参数的作用是显示中文
  2. ./redis-cli -h localhost -p 6379 --raw
复制代码
默认 redis 服务器没有开启远程连接,也就是默认拒绝所有远程客户端连接,需要修改配置开启远程连接
  1. vim redis.conf
  2. # 允许一切客户端连接
  3. bind 127.0.0.1 修改为 0.0.0.0
复制代码
默认安装目录没有任何配置文件,如果需要指定配置文件启动,要在源码目录复制 redis.conf 到安装目录,再执行命令
  1. ./redis-server ../redis.conf
复制代码
加上 & 可让 redis 服务后台启动
  1. redis-server ./redis.conf &
复制代码
Redis 操作

1. 库(database)

存放数据的一个基本单元,一个库可以存放 key-value 键值对,redis 中每个库都有一个唯一名称,编号从 0 开始,默认库的个数为 16 个,默认使用 0 号库,库与库之间彼此隔离
  1. # 切换库
  2. SELECT 0
  3. # 清除当前库
  4. FLUSHDB
  5. # 清除全部库
  6. FLUSHALL
复制代码
2. 操作 key
  1. -- DEL 指令
  2.         -- 语法:DEL key [key..]
  3.         -- 作用:删除给定的一个或多个 key。不存在的 key 会被忽略。
  4.         -- 返回值:被删除 key 的数量
  5. --EXISTS 指令
  6.         -- 语法:EXISTS key
  7.         -- 作用:检查给定 key 是否存在
  8.         -- 返回值:设置成功返回 1
  9. -- EXPIRE 指令
  10.         -- 语法:EXPIRE key seconds
  11.         -- 作用:为给定 key 设置过期时间,以秒计,超期自动删除
  12.         -- 返回值:设置成功返回 1
  13. -- KEYS 指令
  14.         -- 语法:KEYS pattern
  15.         -- 作用:查找所有符合给定模式(pattern)的 key
  16.         -- 返回值:符合给定模式的 key 列表
  17. -- MOVE 指令
  18.         -- 语法:MOVE key db
  19.         -- 作用:将当前数据库的 key 移动到给定的数据库 db 当中
  20.         -- 返回值:移动成功返回 1,失败返回 0
  21. -- PEXPIRE 指令
  22.         -- 语法:EXPIRE key milliseconds
  23.         -- 作用:设置 key 的过期时间以毫秒计
  24.         -- 返回值:设置成功返回 1
  25. -- PEXPIREAT 指令
  26.         -- 语法:PEXPIREAT key milliseconds-timestamp
  27.         -- 作用:设置 key 过期时间的时间戳 (unix timestamp) 以毫秒计
  28.         -- 返回值:设置成功返回 1,设置失败或 key 不存在时返回 0
  29. -- TTL 指令
  30.         -- 语法:TTL key
  31.         -- 作用:以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)
  32.         -- 返回值
  33.                 -- 当 key 不存在时返回 -2
  34.                 -- 当 key 存在但没有设置剩余生存时间时返回 -1
  35.                 -- 否则以秒为单位返回 key 的剩余时间
  36. -- PTTL 指令
  37.         -- 语法:PTTL key
  38.         -- 作用:以毫秒为单位返回 key 的剩余的过期时间
  39.         -- 返回值
  40.                 -- 当 key 不存在时返回 -2
  41.                 -- 当 key 存在但没有设置剩余生存时间时返回 -1
  42.                 -- 否则以秒为单位返回 key 的剩余时间
  43. -- RANDOMKEY 指令
  44.         -- 语法:RANDOMKEY
  45.         -- 作用:从当前数据库中随机返回一个 key
  46.         -- 返回值:当数据库不为空时返回一个 key,否则返回 nil
  47. -- RENAME 指令
  48.         -- 语法:RENAME key newkey
  49.         -- 作用:修改 key 的名称为 newkey。当 key 和 newkey 相同或者 key 不存在时,返回一个错误。
  50.                                 当 newkey 存在时,RENAME 命令将覆盖旧值
  51.         -- 返回值:改名成功提示 OK,失败返回一个错误
  52. -- TYPE 指令
  53.         -- 语法:TYPE key
  54.         -- 作用:返回 key 所存储值得类型
  55.         -- 返回值:
  56.                 -- none(key 不存在)
  57.                 -- string(字符串)
  58.                 -- list(列表)
  59.                 -- set(集合)
  60.                 -- zset(有序集合)
  61.                 -- hash(哈希表)
复制代码
3. 操作 String
  1. -- SET key value
  2.         -- 设置指定 key 的值
  3. -- GET key
  4.         -- 获取指定 key 的值
  5. -- MSET key value [key value ...]
  6.         -- 同时设置一个或多个 key-value 对
  7. -- MGET key1 [key2..]
  8.         -- 获取所有(一个或多个)给定 key 的值
  9. -- GETSET key value
  10.         -- 将给定 key 的值设为 value ,并返回 key 的旧值
  11. -- STRLEN key
  12.         -- 返回 key 所储存的字符串值的长度
  13. -- APPEND key value
  14.         -- 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾
  15. -- GETRANGE key start end
  16.         -- 返回 key 中字符串值的子字符
  17. -- SETEX key seconds value
  18.         -- 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)
  19. -- PSETEX key milliseconds value
  20.         -- 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位
  21. -- SETNX key value
  22.         -- 只有在 key 不存在时设置 key 的值
  23. -- MSETNX key value [key value ...]
  24.         -- 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
  25. -- DECR key
  26.         -- 将 key 中储存的数字值减一
  27. -- DECRBY key decrement
  28.         -- key 所储存的值减去给定的减量值
  29. -- INCR key
  30.         -- 将 key 中储存的数字值增一
  31. -- INCRBY key increment
  32.         -- 将 key 所储存的值加上给定的增量值
  33. -- INCRBYFLOAT key increment
  34.         -- 将 key 所储存的值加上给定的浮点增量值
  35. -- GETBIT key offset
  36.         -- 对 key 所储存的字符串值,获取指定偏移量上的位
  37. -- SETBIT key offset value
  38.         -- 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)
  39. -- SETRANGE key offset value
  40.         -- 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始
复制代码
4. 操作 List

  1. -- LPUSH key value1 [value2]
  2.         -- 将一个或多个值插入到列表头部
  3. -- LPUSHX key value
  4.         -- 将一个值插入到已存在的列表头部
  5. -- RPUSH key value1 [value2]
  6.         -- 在列表中添加一个或多个值
  7. -- RPUSHX key value
  8.         -- 为已存在的列表添加值
  9. -- LPOP key
  10.         -- 移出并获取列表的第一个元素
  11. -- RPOP key
  12.         -- 移除列表的最后一个元素,返回值为移除的元素
  13. -- LRANGE key start stop
  14.         -- 获取列表指定范围内的元素
  15. -- LLEN key
  16.         -- 获取列表长度
  17. -- LSET key index value
  18.         -- 通过索引设置列表元素的值
  19. -- LINDEX key index
  20.         -- 通过索引获取列表中的元素
  21. -- LREM key count value
  22.         -- 移除列表元素
  23. -- LTRIM
  24.         -- 保留列表特定区间内的元素
  25. -- LINSERT key BEFORE|AFTER pivot value
  26.         -- 在列表的元素前或者后插入元素
  27. -- BLPOP key1 [key2 ] timeout
  28.         -- 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
  29. -- BRPOP key1 [key2 ] timeout
  30.         -- 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
  31. -- BRPOPLPUSH source destination timeout
  32.         -- 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它。如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
  33. -- LTRIM key start stop
  34.         -- 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
  35. -- RPOPLPUSH source destination
  36.         -- 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
复制代码
5. 操作 Set

  1. 1   SADD key member1 [member2]
  2. 向集合添加一个或多个成员
  3. 2        SCARD key
  4. 获取集合的成员数
  5. 3        SDIFF key1 [key2]
  6. 返回给定所有集合的差集
  7. 4        SDIFFSTORE destination key1 [key2]
  8. 返回给定所有集合的差集并存储在 destination 中
  9. 5        SINTER key1 [key2]
  10. 返回给定所有集合的交集
  11. 6        SINTERSTORE destination key1 [key2]
  12. 返回给定所有集合的交集并存储在 destination 中
  13. 7        SISMEMBER key member
  14. 判断 member 元素是否是集合 key 的成员
  15. 8        SMEMBERS key
  16. 返回集合中的所有成员
  17. 9        SMOVE source destination member
  18. 将 member 元素从 source 集合移动到 destination 集合
  19. 10        SPOP key
  20. 移除并返回集合中的一个随机元素
  21. 11        SRANDMEMBER key [count]
  22. 返回集合中一个或多个随机数
  23. 12        SREM key member1 [member2]
  24. 移除集合中一个或多个成员
  25. 13        SUNION key1 [key2]
  26. 返回所有给定集合的并集
  27. 14        SUNIONSTORE destination key1 [key2]
  28. 所有给定集合的并集存储在 destination 集合中
  29. 15        SSCAN key cursor [MATCH pattern] [COUNT count]
  30. 迭代集合中的元素
复制代码
6. 操作 ZSet

元素可排序,不可以重复
  1. 1        ZADD key score1 member1 [score2 member2]
  2. 向有序集合添加一个或多个成员,或者更新已存在成员的分数
  3. 2        ZCARD key
  4. 获取有序集合的成员数
  5. 3        ZCOUNT key min max
  6. 计算在有序集合中指定区间分数的成员数
  7. 4        ZINCRBY key increment member
  8. 有序集合中对指定成员的分数加上增量 increment
  9. 5        ZINTERSTORE destination numkeys key [key ...]
  10. 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
  11. 6        ZLEXCOUNT key min max
  12. 在有序集合中计算指定字典区间内成员数量
  13. 7        ZRANGE key start stop [WITHSCORES]
  14. 通过索引区间返回有序集合指定区间内的成员
  15. 8        ZRANGEBYLEX key min max [LIMIT offset count]
  16. 通过字典区间返回有序集合的成员
  17. 9        ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
  18. 通过分数返回有序集合指定区间内的成员
  19. 10        ZRANK key member
  20. 返回有序集合中指定成员的索引
  21. 11        ZREM key member [member ...]
  22. 移除有序集合中的一个或多个成员
  23. 12        ZREMRANGEBYLEX key min max
  24. 移除有序集合中给定的字典区间的所有成员
  25. 13        ZREMRANGEBYRANK key start stop
  26. 移除有序集合中给定的排名区间的所有成员
  27. 14        ZREMRANGEBYSCORE key min max
  28. 移除有序集合中给定的分数区间的所有成员
  29. 15        ZREVRANGE key start stop [WITHSCORES]
  30. 返回有序集中指定区间内的成员,通过索引,分数从高到低
  31. 16        ZREVRANGEBYSCORE key max min [WITHSCORES]
  32. 返回有序集中指定分数区间内的成员,分数从高到低排序
  33. 17        ZREVRANK key member
  34. 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
  35. 18        ZSCORE key member
  36. 返回有序集中,成员的分数值
  37. 19        ZUNIONSTORE destination numkeys key [key ...]
  38. 计算给定的一个或多个有序集的并集,并存储在新的 key 中
  39. 20        ZSCAN key cursor [MATCH pattern] [COUNT count]
  40. 迭代有序集合中的元素(包括元素成员和元素分值
复制代码
7. 操作 Hash

value 是一个 map 结构,无序
  1. 1        HDEL key field1 [field2]
  2. 删除一个或多个哈希表字段
  3. 2        HEXISTS key field
  4. 查看哈希表 key 中,指定的字段是否存在。
  5. 3        HGET key field
  6. 获取存储在哈希表中指定字段的值。
  7. 4        HGETALL key
  8. 获取在哈希表中指定 key 的所有字段和值
  9. 5        HINCRBY key field increment
  10. 为哈希表 key 中的指定字段的整数值加上增量 increment 。
  11. 6        HINCRBYFLOAT key field increment
  12. 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
  13. 7        HKEYS key
  14. 获取所有哈希表中的字段
  15. 8        HLEN key
  16. 获取哈希表中字段的数量
  17. 9        HMGET key field1 [field2]
  18. 获取所有给定字段的值
  19. 10        HMSET key field1 value1 [field2 value2 ]
  20. 同时将多个 field-value (域-值)对设置到哈希表 key 中。
  21. 11        HSET key field value
  22. 将哈希表 key 中的字段 field 的值设为 value 。
  23. 12        HSETNX key field value
  24. 只有在字段 field 不存在时,设置哈希表字段的值。
  25. 13        HVALS key
  26. 获取哈希表中所有值。
  27. 14        HSCAN key cursor [MATCH pattern] [COUNT count]
  28. 迭代哈希表中的键值对。
复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表