浅谈Redis7基础命令

Redis基本命令

 

Ping命令 心跳命令

set & get命令

set key value

get key

select命令

切换数据库

dbsize命令

 

flushdb命令

清除当前数据库数据

flushell命令

清除所有数据库数据

退出命令

quit、exit

关闭redis

redis-cli shutdown

shutdown

查看进程及端口号

#查看redis进程

pa axu | grep redis

#查看所有端口使用情况

netstat -ntulp |grep redis

Key命令

Redis中存储的数据整体是一个Map,其key为String类型,value可以是String、Hash、List、Set等类型。

格式:keys pattern

功能:查询所有符合条件的pattern的key,pattern为正则表达式。

Keys查询速度非常快,但在一个大的数据库中使用它可能会阻塞当前服务器的服务。生产环境中一般不使用,使用scan命令代替。

keys * 查询所有

 

浅谈Redis7基础命令_第1张图片

keys h* 查询以h开头

 

    

查询是否存在EXISTS

 

删除DEL

 

浅谈Redis7基础命令_第2张图片

重命名RENAME

 

浅谈Redis7基础命令_第3张图片

MOVE移动到另一个数据库

将h20移动到3号库

TYPE查看类型

格式:TYPE key

返回key所存储的值的类型

类型:none(key不存在)、String(字符串)、list(列表)、set(集合)、zset(有序表)、hash(哈希表)

  

EXPIRE 与EXEPIRE设置生存时间

格式:EXPIRE key seconds

EXPIRE秒

PEXPIRE毫秒

TTL 和PTTL命令

TTL查看key的剩余生存时间

Key不存在时,返回-2。

Key存在但没设置剩余生存时间时,返回-1。

TTL秒

PTTL毫秒

 

PERSIST命令

格式:PERSIST key

将key的生存时间转换为持久的

转换成功返回1;

若key不存在或key没有设置生存时间,则返回0;

RANDOMKEY命令

格式:RANDOMKEY

从当前数据库中随机删除一个key。

删除成功返回 key

库为null时返回 nil

浅谈Redis7基础命令_第4张图片

SCAN命令

scan命令代替keys

     

Value命令-String

Redis存储数据的Value可以是一个String类型数据。String类型的Value是Redis中最基本,最常见的类型。

String类型的Value可以存放任意类型数据。

String类型的Value最大是512M。

set

格式:SET key value

EX:设置过期时间,秒

PX:设置过期时间,毫秒

NX:指定的key不存在才会设置成功。等价于SETNX。

XX:指定的key必须存在,相当于更新value值。

 

setex

setex n1 300 hello 等同于set n1 hello ex 300

setnx

setnx name hello 等同于 set name hello NX

getset

mset

mset key1 value1 key2 value2 key3 value3

浅谈Redis7基础命令_第5张图片

msetnx

mget

Append追加

incr 自增 和 decr自减

浅谈Redis7基础命令_第6张图片

strlen

getrange

格式:getrange key start end

-1表示最后一位

  

setrange

格式:setrange key offset value

Hash型value操作命令

Redis存储数据的Value可以是一个Hash类型。Hash类型也称为Hash表、字典等。

Hash表就是一个映射表Map,也是由键-值对构成,为了与整体的key进行区分,这里的键称为field,值称为value。

Redis的Hash表中的file-value对均为String类型。

Hash类型Value非常四盒存储对象数据。Key为对象名称,value为描述对象属性的Map,对对象属性的修改在Redis中就可以直接完成,其不像String型Value存储对象,那个对象是序列化过的,如序列化为JSON串,对对象属性值的修改需要先反序列化为对象后再修改,修改后再序列化为JSON串写入到Redis。

hset和hmset

格式:hset names name1 zhangsan name2 baoguo

hmset等价于hset

hsetnx

nx:指定的key不存在才会设置成功。等价于SETNX。

 

hget和hmget

浅谈Redis7基础命令_第7张图片

hgetall 、 hkeys 、 hlen 、hvals

