redis实战学习笔记一

toc

介绍

以下是介绍基于官网介绍总结而来:
redis是一个高效的基于内存的key-value数据库,可以用作数据库、缓存、消息代理,redis提供拥有8种数据结构,其中有基本类型5种:字符串string、哈希hash、列表list、集合set、有序集合zset,以及3种特殊类型:bitmap、hyperloglog、geospatial index、stream。redis具有内置的复制、lua脚本、lru淘汰、事务、不同级别磁盘持久化、通过哨兵sentinel和自动分区cluster提供高可用性。

与其他数据库对比

基本数据类型简介

字符串

介绍

redis字符串是由字节组成的序列,redis字符串能存储:
1. 字节串(字节数组)
2. 整数(取值范围与系统长整型相同,有需要时整数会转换为浮点)
3. 浮点(IEEE54标准双精度浮点double)

常用命令

获取、设置、删除


自增自减

  • 当用户存储的字符串可被解释为十进制整数或浮点数时,用户可以对字符串进行incr和decr操作
  • 当用户对不存在的或保存了空串的执行自增或自减操作。键对应的值会被初始化0,再进行自增或自减
  • 当被自增或自减操作的字符串无法被解释为整数或浮点时,redis将返回一个错误

    子串、二进制处理
    redis支持对字节串中的某一部分内容进行读取或写入

    命令补充
命令 描述补充
append 当key不存在时,append相当于set;返回值为追加后字符串的长度
getrange 当key不存在或start大于end或start超出范围时,返回空串;start与end可以为负,表示从后往前数,-1为最后一个字符,-2为倒数第2个...;取值时包括start与end在内;start在范围内,end在范围外时,返回start到末尾元素组成的子串
setrange 当offset大于原字符串长度度时,会以'x00'填充;返回值为操作后字符串长度
getbit 当key不存在或offset大于字符串长度时,返回0
setbit 当key不存在时,会生成一个长度大于offset的新串,再在offset处进行set,offset外的位置被填充为0;offset大于原串时会自动扩容,offset外的位置被填充为0;返回原串offset存储的位
bitcount start与end可以为负,表示从后往前数,-1为最后一个字符,-2为倒数第2个...;取值时包括start与end在内; 当key不存在或start大于end时或start超出范围时,返回0;start范围内,end范围外,返回start到末尾的二进制1
bitop 当运算时not只能接受一个key(ERR BITOP NOT must be called with a single source key),当与空串或较短的串做运算时,缺少的部分被视作0;返回值为dest-key的长度(字符个数,非二进制个数)




列表

介绍

redis中的列表是字符串列表,用户存储多个字符串,存储的字符串可以相同
列表允许用户从序列的两端推入或者弹出元素、获取元素,执行各种常见的列表操作

常用命令

增删查

命令补充

命令 描述补充
rpush/lpush 当可以不存在时,会创建一个空列表后再执行操作,返回添加后列表元素个数
rpop/lpop key不存在时,返回nil
lindex key不存在时或index超出范围时,返回nil,index为-1表示最后一个元素
lrange 当key不存在或start大于end或start超出列表范围时,返回空列表;start与end为负表示从后往前数;取值时包括start与end在内;start在范围内,end在范围外时,返回start到末尾的元素
ltrim 当start大于end或start超出范围时,列表将会被清空;start与end为负表示从后往前数;start在范围内,end在范围外时,保留start到末尾的元素





阻塞式弹出、在列表间移动元素
对于阻塞弹出命令和弹出并推入命令,最常见的用例就是消息传递(messaging)和任务队列(task queue)的开发

命令补充

命令 描述补充
blpop/rpop 全部key都不存在时,将被阻塞到超时,并返回nil,或阻塞到其他客户端往等待的key推入数据;等待成功返回含弹出元素的key以及被弹出元素的列表
rpoplpush 为原子指令,如果source不存在,返回nil并不会执行任何操作;如果source与dest相同,表尾的元素将会移动到表头


集合

介绍

redis中的集合以无序的方式来存储各不相同的字符串,通过hash保证存储的字符串唯一,集合中存储的元素只有键(member)没有值
用户可以快速地对集合执行添加元素、移除元素以及检查一个元素是否存在于集合里的操作,或查看集合中所有的元素,以及对多个集合执行交集运算、并集运算和差集运算
注:查看集合中所有元素的smembers命令在元素多的时候很慢,慎用

常用命令

增删查

命令补充

