redis笔记&&redis入门指南读书笔记

1.为什么我们需要redis? 因为redis是在我们的内存中实现缓存的  因此读取速率比在硬盘中的MySQL快上很多 在某些特定的场景 几秒钟信息量特别大的时候尤其用的多 对于关系型数据库,即使做到了分库分表,它的读写速度也只能达到1W+ 很显然不能适用于高并发的场景   而Reids这类非关系型数据库,读写速度可以达到10W+每秒,于是常用作缓存,是能够顶住大部分场景的冲击的。   2.关系型数据库和非关系型数据库 关系型数据库:即我们常用的MySQL等数据库,它的语言被称为SQL(structured query language) 我们知道关系型数据库的内部模型其实就是一个二维表,之所以它们被称为关系数据库而不是表数据库 就是因为在数据库中:关系比表更加重要   非关系型数据库: noSQL(not only SQL) 也有人称它为文档型数据库 比如我们对不同的表增加同一个ID标签,就能在查询的时候进行关联   3.Redis(Remote Dictionary Server 远程字典服务器 )是一个由C语言编写的,开源的高性能非关系型的键值对数据库,它以字典结构存储数据。并允许其他应用通过TCP协议读写字典中的内容。   4.Redis支持的键值对数据类型如下
  • 字符串 string
  • 散列 list
  • 列表 list
  • 集合 
