Redis(一) -- 基础

打印 上一主题 下一主题

主题 1031|帖子 1031|积分 3093

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
Redis

Redis是一个开源(BSD许可高性能的内存存储的key-value数据库! 可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表(List)、集合(Set)、有序集合(Ordered Sets),位图(bitmap),hyperloglogs,GEO等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
优点

  • 高性能: Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型:Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子性: Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
  • Redis还支持 publish/subscribe, 通知, key过期等等特性。   --这块得功能用的少
  • 可以持久化 , 数据淘汰 , 数据的过期时间   -- 可以用作一个数据库,数据比较安全
  • 分布式:  高并发  高可靠  扩展
适用的场景

  • 用来做缓存(ehcache/memcached)——redis的所有数据是放在内存中的(内存数据库)
  • 可以在某些特定应用场景下替代传统数据库解决一些特定需求

    • 社交类的应用(共同好友,使用了某项功能的人数统计)
    • session共享、购物车
    • 实时排行榜

  • 可以用于实现简单的队列系统(不常用)
  • 可以用于实现简单的订阅-发布系统

    • 在离线批计算中,可以用redis作为外部字典库来查询(map端join)

  • 在实时流式计算中,可以用redis作为计算过程中的中间存储,或者作为实时流式计算的最终结果存储器
什么是缓存?
缓存的伪代码:
  1. import org.apache.commons.lang3.RandomUtils;
  2. import java.sql.*;
  3. import java.util.HashMap;
  4. /**
  5. * 缓存得目的就是为了减轻数据库的压力
  6. */
  7. public class _01_缓存 {
  8.     static HashMap<Integer,String> map = new HashMap<>();
  9.     public staticd void main(String[] args) throws Exception {
  10.         //获取mysql的连接
  11.         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
  12.         for (int i = 0; i < 10000; i++) {
  13.             //我这边再不断的访问数据库
  14.             int id = RandomUtils.nextInt(1,10000);
  15.             String name = getData(conn, id);
  16.         }
  17.     }
  18.     public static String getData(Connection conn,int id) throws SQLException {
  19.         String name = "";
  20.         PreparedStatement pps = conn.prepareStatement("select name from user where id = ?");
  21.         pps.setInt(1,id);
  22.         String mapName = map.get(id);
  23.         if (mapName == null){
  24.             ResultSet resultSet = pps.executeQuery();
  25.             while (resultSet.next()){
  26.                 name = resultSet.getString(1);
  27.                 map.put(id,name);
  28.             }
  29.         }else {
  30.             return mapName;
  31.         }
  32.         return name;
  33.     }
  34. }
复制代码
Redis的单节点部署

  1. # 安装centos的Extras库,它里面有一些centos的安装包
  2. yum -y install centos-release-scl
  3. # 安装gcc,centos的默认gcc版本是4.8.5,给他升级到最新版本9.几
  4. # 并且安装devtoolset 用来维护开发环境
  5. yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
  6. # 激活对应的devtoolset
  7. scl enable devtoolset-9 bash
  8. # 配置环境变量
  9. echo "source /opt/rh/devtoolset-9/enable" /etc/profile
  10. # source下环境变量使环境变量生效
  11. source /etc/profile
  12. # 安装完成之后查看是否安装成功
  13. gcc -v
  14. # 查看版本号,如果有版本号出现代表安装成功
  15. # 最下面一行出现这个
  16. # gcc version 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC)
  17. # 解压redis源码
  18. tar -zxf redis-6.0.9.tar.gz
  19. cd redis-6.0.9/
  20. # 编译安装 迁出可执行文件
  21. make install PREFIX=/opt/apps/redis6
  22. # 将原来redis中的redis.conf复制出来,放在后来迁出的redis6文件夹中去
  23. cp /opt/apps/redis/redis.conf /opt/apps/redis6/
  24. # 修改复制过来的配置文件
  25. vi redis.conf
  26. # 修改的第一个地方:
  27. bind 127.0.0.1 # 原来监听的端口是本机,后面我们要搭建集群,远程连接,本地显然是不合适
  28. bind linux01  # 改成集群里面的地址
  29. # 修改的第二个地方:
  30. # daemonize 后台运行的意思,如果是no,就是前台启动,改成yes,后台启动,方便一点
  31. daemonize no  # 原来是no
  32. daemonize yes # 改成yes
  33. # 环境变量
  34. vi /etc/profile
  35. # REDIS_HOME
  36. export REDIS_HOME=/opt/app/redis6
  37. export PATH=$PATH:$REDIS_HOME/bin
  38. source /etc/profile
  39. # 启动redis
  40. redis-server /opt/apps/redis6/redis.conf
  41. # 查看是否启动成功
  42. netstat -nltp |grep redis
  43. # 连接到客户端
  44. # -h 代表的是指定主机名,-p 代表的是端口号, 默认端口就是6379 --raw  中文显示乱码问题
  45. redis-cli -h linux01 -p 6379 --raw
  46. # 连接测试 输入ping 返回pong则成功
  47. linux01:6379> ping
  48. PONG
复制代码
Redis数据结构

key

keys
  1. KEYS pattern
  2. -- 查找所有符合给定模式 pattern 的 key
  3. KEYS *             -- 匹配数据库中所有 key
  4. KEYS h?llo         -- 匹配 hello,hallo 和 hxllo 等。   占一个字符
  5. KEYS h*llo         -- 匹配 hllo 和 heeeeello 等
  6. KEYS h[ae]llo      -- 匹配 hello 和 hallo ,但不匹配 hillo
  7. -- 返回值:符合给定模式的 key 列表。
  8. MSET one 1 two 2 three 3 four 4  -- 一次设置 4 个 key
  9. KEYS *o*
  10. KEYS t??
  11. KEYS t[w]*
  12. KEYS *  -- 匹配数据库内所有 key
复制代码
DEL
  1. DEL key [key ...]
  2. -- 删除给定的一个或多个 key 。
  3. -- 不存在的 key 会被忽略。
  4. -- 返回值:被删除 key 的数量。### DUMP
  5. Plain Text
  6. DUMP key
  7. 序列化给定 key ,并返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键。
  8. 序列化生成的值有以下几个特点:
  9. 它带有 64 位的校验和,用于检测错误, RESTORE 在进行反序列化之前会先检查校验和。
  10. 值的编码格式和 RDB 文件保持一致。
  11. RDB 版本会被编码在序列化值当中,如果因为 Redis 的版本不同造成 RDB 格式不兼容,那么 Redis 会拒绝对这个值进行反序列化操作。
  12. 序列化的值不包括任何生存时间信息。
  13. 返回值:
  14. 如果 key 不存在,那么返回 nil 。
  15. 否则,返回序列化之后的值。
复制代码
DUMP
  1. DUMP key
  2. -- 序列化给定 key ,并返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键。
  3. -- 序列化生成的值有以下几个特点:
  4. -- 它带有 64 位的校验和,用于检测错误, RESTORE 在进行反序列化之前会先检查校验和。
  5. -- 值的编码格式和 RDB 文件保持一致。
  6. -- RDB 版本会被编码在序列化值当中,如果因为 Redis 的版本不同造成 RDB 格式不兼容,那么 Redis 会拒绝对这个值进行反序列化操作。
  7. -- 序列化的值不包括任何生存时间信息。
  8. -- 返回值:
  9. -- 如果 key 不存在,那么返回 nil 。
  10. -- 否则,返回序列化之后的值。
  11. set name hello
  12. linux01:6379> dump name
  13. "\x00\x05hello\t\x00\xb3\x80\x8e\xba1\xb2C\xbb"
复制代码
RESTORE
  1. RESTORE key ttl serialized-value
  2. -- 反序列化给定的序列化值,并将它和给定的 key 关联。
  3. -- 参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间。
  4. -- RESTORE 在执行反序列化之前会先对序列化值的 RDB 版本和数据校验和进行检查,如果 RDB 版本不相同或者数据不完整的话,那么 RESTORE 会拒绝进行反序列化,并返回一个错误。
  5. -- 返回值:
  6. -- 如果反序列化成功那么返回 OK ,否则返回一个错误。
  7. SET greeting "hello, dumping world!"
  8. DUMP greeting
  9. --  "\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"
  10. RESTORE greeting-again 0 "\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"
  11. GET greeting-again
  12. -- "hello, dumping world!"
复制代码
EXISTS
  1. EXISTS key
  2. -- 检查给定 key 是否存在。
  3. -- 返回值:若 key 存在,返回 1 ,否则返回 0 。
复制代码
EXPIRE
  1. EXPIRE key seconds
  2. -- 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。
  3. -- 更新生存时间
  4. -- 可以对一个已经带有生存时间的 key 执行 EXPIRE 命令,新指定的生存时间会取代旧的生存时间。
  5. -- 过期时间的精确度
  6. -- 在 Redis 2.4 版本中,过期时间的延迟在 1 秒钟之内 —— 也即是,就算 key 已经过期,但它还是可能在过期之后一秒钟之内被访问到,而在新的 Redis 2.6 版本中,延迟被降低到 1 毫秒之内。
  7. -- 返回值:
  8. -- 设置成功返回 1 。
  9. -- 当 key 不存在或者不能为 key 设置生存时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的生存时间),返回 0
  10. SET cache_page "www.google.com"
  11. EXPIRE cache_page 30  -- 设置过期时间为 30 秒
  12. TTL cache_page -- 查看剩余生存时间
  13. EXPIRE cache_page 30000   -- 更新过期时间