浅谈Redis7基础命令_第8张图片

hdel

删除file

hexists

查看是否存在

hincrby

增加

hstrlen

查看field的长度

List型Value操作命令

Redis存储数据的 Value可以是一个 String列表类型数据,即该列表中的每个元素均为ting类型数据,列表中的数据会按照插入顺序进行排序,不过,该列表的底层实际是一个无头节点的双向链表,所以对列表表头与表尾的操作性能较高,但对中问元素的插入与删除的操作的性能相对较差。

lpush 和 rpush

浅谈Redis7基础命令_第9张图片

lrange 和lindex

lrange 元素 开始下标  结束下标  、结束下标:-1表示最后 格式:lrange key start stop

格式:lindex key index

lset 和 rpushx

格式:lset key index element

格式:rpush key element [element ...]

rpushx的x表示必须存在

浅谈Redis7基础命令_第10张图片

linsert和lpop rpop

格式:linsert key BEFORE|AFTER pivot element

格式:lpop key [count]

浅谈Redis7基础命令_第11张图片

 

rpoplpush

格式:rpoplpush source destination

 

浅谈Redis7基础命令_第12张图片

Lrem

格式:lrem key count element

 

Ltrim

格式:ltrim key start stop

保留指定区域

 

浅谈Redis7基础命令_第13张图片

lpush + rpop可以实现队列数据结构效应,先进先出。通过lpush从左侧插入数据,通过rpop右侧取出数据。或rpush+lpop

lpush + brpop可以实现阻塞式消息队列效果。

lpush+lpop可以实现栈数据结构,先进后出。或rpush+rpop

Set型value操作命令

set集合中的元素具有无序性与不可重复性。

应用场景:1、动态黑白名单 2、有限随机数 3、用户画像

sadd 和smembers

格式:sadd key member [member ...

格式:smembers key

 

浅谈Redis7基础命令_第14张图片

sismember

格式:sismember key member

smove

格式:smove source destination member

浅谈Redis7基础命令_第15张图片

srem

格式:srem key member [member ...]

 

浅谈Redis7基础命令_第16张图片

srandmember

srandmember key [count]

随机获取

浅谈Redis7基础命令_第17张图片

spop

浅谈Redis7基础命令_第18张图片

sdiff差集

将相同的元素去掉

格式:sdiff key [key ...]

 

浅谈Redis7基础命令_第19张图片

sdiffstore

格式:sdiffstore destination key [key ...]

将c和cat的差集结果存入result

浅谈Redis7基础命令_第20张图片

sinter 和 sinterstore

sinter key [key ...]

sinterstore destination key [key ...]

浅谈Redis7基础命令_第21张图片

Sunion 和 sunionstore

sunion key [key ...]

sunionstore destination key [key ...]

浅谈Redis7基础命令_第22张图片

有限ZSet型Value操作命令

Redis存储数据的vaue可以是一个有序Set,这个有序set中的每个元素均 String类型。有序set与set的不同之处是,有序Set中的每一个元素都有一个分值 score, Redis会根据score的值对集合进行由小到大的排序。其与set集合要求相同,元素不能重复,但元素的score可以重复。由于该类型的所有命令均是字母z开头,所以该Set也称为Zset

zadd

格式:zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]

浅谈Redis7基础命令_第23张图片

zrange和zrevrange

格式:zrange key start stop

格式:zrevrange key start stop

  

zrangebyscore

格式:zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

 

浅谈Redis7基础命令_第24张图片

zcount 和zcard

格式:zcount key min max

格式:zcard key

  

zscore和zrank

格式:zscore key member

格式:zrank key member

浅谈Redis7基础命令_第25张图片

zincrby

格式:zincrby key increment member

浅谈Redis7基础命令_第26张图片

Zrem和 zremrangebyrank

移除

格式:zrem key member [member ...]

格式:zremrangebyrank key start stop

格式:zremrangebyscore key min max

浅谈Redis7基础命令_第27张图片

浅谈Redis7基础命令_第28张图片