这种存储结构域MySQL等关系数据库的二维表形式的存储结构有很大的差异。举个例子 post["title"]="Hello World" post["content"]= "Blablabla..." 5.内存存储与持久化 Redis数据库中的所有数据都存储在内存中,由于内存的读写速度远快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库,不过在程序退出后内存中的数据会丢失,不过redis提供了持久化的支持,即可以将内存中的数据异步写入到硬盘中,同时不影响继续提供服务   6.启动服务端 redis-server.exe  启动客户端 重新开一个cmd 双击redis-cli.exe程序 或者 redis-cli.exe -h 127.0.0.1 -p 6379  //服务器地址和端口号默认 停止redis 考虑到Redis有可能正在将内存中的数据同步到硬盘中,强行终止Redis进程可能会导致数据丢失,正确停止Redis的方式应该是向Redis发送SHUTDOWN命令 reids-cli SHUTDOWN   7.redis配置: config set config_setting_name new_config_value    //栗子 //config set loglevel "notice"   8.Redis数据类型 1.string //redis最基本的数据类型,是一种键值对类型 特点:二进制安全,即reids的string可以包含任何数据,比如jpg图片或者序列化的对象,最大能存储512MB的值   栗子: redis 127.0.0.1:6379>SET mystring "xiaocheng" OK redis 127.0.0.1:6379>GET mystring "xiaocheng"   2.Hash  redis hash是一个键值对集合。其底层是一个string类型的filed和value的映射表,hash特别适合用于存储对象。   栗子: redis 127.0.0.1:6379> HMSET runoob field1 "Hello" field2 "World""OK" redis 127.0.0.1:6379> HGET runoob field1 "Hello" redis 127.0.0.1:6379> HGET runoob field2 "World" 在这个例子中使用了redis的HMSET和HGET命令,HMSET设置了两个field=>value对,HGET获取对应filed对应的value 每个hash可以存储2的32次方-1键值对 大概有四十多亿   3.List list是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)   栗子: redis 127.0.0.1:6379> DEL runoob redis 127.0.0.1:6379> lpush runoob redis (integer) 1 redis 127.0.0.1:6379> lpush runoob mongodb (integer) 2 redis 127.0.0.1:6379> lpush runoob rabbitmq (integer) 3 redis 127.0.0.1:6379> lrange runoob 0 101) "rabbitmq"2) "mongodb"3) "redis"   上面的栗子使用了lpush添加元素 lrange加上左右边界 就能够遍历从左边界到右边界的list list最多也可存储2的32次方-1个元素     4.Set redis的set是string类型的无需集合,通过哈希表实现,所以添加,删除,查找的复杂度都是O(1),因为是hash表,所以set里的元素具有唯一性   栗子: redis 127.0.0.1:6379> DEL runoob redis 127.0.0.1:6379> sadd runoob redis (integer) 1 redis 127.0.0.1:6379> sadd runoob mongodb (integer) 1 redis 127.0.0.1:6379> sadd runoob rabbitmq (integer) 1 redis 127.0.0.1:6379> sadd runoob rabbitmq (integer) 0 redis 127.0.0.1:6379> smembers runoob     1) "redis"2) "rabbitmq"3) "mongodb"   以上示例中rabbitmq添加了两次,但因为set中元素的唯一性,所以第二次添加的元素将被忽略   sadd:添加set中的元素 smembers:获取set中的元素   set中的最大成员数也为2的32次方-1   5.zset(sorted set:有序集合) 和set一样,string类型元素的集合,且不允许重复的成员。 不同:每个元素都会关联一个double类型的分数,redis正式通过分数来为集合中的成员进行从小到大的排序 zset的成员是唯一的,但分数却可以重复   栗子: redis 127.0.0.1:6379> zadd runoob 0 redis (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 mongodb (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 rabbitmq (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 rabbitmq (integer) 0 redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 10001) "mongodb"2) "rabbitmq"3) "redis"   zadd:添加元素 第一个值是分数 第二个是string类型的值 zrangebyscore:通过分数进行排序输出 后面两个参数是分数的范围 如果两个string分数一致的话 那么就通过string的排序进行先后输出     9.redis命令: redis命令需要作用在redis服务上执行操作,要在redis服务上进行操作就需要一个redis客户端。   redis客户端: redis-cli   redis服务端: redis-server.exe   11.redis key redis键的基本语法如下: command keyname   示例: redis 127.0.0.1:6379> SET runoobkey redis OK redis 127.0.0.1:6379> DEL runoobkey (integer) 1   //以上示例 set是一个命令 runoobkey是一个键 redis是值 del也是命令   第一条语句是将runoobkey的值设置为redis 第二条语句是删除runoobkey键  //如果成功了则输出(integer) 1 否则输出(integer) 0   最常用的操作redis key的命令 del key //在key存在时删除key exists key //检查给定key是否存在 rename key newkey //重命名key type key //返回key所存储的值的类型 12.redis string  redis string 相关命令用于管理redis string的值,基本语法如下: redis 127.0.0.1:6379>command key_name   栗子: redis 127.0.0.1:6379> SET runoobkey redis OK redis 127.0.0.1:6379> GET runoobkey "redis"   常用redis string commond: set key value //设置指定key的值 get key //获取指定key的值 setnx key value //只有在key不存在时设置key的值 strlen key //返回key所存储的字符串值的长度     13.redis hash redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象   栗子: 127.0.0.1:6379>  HMSET runoobkey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000 OK 127.0.0.1:6379>  HGETALL runoobkey 1) "name"2) "redis tutorial"3) "description"4) "redis basic commands for caching"5) "likes"6) "20"7) "visitors"8) "23000"   在上述的栗子中,我们设置了redis的一些描述信息:  name:2  description:redis basic commands for caching likes: 20 visitior:23000  //注意存储的都是字符串类型 在redis里面没有整数类型   redis hash command:   hdel key field1 //删除一个hash字段 hdel key all //删除整个hash表 hget key field //获取存储在hash表中特定字段的值 hgetall key //获取在哈希表中指定key的所有字段和值 hkeys key //获取哈希表中的所有字段 hlen key//获取哈希表中字段的数量 hmset key field1 field2//获取所有给定字段的值 hmset key field1 value1 field2 value2 //同时 hvals key//获取哈希表中所有值   14.redis list redis list是简单的字符串列表,按照插入顺序排序,可以添加一个元素到头部或者尾部   一个列表最多可以包含2的32次方-1个元素   栗子: redis 127.0.0.1:6379> LPUSH runoobkey redis (integer) 1 redis 127.0.0.1:6379> LPUSH runoobkey mongodb (integer) 2 redis 127.0.0.1:6379> LPUSH runoobkey mysql (integer) 3 redis 127.0.0.1:6379> LRANGE runoobkey 0 10     1) "mysql"2) "mongodb"3) "redis" 在以上示例中 使用了lpush将三个值插入到了名为runoobkey的列表当中 并通过lrange key 0 10 把runnoobkey中下表从0到10的值全部读取出来   redis list command: blpop key timeout //移除并获取列表的第一个元素 brpop key timeout //移除并获取列表的最后一个元素 lindex key index //通过索引获取列表中的元素 llen key//获取列表长度 lpush key value1 (value2) //将一个或多个值插入到列表头部 lpushx key value //将一个值插入到已存在的列表头部 lrange key start stop//获取列表指定范围内的元素 del key//删除列表   15.redis set  redis的set是string类型的无需集合,集合成员是唯一的,集合对象的编码可以是intset或者hashtable Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1) 最大的成员数也是2的32次方-1     栗子: redis 127.0.0.1:6379> SADD runoobkey redis (integer) 1 redis 127.0.0.1:6379> SADD runoobkey mongodb (integer) 1 redis 127.0.0.1:6379> SADD runoobkey mysql (integer) 1 redis 127.0.0.1:6379> SADD runoobkey mysql (integer) 0 redis 127.0.0.1:6379> SMEMBERS runoobkey     1) "mysql"2) "mongodb"3) "redis"   //在上面的demo中我们通过sadd命令向 key 为runoobkey的set中插入了三个元素,然后使用smembers读取出了key里面的值   redis set command: sadd key member1【member2】  //像集合中添加一个或者多个成员 scard key //获取集合中的成员数 sismember key member //判断member元素是否是集合key的成员 smembers key //返回集合中的所有成员 spop key //移除并返回集合中的一个随机元素 del key //删除一个集合   16.redis zset redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员 不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。 有序集合的成员是唯一的,但score却可以重复 有序集合也是通过哈希表实现的,所以添加 删除 查找的复杂度都是O(1)   栗子: redis 127.0.0.1:6379> ZADD runoobkey 1 redis (integer) 1 redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb (integer) 1 redis 127.0.0.1:6379> ZADD runoobkey 3 mysql (integer) 1 redis 127.0.0.1:6379> ZADD runoobkey 3 mysql (integer) 0 redis 127.0.0.1:6379> ZADD runoobkey 4 mysql (integer) 0 redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES     1) "redis"2) "1"3) "mongodb"4) "2"5) "mysql"6) "4"   //在上面的demo 中我们通过zadd命令向 key为runoobkey的zset中添加元素 其中 数字是元素的score 字符串是元素的value    redis zset command: zadd key score1 member1 (score2 member2) //向有序集合添加一个或者多个成员 zcard key //获取有序集合的成员数 zcountkeystop (withscores) //通过索引区间返回有序集合指定区间内的成员 zrangebyscore key min max (withscores) //通过分数返回有序集合指定区间内的成员 zrank key member //返回有序集合中指定成员的索引 zrem key member (member2) //移除有序集合中的一个或者多个成员 zscore key member//返回有序集合中,成员的分数值 del key//删除一个有序集合   17.redis HyperLogLog redis在2.8.9版本添加了HyperLogLog结构 它是用来做技术统计的算法 优点:在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定的,而且很小 在redis里,每一个HyperLogLog只需要花费12KB内存,就可以计算接近2的64次方个不同元素的基数。 这和计算基数时,元素越多耗费内存就越多的集合形成了鲜明的对比。 但是因为HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能像集合那样返回输入的各个元素     基数:一个数据集内不重复元素的个数 比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。   redis HyperLogLog command: pfadd key element (element) //添加指定元素到HyperLogLog中 pfcount key //返回给定HyperLogLog的基数估计值 pfmerge destkey sourcekey (sourcekey) //将多个HyperLogLog合并为一个 18.redis发布订阅 redis发布订阅是一种消息通信模式,发送者(pub)发送消息,订阅者(sub)接收消息 redis客户端可以订阅任意数量的频道 demo: 第一个redis-cli: redis 127.0.0.1:6379> SUBSCRIBE runoobChat     Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "redisChat" 3) (integer) 1   第二个redis-cli: redis 127.0.0.1:6379> PUBLISH runoobChat "Redis PUBLISH test"     (integer) 1     redis 127.0.0.1:6379> PUBLISH runoobChat "Learn redis by runoob.com"     (integer) 1     # 订阅者的客户端会显示如下消息 1) "message" 2) "runoobChat" 3) "Redis PUBLISH test" 1) "message" 2) "runoobChat" 3) "Learn redis by runoob.com"   //第一个cli的subscribe命令表示订阅runoobChat频道 第二个cli输入publish命令表示往runoobChat频道发送消息 这个时候第一个cli就会看见第二个cli客户端发送的测试消息   redis pub/sub command:   psubscribe pattern //订阅一个或者多个频道 pubsub subcommand //查看订阅与发布系统状态 publish channel message //将信息发送到指定的频道 punsubscribe pattern1 (pattern2) //退订所有给定模式的频道 subscribe channel (channel) //订阅给定一个或多个频道的信息 unsubscribe channel //退订给定的频道   19.redis事务: redis事务可以一次执行多个命令,并且带有一下三个重要的保证:
  • 批量操作在发送exec命令前被放入队列缓存
  • 收到exec命令后进入事务执行,事务中任意命令执行失败,其他的命令依然被执行
  • 在事务执行过程,其他客户端提交的命令请求不会被插入到事务执行命令序列中
  一个事务从开始到执行会经历以下三个阶段:
  • 开始事务
  • 命令入队
  • 执行事务