命令 描述补充
sadd 当key不存在时,会创建一个集合;当集合中存在item时,item将会被忽略
sismember item存在于集合key时,返回1,key不存在或item不在key中返回0
spop 当key不存在或key为空集合时,返回nil
smove 原子指令;当source不包含item时,不会执行任何操作,并返回0;当dest已经含item时,移除source中的item,返回1



交集、并集、差集计算
先来个图复习下概念


命令补充

命令 描述补充
sdiff 不存在的key会被视为空集合
sdiffstore 不存在的key会被视为空集合;如果dest已经存在,则新结果将覆盖dest;dest可以是 key本身;返回值为dest中元素个数
sinter 不存在的key视为空集合
sinterstore 不存在的key视为空集合;若dest存在则被覆盖;dest可以是key本身;返回dest元素个数
sunion 不存在的key视为空集合
sunionstore 不存在的key视为空集合;若dest存在则被覆盖;dest可以是key本身;返回dest元素个数



哈希表

介绍

哈希表存储多个键值对(或者说域-值对)的映射,在键值对中,键是唯一的,值可以是字符串或数值,非常适用于将一些相关的数据存储在一起

常用命令

增删查改


命令补充

命令 描述补充
hget/hmget 若key不存在或field不存在,返回nil;hmget返回序号(1开始)与field对应的value
hset/hmset 若key不存在将会创建一个哈希表,再执行操作;当field已存在,对应的value将会被覆盖;新域值对关联成功,hset返回1,hmset返回ok,域值对被更新,hset返回0,hmset返回ok
hlen key不存在返回0
hgetall 返回值以field、value形式排列,返回长度为2倍hlen





高级查改

命令补充

命令 描述补充
hexists key不存在或field不存在,返回0,否则返回1
hkeys/hvals 当key不存在返回空hash表
hgetall 返回值以field、value形式排列,返回长度为2倍hlen
hincrby 增量为负可做减法;若key不存,则创建hash表再执行操作;如field不存在,创建field-value关联,并初始value为0,再执行操作;field对应的value必须为整数,浮点都不行;返回操作后的value
hincrbyfloat 增量为负可做减法;若key不存,则创建hash表再执行操作;如field不存在,创建field-value关联,并初始value为0,再执行操作;field对应的value必须可以解释为浮点;返回操作后的value

如果哈希表包含的域值对非常多,应该先使用hkeys取出全部field,再通过hget一个个取出值,避免一次性取出太多数据阻塞redis server

有序集合

介绍

有序集合存储成员与分值的映射,分值是浮点类型,成员必须唯一,分值可以重复,有序集合根据分值大小,从小到大排序,有序集合时redis中唯一既可以通过成员访问元素,又可以通过分值及分值的排列顺序来访问元素的结构

常用命令

增删查改

命令补充

命令 描述补充
zadd key不存在则创建空有序集合再执行操作,返回新添加个数;member已存在,则更新对应score值,并更新member的排名,返回0
zincrby 增量为负可做减法;若key或member不存在时,类似zadd的行为,只是返回值有区别;socre必须可解释为浮点类型;score变化时,member的排序名也会进行相应变动;返回新socre
zcount 计数时包含score等于min与max的成员
zrank 最小rank为0;当member不在有序集合key中时,返回nil
zscore 当member不在有序集合key中时,返回nil
zrange 相同score的member按字典序排列;当key不存在或start大于end或start超出范围时,返回空列表;start与end可以为负,表示从后往前数,-1为最后一个字符,-2为倒数第2个...;取值时包括start与end在内;start在范围内,end在范围外时,返回start到末尾的列表






范围型数据获取、删除、并集、交集

命令补充

命令 描述补充
zrevrank 与zrank相差无几,只是排序方式相反
zrevrange 与zrange相差无几,只是排序方式相反
zrangebyscore 与zrange相似,只是由判断index变成了score,可选参数limt offset count 与某些sql一致,min与max可以是-inf与+inf;可以使用左括号(来将闭区间变为开区间
zremrangebyrank 当key不存在或start大于end或start超出范围时,返回0;start与end可以为负,表示从后往前数,-1为最后一个字符,-2为倒数第2个...;删除时包括start与end在内;start在范围内,end在范围外时,删除start到末尾的列表;返回成功删除的个数
zinterstore/zunionstore key的数量必须由key-count指定;交/并集结果被存到dest,dest存在则被覆盖;可与set一起使用,set的score视为1;可选weight表做交/并集之前各keyscore的扩大倍数,aggregate表结果集中的score是全部key之和或是最大/小score;返回dest个数


并集、交集计算图例:
aggregate为sum:

aggregate为min:





原创不易,转载请注明出处,谢谢
原文地址:https://www.cnblogs.com/Keeping-Fit/p/14310959.html