复制代码
TTL
  1. TTL key
  2. -- 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
  3. -- 返回值:
  4. -- 当 key 不存在时,返回 -2 。
  5. -- 当 key 存在但没有设置剩余生存时间时,返回 -1 。
  6. -- 否则,以秒为单位,返回 key 的剩余生存时间。
复制代码
PTTL
  1. PTTL key
  2. -- 这个命令类似于 TTL 命令,但它以毫秒为单位返回 key 的剩余生存时间,而不是像 TTL 命令那样,以秒为单位。
  3. -- 返回值:
  4. -- 当 key 不存在时,返回 -2
  5. -- 当 key 存在但没有设置剩余生存时间时,返回 -1
  6. -- 否则,以毫秒为单位,返回 key 的剩余生存时间
复制代码
EXPIREAT
  1. EXPIREAT key timestamp
  2. -- EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置生存时间。
  3. -- 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
复制代码
PEXPIREAT
  1. PEXPIREAT key milliseconds-timestamp
  2. --这个命令和 EXPIREAT 命令类似,但它以毫秒为单位设置 key 的过期 unix 时间戳,而不是像 EXPIREAT 那样,以秒为单位
  3. --返回值:
  4. --如果生存时间设置成功,返回 1
  5. --当 key 不存在或没办法设置生存时间时,返回 0