单个redis命令的执行是原子性的,但redis没有在事物上增加任何维持原子性的机制,所以redis事务的执行兵不是原子性的。   事务可以理解为一个打爆的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。   demo: redis 127.0.0.1:7000> multi OK redis 127.0.0.1:7000> set a aaa QUEUED redis 127.0.0.1:7000> set b bbb QUEUED redis 127.0.0.1:7000> set c ccc QUEUED redis 127.0.0.1:7000> exec1) OK 2) OK 3) OK 如果在set b执行时失败 那么set a 已经执行成功 不会回滚 set c 还会继续执行   redis transaction command: discard//取消事务,放弃执行事务块的所有命令 exec//执行所有事务快的命令 multi//标记一个事务快的开始 unwatch //取消watch命令对key的监视 watch key1 (key2) //监视一个或者多个key 如果在事务执行之前这些key被其他命令改动,那么事务将被打断   20.redis连接 redis connect command: auph password //验证密码是否正确 echo message //打印字符串 ping //查看服务是否运行 quit //关闭当前连接 select index //切换到指定的数据库   21.redis 脚本 redis脚本使用lua解释器来执行脚本。redis 2.6版本通过内嵌支持lua环境,执行脚本的常用命令为EVAL   关于lua:一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序当中,从而为应用程序提供灵活的扩展和定制功能。 应用场景:
  • 游戏开发
  • 独立应用脚本
  • web应用脚本
  • 扩展和数据库插件
  • 安全系统,如入侵检测系统