zrangebylex

zrangebylex适用于集合中所有成员具有相同分值的情况。

格式:zrangebylex key min max [LIMIT offset count]

浅谈Redis7基础命令_第29张图片

benchmark测试工具

Redis自带一个benchmark测试工具,用来测试redis的性能,是一个压力测试工具。

浅谈Redis7基础命令_第30张图片

redis-server redis.conf

redis-benchmark -h 127.0.0.1 -p 6369 -c 50 -n 10000 -a password

或 redis-benchmark -c 50 -n 10000 -a password

浅谈Redis7基础命令_第31张图片

浅谈Redis7基础命令_第32张图片

简单动态字符串SDS

Redis的Key和 Value,其基础数据类型都是字符串。例如,Hash型 Value的field与 value的类型、List型、Set型、ZSet型 Value的元素的类型等都是字符串。虽然Redi是使用标准C语言开发的,并没有直接使用C语言中传统的字符串表示,而是自定义了种字符串。这种字符串本身的结构比较简单,但功能却非常强大,称为简单动态字符串Simple Dynamic String,简称SDS。

SDS结构

       SDS不同于字符串。C字符串本身是一个双引号括起来的,以’\0’结尾的字符序列。

SDS是一个结构体,定义在Redis安装目录下的src/sds.h中。

Redis中的字符串并不都是SDS,也会是C字符串。C字符串只会出现在字符串“字面常量”中,并且该字符串不可能发生变更。

struct sdshdr{

  //字节数组,用于保存字符串

  char buf[];

  //buf[]中已使用字节数量,称为SDS

  int len;

  //buf[]中尚未使用的字节数量

  int free;

}

 

 

常用SDS操作函数

sdsnew() 使用指定的C字符串创建一个SDS

sdsempty() 创建一个不包含任何字符串数据的SDS

sdsdup() 创建一个SDS副本

sdsfree() 释放指定的DS

sdsclear() 清空指定SDS的字符串内容

sdslen() 获取指定SDS的已使用空间len值

sdsavail() 获取指定SDS的未使用空间free值

sdsMakeRoomFor() 使指定SDS的free空间增加指定的大小

sdsRemoveFreeSpace() 释放指定SDS的free空间

sdscat() 将指定的C字符串拼接到指定SDS字符串末尾

sdscatsds() 将指定的SDS字符串拼接到指定SDS字符串末尾

sdscpy() 将指定的C字符串拼接到指定SDS中并覆盖原字符串内容

sdsgrouzero() 扩展SDS字符串到指定长度。此扩展是使用空字符’\0’填空

sdsrange() 截取指定范围内的SDS字符串

sdstrim() 在指定SDS中删除所有指定C字符串中出现的所有字符

sdsemp() 对比两个给定的SDS字符串是否相同

sdstolow() 将指定SDS字符串中的所有字母变小写

sdstoupper() 将指定SDS字符串中的所有字母变大写

SDS的优势

C字符串使用Len+1长度的字符数组来表示实际长度为Len的字符串,字符数组最后以空字符\0结尾,表示字符串结束。这种结构简单,但不能满足 Redis对字符串功能性、安全性及高效性等的要求。

防止”字符串长度获取”性能瓶颈

对于C字符串,若要获取其长度,则必须要通过遍历整个字符串才可获取到的。对于超长字符串的遍历,会成为系统的性能瓶颈但,由于sDs结构体中直接就存放着字符串的长度数据,所以对于获取字符串长度需要消耗的系统性能,与字符串本身长度是无关的,不会成为 Redis的性能瓶颈。

保证二进制安全

C字符串中只能包含符合某种编码格式的字符,例如 ASCII UTF-8等,并且除了字符串末尾外,其它位置是不能包含空字符0的,否则该字符串就会被程序误解为提前结束。而在图片、音频、视频、压缩文件、 office文件等二进制数据中以空字符\o作为分隔符的情况是很常见的。故而在C字符串中是不能保存像图片、音频、视频、压缩文件、 office文件等进制数据的。