复制代码
PERSIST
  1. PERSIST key
  2. -- 移除给定 key 的生存时间,将这个 key 从『易失的』(带生存时间 key )转换成『持久的』(一个不带生存时间、永不过期的 key )。
  3. -- 返回值:
  4. -- 当生存时间移除成功时,返回 1 .
  5. --如果 key 不存在或 key 没有设置生存时间,返回 0
复制代码
RANDOMKEY
  1. RANDOMKEY
  2. -- 从当前数据库中随机返回(不删除)一个 key
  3. -- 返回值:
  4. -- 当数据库不为空时,返回一个 key
  5. -- 当数据库为空时,返回 nil
复制代码
RENAME
  1. RENAME key newkey
  2. -- 将 key 改名为 newkey 。
  3. -- 当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
  4. -- 当 newkey 已经存在时, RENAME 命令将覆盖旧值。
  5. -- 返回值:
  6. -- 改名成功时提示 OK ,失败时候返回一个错误。
复制代码
RENAMENX
  1. RENAMENX key newkey
  2. -- 当且仅当 newkey 不存在时,将 key 改名为 newkey
  3. -- 当 newkey 存在时,返回一个0
  4. -- 返回值:
  5. -- 修改成功时,返回 1
  6. -- 如果 newkey 已经存在,返回 0
复制代码
MIGRATE
  1. MIGRATE host port key destination-db timeout [COPY] [REPLACE]
  2. -- 将 key 原子性地从当前实例传送到目标实例的指定数据库上,一旦传送成功, key 保证会出现在目标实例上,而当前实例上的 key 会被删除
  3. -- 这个命令是一个原子操作,它在执行的时候会阻塞进行迁移的两个实例,直到以下任意结果发生:迁移成功,迁移失败,等到超时
  4. -- 命令的内部实现是这样的:它在当前实例对给定 key 执行 DUMP 命令 ,将它序列化,然后传送到目标实例,目标实例再使用 RESTORE 对数据进行反序列化,并将反序列化所得的数据添加到数据库中;当前实例就像目标实例的客户端那样,只要看到 RESTORE 命令返回 OK ,它就会调用 DEL 删除自己数据库上的 key
  5. -- timeout 参数以毫秒为格式,指定当前实例和目标实例进行沟通的最大间隔时间。这说明操作并不一定要在 timeout 毫秒内完成,只是说数据传送的时间不能超过这个 timeout 数
  6. -- 可选项:
  7. -- COPY :不移除源实例上的 key
  8. -- REPLACE :替换目标实例上已存在的 key
  9. -- 返回值:迁移成功时返回 OK ,否则返回相应的错误。