Eval命令的基本语法: redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]     redis lua command: evla script numkeys key...arg... //执行lua脚本 evalsha sha1 numkeys key //执行lua脚本 script fulsh //从脚本缓存中移除所有脚本 script kill //杀死当前正在运行的lua脚本   22.redis stream 是redis 5.0版本新增加的数据结构 redis stream主要用于消息队列,redis本身使用一个redis发布订阅来实现消息队列的功能,但它有个缺陷就是消息无法持久化,如果出现网络断开,redis宕机等情况,消息就会被抛弃。 简单来说发布订阅(pub/sub)可以粉发消息,但无法记录历史信息   23.redis的缺点:
  • 因为其是存储在内存中的,即使可以持久化,但也容易丢失
  • redis属于kv型非关系型数据库,即只能由k找到v,而不能由v找到k
  • redis过于依靠硬件,即使现在内存价格降低了,但对于redis仍然昂贵
24.go使用mysql 我用的是 "github.com/garyburd/redigo/redis"   其中有conn接口   conn接口的do函数可以执行redis命令,参数和redis-cli命令参数格式一致。       25.在很多框架里面我们能看见args变量,那么它到底是个什么东西呢 它一般是一个字符串变量名,总的来说就是个存放字符串数组用的,是arguments的缩写。   26.redis各种数据类型的应用场合
  •  string:  不知道用什么就用string,因为string是redis中最基本也是最简单的数据类型 
  • hash:存储、读取、修改、删除用户属性
  • list:最新消息排行等功能;消息队列
  • set:共同好友 利用唯一性,统计访问网站的唯一ip
  • sorted set:排行榜 带权重的消息队列
  27.redis常用场景
  • 高并发下的数据缓存,比如在某个场景下,大量日志同时写入数据库会给服务器带来巨大压力,可以先将数据写入redis中,再由redis写入数据库,减轻同时写入压力
  • 热点信息快速显示,如果有一个新闻首页,需要快速显示各栏目前20条热点新闻,如果直接查库的话,在大量用户同时访问下,会同时有很多数据库请求,这时就可以用redis进行优化,在新闻录入时将标题、时间、来源等写入redis中,客户端访问时,可以从内存中一次性取出当天热点新闻列表,极大地提高请求速度和节约了服务器开销
  • 保存会话信息,可以将登录后用户信息缓存入redis并同时设置key过期时间,这样后台api过滤请求时,就可以从内存中读取用户信息,而且redis的过期机制,天然支持用户身份有效期校验,用起来十分方便
  • 统计计数 ,可以用incrby命令统计计数
  • 其他场景:队列、发布订阅等等
  1.redis启动方法:有直接启动和初始化脚本启动两种方式   直接启动: 
  • redis-server
  • redis-server --port 6380 //指定6380端口启动