但SDS不是以空字符"0作为字符串结束标志的,其是通过len属性来判断字符串是否结束的。所以,对于程序处理SDS中的字符串数据,无需对数据做任何限制、过滤、假设只需读取即可。数据写入的是什么,读到的就是什么。

减少内存再分配次数

       SDS采用了空间预分配策略与空间预分配策略是指,每次SDS进行空间扩展时,程序不但为其分配所需的空间,还会为其分配额外的未使用空间,以减少内存再分配次数。而额外分配的未使用空间大小取决于空间扩展后SDS的len属性值。

如果len属性值小于1M,那么分配的未使用空间free的大小与len属性值相同

如果len属性值大于等于1M,那么分配的未使用空间free的大小固定是1M

SDS对于空间释放采用的是惰性空间释放策略。该策略是指,SDS字符串长度如果缩短,那么多出的未使用空间将暂时不释放,而是增加到free中。以使后期扩展SDS时减少内存再分配次数。

如果要释放SDs的未使用空间,则可通过 sdsRemovefreeSpace0函数来释放。

兼容C函数

       Redis中提供了很多的SDS的API,以便用户对Redis进行二次开发。为了能够兼容C函数,SDS的底层组buf[]中的字符串仍以字符串’\0’结尾。

zipList

       zipList,通常称为压缩列表,是一个经过特殊编码的用于存储字符串或整数的双向链表。

其底层数据结构由三部分构造:head、entries、与end。这三部分在内存上是连续存放的。

浅谈Redis7基础命令_第33张图片

Head

zlbytes:占4个字节,用于存放ziplist列表整体数据结构所占的字节数,包括bytes本身的长度。

zltail:占4个字节,用于存放ziplist中最后一个 entry在整个数据结构中的偏移量(字节)。该数据的存在可以快速定位列表的尾 entry位置,以方便操作

zllen:占2字节,用于存放列表包含的 entry个数。由于其只有16位,所以 ziplist最多可以含有的 entry个数为215-1=6535个

entries

entries是真正的列表,由很多的列表元素 entry构成。由于不同的元素类型、数值的不同,从而导致每个 entry的长度不同。

每个enty由三部分构成

prevlength:该部分用于记录上一个 entry的长度,以实现逆序遍历默认长度为1字节,只要上一个 entry的长度<254字节, prevlength就占1字节,否则其会自动扩展为3字节长度。encoding:该部分用于标志后面的data的具体类型。如果data为整数类型, encoding固定长度为1字节。如果data为字符串类型,则 encoding长度可能会是1字节、2字节或5字节。data字符串不同的长度,对应着不同的 encoding长度。

data:真正存储的数据。数据类型只能是整数类型或字符串类型。不同的数据占用的字节长度不同。

end

end只包含一部分,称为zlend,占1字节,值固定为255,即二进制位全为1,表示zipList列表的结束。

listPack

对于Ziplist,实现复杂,为了逆序遍历,每个 entry中包含前一个 entry的长度,这样会导致在 ziplist中间修改或者插入enty时需要进行级联更新。在高并发的写操作场景下会极度降低 Redis的性能。为了实现更紧凑、更快的解析,更简单的实现,重写实现了 ziplist,并命名为 listpack

在 Redis7.0中,已经将 ziplist全部替換为了 listpack,但为了兼容性,在配置中也保留ziplist的相关属性。

 

浅谈Redis7基础命令_第34张图片

listPack也是一个经过特殊编码的用于存储字符串或整数的双向链表。其底层数据结构部分构成:head、 entries与end,且这三部分在内存上也是连续存放的tpack与 Ziplist的重大区别在head与每个 entry的结构上,表示列表结束的end与 ziplist的end是相同的,占一个字节

浅谈Redis7基础命令_第35张图片

head

head由两部分构成:

totalbytes:占4个字节,用于存放 list Pack列表整体数据结构所占的字节数,包括totalbytes本身的长度