复制代码
MOVE
  1. MOVE key db
  2. -- 将当前数据库的 key 移动到给定的数据库 db 当中。
  3. -- 如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。
  4. -- 因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive)。
  5. -- 返回值:移动成功返回 1 ,失败则返回 0 。
复制代码
String

SET
  1. SET key value [EX seconds] [PX milliseconds] [NX|XX]
  2. -- 将字符串值 value 关联到 key 。
  3. -- 如果 key 已经持有其他值, SET 就覆写旧值,无视类型。
  4. -- 对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。
  5. -- 可选参数
  6. -- 从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改:
  7. -- EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。
  8. -- PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。
  9. -- NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value
  10. -- XX :只在键已经存在时,才对键进行设置操作。
  11. -- 返回值:
  12. -- 在 Redis 2.6.12 版本以前, SET 命令总是返回 OK 。
  13. -- 从 Redis 2.6.12 版本开始, SET 在设置操作成功完成时,才返回 OK 。
  14. -- 如果设置了 NX 或者 XX ,但因为条件没达到而造成设置操作未执行,那么命令返回空批量回复(NULL Bulk Reply)
  15. -- 对不存在的键进行设置
  16. redis 127.0.0.1:6379> SET key "value"
  17. OK
  18. redis 127.0.0.1:6379> GET key
  19. "value"
  20. -- 对已存在的键进行设置
  21. redis 127.0.0.1:6379> SET key "new-value"
  22. OK
  23. redis 127.0.0.1:6379> GET key
  24. "new-value"
  25. -- 使用 EX 选项
  26. redis 127.0.0.1:6379> SET key-with-expire-time "hello" EX 10086
  27. OK
  28. redis 127.0.0.1:6379> GET key-with-expire-time
  29. "hello"
  30. redis 127.0.0.1:6379> TTL key-with-expire-time
  31. (integer) 10069
  32. -- 使用 PX 选项
  33. redis 127.0.0.1:6379> SET key-with-pexpire-time "moto" PX 123321
  34. OK
  35. redis 127.0.0.1:6379> GET key-with-pexpire-time
  36. "moto"
  37. redis 127.0.0.1:6379> PTTL key-with-pexpire-time
  38. (integer) 111939
  39. -- 使用 NX 选项
  40. redis 127.0.0.1:6379> SET not-exists-key "value" NX
  41. OK      -- 键不存在,设置成功
  42. redis 127.0.0.1:6379> GET not-exists-key
  43. "value"
  44. redis 127.0.0.1:6379> SET not-exists-key "new-value" NX
  45. (nil)   -- 键已经存在,设置失败
  46. redis 127.0.0.1:6379> GEt not-exists-key
  47. "value" # 维持原值不变
  48. -- 使用 XX 选项
  49. redis 127.0.0.1:6379> EXISTS exists-key
  50. (integer) 0
  51. redis 127.0.0.1:6379> SET exists-key "value" XX
  52. (nil)   -- 因为键不存在,设置失败
  53. redis 127.0.0.1:6379> SET exists-key "value"
  54. OK      -- 先给键设置一个值
  55. redis 127.0.0.1:6379> SET exists-key "new-value" XX
  56. OK      -- 设置新值成功
  57. redis 127.0.0.1:6379> GET exists-key
  58. "new-value"
  59. -- NX 或 XX 可以和 EX 或者 PX 组合使用
  60. redis 127.0.0.1:6379> SET key-with-expire-and-NX "hello" EX 10086 NX
  61. OK
  62. redis 127.0.0.1:6379> GET key-with-expire-and-NX
  63. "hello"
  64. redis 127.0.0.1:6379> TTL key-with-expire-and-NX
  65. (integer) 10063
  66. redis 127.0.0.1:6379> SET key-with-pexpire-and-XX "old value"
  67. OK
  68. redis 127.0.0.1:6379> SET key-with-pexpire-and-XX "new value" PX 123321
  69. OK
  70. redis 127.0.0.1:6379> GET key-with-pexpire-and-XX
  71. "new value"
  72. redis 127.0.0.1:6379> PTTL key-with-pexpire-and-XX
  73. (integer) 112999
  74. -- EX 和 PX 可以同时出现,但后面给出的选项会覆盖前面给出的选项
  75. redis 127.0.0.1:6379> SET key "value" EX 1000 PX 5000000
  76. OK
  77. redis 127.0.0.1:6379> TTL key
  78. (integer) 4993  -- 这是 PX 参数设置的值
  79. redis 127.0.0.1:6379> SET another-key "value" PX 5000000 EX 1000
  80. OK
  81. redis 127.0.0.1:6379> TTL another-key
  82. (integer) 997   -- 这是 EX 参数设置的值