初始化脚本启动(linux):     2.停止redis 关闭redis的时候可能正在将内存中的数据同步到硬盘中,强行终止redis进程可能会导致数据丢失,正确的停止redsi的方式应该是发送SHUTDOWN命令  
  • redis-cli shutdown
在redis收到shutdown命令后,会先断开所有客户端的连接,然后根据配置执行持久化,最后退出   3.redis客户端登录
  • redis-cli 
  • redis-cli -h 127.0.0.1 -p 6379 //指定服务器和端口号登录
  4.redis数据库:redis默认支持16个数据库,每个数据库对外都是一个从0开始的递增数字命名,客户端和redis连接后默认会自动连接到0号数据库,这些数据库的名字不允许修改,另外redis不支持对于为每个数据库设置不同的密码,所以一个客户端要么能访问全部的数据库,要么一个也访问不了,最重要的是:多个数据库之间并不是完全隔离的。比如FLUSHALL命令可以清空一个Redis实例中所有数据库的数据   5.glob风格通配符格式  
 符号 含义
匹配一个字符
* 匹配任意个字符(包括0个)
【】 匹配括号间的任一字符,可以使用“-”符号表示一个范围,如a[b-d]可以匹配ab\ac\ad
\x 匹配字符x,用于转义符号。如要匹配‘?’ 就需要使用\?
  6.redis命令是不区分大小写的   7.key命令:
  • keys * //遍历redis中所有的键,在键数量较多时会影响性能,不建议在生产环境中使用
  • exists key //判断键是否存在  如果存在返回1 否则返回0 
  • del key [key...] //可以删除一个或者多个键 返回值是删除的键的个数
  • type key //获取键值的数据类型
  • set key  value //赋值
  • get key //取值
  8.字符串类型命令
  • 自增命令 incr key  //当存储的字符串是整数形式时,incr能让当前键值递增,并返回递增之后的值 键值不是整数时redis会报错
  • 如果同时多个客户端连接到redis时可能出现竞态条件(race condition:指一个系统或者进程的输出,依赖于不受控制的时间的出现顺序或者出现时间),例如有两个客户端A和B都要执行incr命令并准备将同一个键的键值增加,结果虽然是对键执行了两次递增操作,但最后以后的键值是增1而不是增2,因为所有的Redis命令都是原子操作(atomic operation)
  • incrby key increment //增加指定的整数
  • decr key //自减命令
  • decrby key decrement//减少指定的整数
  • incrbyfloat key increment //增加指定的浮点数
  • append key value //向尾部增加值
  • strlen key //获取字符串长度
  • mget key [key...]  //与get类似 不过可以获得多个键的键值
  • mset key value [key value...] //与set类似 不过可以同时设置多个键
    9.散列类型命令: 散列:一个key具有多个属性和value 栗子: 一个叫做car的key: car name:BMW car price:500 car time:2021
  • hest key field value //给key的一个field赋值  不区分插入和更新
  • hget key field //取得key的一个field中的值
  • hmset key field value [field value ...] //多个field赋值
  • hmget key field [field..] //多个field取值
  • hgetall key //取所有field的值
  • hexists key field //判断字段是否存在 存在返回1 不存在返回0
  • hsetnx key field value //当字段不存在时赋值
  • hincrby key field increment //给key中的一个字段增加数字
  • hdel key field[field...] //删除多个字段
  • hkeys key //获得所有字段的名字
  • hvals key //获得所有字段值
  • hlen key //获取字段数量
  10.列表类型命令:由双向链表实现 优点:插入和删除速度快 缺点:根据索引查询的速度慢 如果想把列表当成栈 则搭配使用lpush和lpop/rpush和rpop 如果想要把列表当成队列 则搭配使用lpsuh和rpop/rpush和lpop
  • lpush key value [value...] //向列表左侧添加元素
  • rpush key value [value...] //向列表右侧添加元素
  • lpop //左边弹出一个元素
  • rpop //右边弹出一个元素
  • llen key //获得元素个数
  • lrange keys start stop //遍历 从左索引到右索引
  • lrem key count value //删除count个指定为value的值 当count>0 从左边开始删 当count<0 从右边开始删 当count=0 全删
  • lindex key index //获取索引的元素值
  • lset key index value //设置指定索引的元素值
  • ltrim key start end //保留指定片段
  • rpoplpush source destination //将元素从一个列表转移到另一个列表 将source最右侧元素弹出 加入到destination表的最左侧
  • linsert key before|after pivot value //插入元素 首先找到pivot元素 根据第二个参数决定插入到前面还是后面
  11.集合类型命令           13.redis事务 Redis中的事务是一组命令的集合,事务同命令一样都是redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。 事务的原理是将一个属于事务的命令发送给Redis 然后再让redis依次执行这些命令 事务使用方式
  • multi //开启事务
  • .....  //执行命令
  • exec //结束事务
  14.Redis错误处理
  • 语法错误:指令不存在或者命令参数格式错误 这种错误Redis会直接返回错误,哪怕有一部分正确的命令,redis也不会执行
  • 运行错误  指在运行过程中出现的错误,比如使用散列类型命令操作集合类型的键 这种错误在实际执行前是不会发现的 如果事务中的一条命令出现了运行错误 那么事务中的其他命令仍然会继续执行
  • Redis事务没有回滚功能,所以开发者必须在事务执行出错时自行处理错误,这也是得Redis在事物上可以保持简洁和高效
lpop key //左边 15.WATCH命令 Watch命令可以监控一个键或多个键  一旦其中一个键被修改 之后的事务就不会执行 监控可以持续到EXEC命令执行   UNWATCH:取消监控   16.过期时间命令
  • expire key seconds  //设置过期时间
  • ttl key //查看还有多久到过期时间
  • persist key //取消键的过期时间 即让键恢复为永久
  • pexpire key millisecond //设置键的过期时间 毫秒级别
  17.排序命令:sort 
  • sort key //对数字进行排序 什么类型都可以 如果是对zset排序 那么会忽略元素都分数
  • sort key alpha //按照字典顺序排序非数字元素
       
上一篇:Python爬取网易云歌单


下一篇:每日python练习6--求两个数的最大公约数和最小公倍数