elemNum:占2字节,用于存放列表包含的entry个数。其意义与 ziplist中len的相同与 Ziplist的head相比,没有了记录最后一个 entry偏移量的 entail

entries

entries也是 list Pack中真正的列表,由很多的列表元素 entry构成。由于不同的元素类型、数值的不同,从而导致每个entry的长度不同。但与ziplist的entry结构相比, listPack的enty结构发生了较大变化。其中最大的变化就是没有了记录前一个enty长度的 prevlength,而增加了记录当前

entry长度的 element-totak-len。而这个改变仍然可以实现逆序遍历,但却避免了由于在列表中间修改或插入enty时引发的级联更新

每个enty仍由三部分构成

encoding:该部分用于标志后面的data的具体类型。如果data为整数类型, encoding长度可能会是1、2、3、4、5或9字节。不同的字节长度,其标识位不同。如果dat为字符串类型,则 encoding长度可能会是1、2或5字节。data字符串不同的长度,对应着不同的 encoding长度

data:真正存储的数据。数据类型只能是整数类型或字符串类型。不同的数据占用的字节长度不同

element-tota-len:该部分用于记录当前 entry的长度,用于实现逆序遍历。由于其特殊的记录方式,使其本身占有的字节数据可能会是1、2或5字

skipList

skiplist,跳跃列表,简称跳表,是一种随机化的数据结构,基于并联的链表,宏现简单,査找效率较高。简单来说跳表也是链表的一种,只不过它在链表的基础上增加了跳跃功能也正是这个跳跃功能,使得在査找元素时,能够提供较高的效率。

quickList

quicklist,快速列表, quicklist本身是一个双向无循环链表,它的每一个节点都是一个ilit从Reds3.2版本开始,对于Lt的底层实现,使用 quicklist替代了pLit和iketziplist与 lin kedlist都存在有明显不足,而 quicklist则对它们进行了改进:吸取了 ziplist和 linkedlist的优点,避开了它们的不足quicklist本质上是 ziplist和 linkedlist的混合体。其将 linkedlist按段切分,每一段使用ziplist来紧凑存储若干真正的数据元素,多个 ziplist之间使用双向指针串接起来。当然对于每个 ziplist中最多可存放多大容量的数据元素,在配置文件中通过 list-max- ziplist-size属性可以指定。

BitMap操作命令

Bitmap是 Redis2.2.0版本中引入的一种新的数据类型。该数据类型本质上就是一个仅包含0和1的二进制字符串。而其所有相关命令都是对这个字符串二进制位的操作。用于描述该字符串的属性有三个:key、 offset、 bitvalue。

key: Bitmap是 Redis的 key-value中的一种vaue的数据类型,所以该vaue一定有其对应的key。

offset:每个BitMap数据都是一个字符串,字符串中的每个字符都有其对应的索引,该索引从0开始计数。该索引就称为每个字符在该 Bitmap中的偏移量 offset。这个 offset的值的范围是[0,232-1],即该 offset的最大值为4G1,即4294967295,42亿多。

bitvalue:每个 Bitmap数据中都是一个仅包含0和1的二进制字符串,每个 offset位上的字符就称为该位的值 bitvalue。 bitvalue的值非0即1

setbit 和getbit

格式:setbit key offset value

格式:getbit key offset

bitcount

格式:bitcount key [start end [BYTE|BIT]]

bitpos

格式:bitpos key bit [start [end [BYTE|BIT]]]

 

浅谈Redis7基础命令_第36张图片

bitop

格式:bitop operation destkey key [key ...]

and 并运算 dest 并运算的结果存储在dest里面

HyperLogLog操作命令

超级日志记录该数据类型可以简单理解为ー个set集合,集合元素为字符串。但实际Hyperloglog是一种基数计数概率算法,通过该算法可以利用极小的内存完成独立总数的统计。其所有相关命令都是对这个“set集合”的操作Hyperloglog算法是由法国人 Philippe Flajolet博士研究出来的, Redis的作者 Antirez为了纪念 Philippe Flajolet博士对组合数学和基数计算算法分析的研究,在设计 Hyperloglog命令的时候使用了Philippe Flajole姓名的英文首字母PF作为前缀。