复制代码
GET
  1. GET key
  2. -- 返回 key 所关联的字符串值
  3. -- 如果 key 不存在那么返回特殊值 nil
  4. -- 假如 key 储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值
  5. -- 返回值:
  6. -- 当 key 不存在时,返回 nil,否则,返回 key 的值
  7. -- 如果 key 不是字符串类型,那么返回一个错误
  8. -- 对不存在的 key 或字符串类型 key 进行 GET
  9. redis> GET db
  10. (nil)
  11. redis> SET db redis
  12. OK
  13. redis> GET db
  14. "redis"
  15. -- 对不是字符串类型的 key 进行 GET
  16. redis> DEL db
  17. (integer) 1
  18. redis> LPUSH db redis mongodb mysql
  19. (integer) 3
  20. redis> GET db
  21. (error) ERR Operation against a key holding the wrong kind of value
复制代码
MSET
  1. MSET key value [key value ...]
  2. -- 同时设置一个或多个 key-value 对。
  3. -- 如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。
  4. -- MSET 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况,不可能发生。
  5. redis> MSET date "2012.3.30" time "11:00 a.m." weather "sunny"
  6. OK
  7. redis> MGET date time weather
  8. 1) "2012.3.30"
  9. 2) "11:00 a.m."
  10. 3) "sunny"
  11. -- MSET 覆盖旧值例子
  12. redis> SET google "google.hk"
  13. OK
  14. redis> MSET google "google.com"
  15. OK
  16. redis> GET google
  17. "google.com"
复制代码
MGET
  1. MGET key [key ...]
  2. -- 返回所有(一个或多个)给定 key 的值。
  3. -- 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败。
  4. -- 返回值:一个包含所有给定 key 的值的列表。
  5. edis> SET redis redis.com
  6. OK
  7. redis> SET mongodb mongodb.org
  8. OK
  9. redis> MGET redis mongodb mysql
  10. 1) "redis.com"
  11. 2) "mongodb.org"
  12. 3) (nil)
复制代码
GETSET
  1. GETSET key value
  2. -- 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
  3. -- 当 key 存在但不是字符串类型时,返回一个错误。
  4. -- 返回值:
  5. -- 返回给定 key 的旧值。
  6. -- 当 key 没有旧值时,也即是, key 不存在时,返回 nil 。
  7. redis> GETSET db mongodb    -- 没有旧值,返回 nil
  8. (nil)
  9. redis> GET db
  10. "mongodb"
  11. redis> GETSET db redis      -- 返回旧值 mongodb
  12. "mongodb"
  13. redis> GET db
  14. "redis"
复制代码
APPEND
  1. APPEND key value
  2. -- 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
  3. -- 如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
  4. -- 返回值:追加 value 之后, key 中字符串的长度。
复制代码
DECRBY
  1. DECRBY key decrement
  2. -- 将 key 所储存的值减去减量 decrement 。
  3. -- 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。
  4. -- 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
  5. -- 本操作的值限制在 64 位(bit)有符号数字表示之内。
  6. DECR key
  7. -- 将 key 中储存的数字值减一
  8. -- 返回值:减去 decrement 之后, key 的值。
复制代码
INCRBY
  1. INCRBY key increment
  2. -- 将 key 所储存的值加上增量 increment 。
  3. -- 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。
  4. -- 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
  5. -- 本操作的值限制在 64 位(bit)有符号数字表示之内。
  6. INCR key
  7. -- 将 key 中储存的数字值增一
  8. -- 返回值:加上 increment 之后, key 的值。
复制代码
GETRANGE
  1. GETRANGE key start end
  2. -- 返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
  3. -- 负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2 表示倒数第二个,以此类推。
  4. -- GETRANGE 通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。
  5. -- 返回值:截取得出的子字符串。
复制代码
STRLEN
  1. STRLEN key
  2. -- 返回 key 所储存的字符串值的长度
  3. -- 当 key 储存的不是字符串值时,返回一个错误
  4. -- 返回值:
  5. -- 字符串值的长度
  6. -- 当 key 不存在时,返回 0
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

tsx81429

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表