HyperLogLog应用场景

       HyperLogLog可对数据量超级庞大的日志数据做到不精确的去重计数统计。误差是0.81%。UV数据适合使用HyperLogLog进行记录。

pfadd

格式:pfadd key [element [element ...]]

pfcount

格式:pfcount key [key ...]

 

浅谈Redis7基础命令_第37张图片

pfmerge

格式:pfmerge destkey sourcekey [sourcekey ...]

将city、database集合合并到sum

Geospatial操作命令

Geospatial,地理空间。

Redis在3.2版本中引入了Geospatial这种新的数据类型。该类型本质上仍是一种集合只不过集合元素比较特殊,是一种由三部分构成的数据结构,这种数据结构称为空间元素

经度: longitude。有效经度为[-180,180]。正的表示东经,负的表示西经。

伟度: latitude。有效纬度为185.05112878,85.05112878]。正的表示北纬,负的表示南位置名称:为该经纬度所标注的位置所命名的名称,也称为该 Geospatial集合的空间元素名称。通过该类型可以设置、查询某地理位置的经纬度,査询某范围内的空间元素,计算两空间元素间的距离等。

应用场景:QQ动态中的“附件”功能,钉钉定位签到等,微信“发现”功能

geoadd

格式:geoadd key [NX|XX] [CH] longitude latitude member [longitude latitud

 

浅谈Redis7基础命令_第38张图片

geodist

格式:geodist key member1 member2 [M|KM|FT英尺|MI英里]

默认值为M米

geopos

格式:geopos key member [member ...]

 

geohash

格式:geohash key member [member ...]

geohash是一种地址编码方法。把二维的空间维度数据编码成一个字符串。该值主要用于底层应用功或调试,实际中的用处不大。

georadius

格式:georadius key longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count

查看范围内

浅谈Redis7基础命令_第39张图片

发布订阅操作命令

subscribe

格式:subscribe channel [channel ...]

功能: Redis客户端通过一个 subscribe命令可以同时订阅任意数量的频道。在输出了订阅了主题后,命令处于阻塞状态,等待相关频道的消息。

浅谈Redis7基础命令_第40张图片

psubscribe

格式:psubscribe pattern [pattern ...]

功能:订阅一个或多个符合给定模式的频道。说明:这里的模式只能使用通配符*。例如,诜*可以匹配所有以ⅱ开头的频道,像 it news、it blog、 it tweets等;news.*可以匹配所有以news开头的频道,像news. global. today

 

 

浅谈Redis7基础命令_第41张图片

publish

格式:publish channel message

 

 

unsubscribe

取消订阅

格式:unsubscribe [channel [channel ...]]

浅谈Redis7基础命令_第42张图片

punsubscribe

格式:punsubscribe [pattern [pattern ...]]

功能:退订一个或多个符合给定模式的频道

这里的模式只能使用通配符*。如果没有频道被指定,其效果与 SUBSCRIBE命令相同,客户端将退讧所有订阅的频道

 

pubsub

PUBSUB是一个查看订阅与发布系统状态的内省命令集,它由数个不同格式的子命令组成,下面分别介绍这些子命令的用法。

pubsub channels

格式:pubsub channels [pattern]

列出当前所有的活跃频道。活跃频道指的是那些至少有一个订阅者的频道。说明: pattern参数是可选的。如果不给出 pattern参数,将会列出订阅/发布系统中的所有活跃频道。如果给出 pattern参数,那么只列出和给定模式 pattern相匹配的那些活跃频道。 pattern中只能使用通配符*。

浅谈Redis7基础命令_第43张图片

 

浅谈Redis7基础命令_第44张图片

pubsub numsub

格式:pubsub numsub [channel [channel ...]]

返回给定频道的订阅者数量

浅谈Redis7基础命令_第45张图片

你可能感兴趣的:(数据库,redis,java)