Redis资料整理
创始人
2024-04-06 17:42:53
0

Redis--->是非关系型数据库(也称缓存数据库),是一种NoSQL数据库

存放5种数据类型 String  key-value形式

另外list,set,zset,hash

另外两种不常用的:bitmap(位图类型),geo(地理位置类型),另外Redis5.0新增 stream类型

相对来说Redis适合存放少数据量的数据,如果需要存放大量数据到内存,推荐MongoDB,HBase.

是一个用C语言编写的开源的基于内存运行并支持持久化,高性能的NoSQL数据库.Redis种的数据大部分时间都是存储内存中,适合存储频繁访问,数据量娇小的数据.

特点:

1、支持数据持久化

Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

2、支持多种数据结构

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

3、支持数据备份

Redis支持数据的备份,即master-slave模式的数据备份。

Linux上安装Redis

官网:https://redis.io    选择下载相应版本

 

 

 这目录不创建也行,多余

解压到该目录中   tar -zxvf redis-5.0.2.tar.gz -C /usr/local/develop/redis

进入该目录

 执行命令 make   就是编译src

该命令有可能出错,出错原因可以是cc命令没找到,是C语言编译程序,好比运行java程序需要jdk里的命令一样

如果出现错误 如下操作

 或者

 或者直接

yum -y install gcc

以前安装过,所以都OK

 

 如果说第一次make  因为没有安装gcc导致报错,很可能安装好gcc之后   继续执行make命令再次报错,原因是第一次编译过了,只是没法执行,    这种情况   在该目录执行清理命令   make distclea 然后再次执行make命令

继续当前目录执行make install  其实不执行该命令也可以启动Redis了,但是每次都要去Redis的bin目录,make install命令执行后,会配置到环境变量中就是local/bin环境目录里,就是你在任何目录下面都可以执行Redis命令

进入 /usr/local/bin      redis的命令全配置好了  可以在任何目录启动      

启动方式:

1. 前台启动 redis-server(会占用终端命令页面)

2.后台启动 redis-server &(用后台启动)

3.启动redis服务时,指定配置文件:在redis安装目录下有个redis.conf用来修改Redis配置

如果你修改了该配置文件,启动要指定该配置文件,不然配置不生效

启动命令 redis-server redis.conf &(指定配置文件并在后台启动)

如下图   可通过命令 vim redis.conf修改配置

 回车一下

管道查一下

 ps -ef|grep redis 

关闭方式:

①使用redis客户端关闭,向服务器发出关闭命令

任意目录下执行 指令redis-cli shutdown

推荐使用这种方式, redis先完成数据操作,然后再关闭

②kill pid 或者 kill -9 pid

这种不会考虑当前应用是否有数据正在执行操作,直接就关闭应用。

先使用 ps -ef | grep redis 查出进程号,在使用 kill pid

Hello Redis

Redis客户端

Redis客户端是一个程序,通过网络连接到Redis服务器,从而实现跟 Redis服务器的交互。

Redis客户端发送命令,同时显示Redis服务器的处理结果。

redis-cli(Redis Command Line Interface)是Redis自带的基于命令行的Redis客户端,用于与服务端交互,我们可以使用该客户端来执行redis的各种命令。

redis的客户端:用来连接redis服务,向redis服务器发送命令,并且显示redis服务处理结果。

redis-cli:是redis自带的客户端,使用命令redis-cli就可以启动redis的客户端程序。

redis-cli:默认连接127.0.0.1(本机)的6379端口上的redis服务

redis-cli -p 端口号:连接127.0.0.1(本机)的指定端口上的redis服务  比如Redis集群指定端口号

redis-cli -h ip地址 -p 端口:连接指定ip主机上的指定端口的redis服务   比如Redis集群指定端口号

如果redis客户端有中文,使用redis-cli -h ip地址 -p 端口 --raw命令连接redis可以正常显示中文

例如:我在远端启动Redis服务

本机下载个Window版Redis里面有客户端

 这样就连接上了

如果想在远端打开客户端,因已配置了redis全局环境命令

可任意目录执行

redis-cli -p 6379

这里有个报错  set的时候提示

查了下,需要将redis.conf文件修改下

 

........

改回yes,空了再弄

先远程启动客户端耍耍

 默认情况不需要密码

 可以对Redis数据库进行增删改查

 退出客户端  exit 或者quit

Redis基本知识

一些基础命令

1.redis-benchmark  用来测试redis性能  模拟处理10W个请求

 2.Redis沟通命令,查看状态

ping 返回PONG

解释:输入ping,redis给我们返回PONG,表示redis服务运行正常

3.查看redis服务器的统计信息:info server和info   进入redis-cli客户端输入该命令

语法:info [section]

作用:以一种易于解释且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。section 用来返回指定部分的统计信息。 section的值:server , clients ,memory等等。不加section 返回全部统计信息

返回值:指定section的统计信息或全部信息

4.redis默认使用16个库

Redis默认使用16个库,从0到15。 对数据库个数的修改,在redis.conf文件中databases 16,理论上可以配置无限多个

 Redis中的数据库实例只能由redis服务来创建和维护,开发人员不能修改和自行创建数据库实例

5.切换库命令:select db

默认使用第0个,如果要使用其他数据库,命令是 select index

6.查看当前数据库中key的数目:dbsize

Redis 0号库默认放着4个键值对

7.查看当前数据库中有哪些key:keys *

 8.清空当前库:flushdb

 9.清空所有数据库:flushall

10.config get * 获得redis的所有配置值

语法:config get parameter

作用:获取运行中Redis服务器的配置参数, 获取全部配置可以使用*。参数信息来自redis.conf 文件的内容。

例1:获取数据库个数 config get databases

config get port

 

 flushall 清空所有数据库

redis英文版命令大全:Commands | Redis

redis中文版命令大全:Redis 命令参考 — Redis 命令参考

Redis常用5种数据结构

A.字符串类型 string

字符串类型是Redis中最基本的数据结构,它能存储任何类型的数据,包括二进制数

据,序列化后的数据,JSON化的对象甚至是一张图片。最大512M。

B.列表类型 list

Redis列表是简单的字符串列表,按照插入顺序排序,元素可以重复。你可以添加一个元素到列表的头部(左边)或者尾部(右边),底层是个链表结构。

C.集合类型 set

Redis的Set是string类型的无序无重复集合。

D.哈希类型 hash

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

​​​​​​​E.有序集合类型 zset sorted set

Redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。

不同的是zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。

Redis的常用操作命令

1.key的操作命令

1.1)keys的操作命令

语法:keys pattern

作用:查找所有符合模式pattern的key.  pattern可以使用通配符。

通配符:

  1. *:表示0或多个字符,例如:keys * 查询所有的key。    
  2. ?:表示单个字符,例如:wo?d , 匹配 word , wood    比如keys wo?d
  3. [] :表示选择[]内的一个字符,例如wo[or]d, 匹配word, wood, 不匹配wold、woord

keys wo[]d

2.​​​​​​​​​​​​​​exists

语法:exists key [key…]

作用:判断key是否存在

返回值:整数,存在key返回1,其他返回0。使用多个key,返回存在的key的数量。

​​​​​​​3.ttl

语法:ttl key

作用:查看key的剩余生存时间(ttl: time to live),以秒为单位。

返回值:

  1. -1 :没有设置key的生存时间, key永不过期。
  2. -2:key不存在​​​​​​​

redis常用操作指令总结

1.查询数据库中的key

keys *:查看数据库所有的key

keys k*:查看数据库中所有以k开头的key

keys h*o:查看数据库中所有以h开头,以o结尾的key

keys h?o:查看数据库中所有以h开头,以o结尾的,并且中间只有一个字符的key

keys h[abc]llo:查看数据库中所有以h开头以llo结尾,并且h后边只能取abc中的一个字符的key

2.判断key在数据库中是否存在:exists key 如果存在则返回1,如果不存在则返回0

exists k1:判断k1是否存在  存在返回1  不存在返回0

exist k1 k2 k3:判断k1  k2  k3是否存在   返回值是存在的key的数量

3.move移动指定key到指定的数据库实例,原来库里的该数据删除

move k1 1:将key为k1的数据移动到1号库

4.ttl查看指定key的剩余生存时间,返回-1表示没有设置key的生存时间,永不过期.返回-2,表示key不存在,时间以秒为单位

ttl k1:查看key为k1的key的剩余生存时间

5.expire设置key的生存时间,以秒为单位,超过时间key自动删除,返回1表示设置成功,返回0表示其他情况

expire k1 20:设置key为k1的该条数据生存时间为20秒,20秒后自动删除

6.type查看key存储值的数据类型

返回值none(key不存在),String(字符串),list(列表),set(集合),zset(有序集),hash(哈希表)

7.rename key newkey.将key改名为newkey. 当key和newkey相同,或者key不存在时,返回一个错误.当newkey已经存在,将会把旧值覆盖

rename k1  k11:将key为k1的数据改名为key为k11

8.del删除存在的key,如果key不存在,忽略,返回值为删除的key的数量

del k1:删除key为k1的该条数据

del k1 k2:删除key为k1还有k2的两条数据

上面都是关于key的操作

--------------------------------------------------------------------------------------------------------------------

关于常用5种数据结构的命令

有关String类型数据的操作命令,单key  单value(数值,boolean在redis中都是以字符串形式存储)

1.将String类型的数据保存到redis中:set

set zs zhangsan:设置key为zs,value为zhangsan的字符串到redis

set age 100:设置key为age,value为100的字符串到redis

set age 200:设置key为age,value为200的字符串到redis,如果key已经存在会把以前的value覆盖

2.get获取String类型的数据

get zs:获取key为zs的value值

3.append追加字符串,返回值:返回追加之后字符串长度,key如果不存在,相当于set

append age 123:将数据库原有key为age的value值,比如说200追加为200123

4.strlen获取key对应value值字符串的长度

strlen age:查看key为age对应value字符串的长度

5.incr对表示数值的字符串进行+1运算,返回+1之后的数据值,如果key不存在,首先设置一个key,value初始化为0,然后进行incr运算+1.如果value值不是数值的话,报错.value必须是数值

incr age:将key为age的value值进行+1运算

6.decr对表示数值的字符串进行-1运算,返回-1之后的数据值,如果key不存在,首先设置一个key,value初始化为0,然后进行incr运算-1.如果value值不是数值的话,报错.value必须是数值

incr age:将key为age的value值进行-1运算

7.将字符串数值进行off(偏移量)set运算: incrby key offset(加几)

incrby age 100:将key为age的value值进行+100运算,offset随意多少,100就是那个offset(偏移量).如果value值不是数值的话,报错.value必须是数值.返回加100之后的数据值

8.将字符串数值进行off(偏移量)set运算: decrby key offset(减几)

decrby age 69:将key为age的value值进行-69运算,offset随意多少,69就是那个offset(偏移量).如果value值不是数值的话,报错.value必须是数值.返回减69之后的数据值

9.获取(截取)字符串中的子字符串:getrange key startIndex endIndex.(下标从0开始),不影响原数据

getrange age 1 5:比如说age的value是1234567   那么截取到的值就是23456

getrange name 1 5:比如说age的value是zhangsang   那么截取到的值就是hangs

getrange name 1 20:比如说age的value是zhangsang   那么截取到的值就是hangsang

getrange name 1 -1:比如说age的value是zhangsang   那么截取到的值就是hangsang

getrange name 1 -2:比如说age的value是zhangsang   那么截取到的值就是hangsan

getrange name 1 -3:比如说age的value是zhangsang   那么截取到的值就是hangsa

getrange name 0 -1:比如说age的value是zhangsang   那么截取到的值就是zhangsang

10.覆盖字符串setrange key starIndex value

setrange name 1 x:比如说age的value是zhangsan   从下标1开始覆盖  覆盖的值为x,返回覆盖之后的长度  那么value就变成zxangsan

setrange name 1 xqwertyui:比如说age的value是zhangsan   从下标1开始覆盖  覆盖的值为xqwertyui,返回覆盖之后的长度  那么value就变成zxqwertyui

11.设置字符串同时什么最大生命周期setex

setex name 20 zhangsan:设置key为name,value为zhangsan,生命周期为20秒

12.设置字符串但如果key已经存在,则放弃设置,不会盲目覆盖setnx

setnx name zhangsan:设置key为name,value为zhangsan到数据库,如果key不存在,则设置,如果key不存在则放弃设置

13.批量设置数据到数据库(好比批量插入)mset key1 value1 key2 value2 key3 value3

mset name zhangsan age 20 gender 男:如果key存在,会被覆盖,中文如图

14.批量设置数据到数据库(好比批量插入)msetnx key1 value1 key2 value2 key3 value3

msetnx name zhangsan age 20 gender 男:只有当所有key都不存在,才成功,只要有一个key存在,全失败

---------------------------------------------------------------

有关List类型数据的操作命令 单key 多value 而且多个有序的value 每个value都是字符串值 下标从0开始  最后一位可以按正常从0开始的最后一位下标表示,也可以用-1表示  最后第二位-2

插入数据或者查数据都要靠下标

1.将一个或者多个值一次插入到列表.lpush key value 或者lpush key value1 value2 value3.返回插入的value个数.lpush插入key的value顺序是 value3  value2  value1

lpush phone 88588888 13998905688 999:插入key为phone value分别为999 13998905688 88588888有序列表

lpush phone 666 888:那么value值顺序为

888 666  999 13998905688 88588888

2.查看(获取)指定列表(list)中指定下标区间的元素:lrange key startIndex endIndex

lrange phone 0 1:获取key为phone的list中下标为0到下标为1的元素(含头也含尾)  返回888 666  

lrange phone 0 2:获取key为phone的list中下标为0到下标为2的元素(含头也含尾)   返回888 666  999 

lrange phone 1 -2:获取key为phone的list中下标为1到倒数第2个元素(含头也含尾)   返回666  999  13998905688 

lrange phone 0 -1:获取key为phone的list中下标为0到最后个元素(含头也含尾)   返回888 666  999 13998905688 88588888

3.将一个或者多个值一次插入到列表.rpush key value 或者rpush key value1 value2 value3.返回插入的value个数.rpush插入key的value顺序是 value1  value2  value3

rpush list01 hehe haha deidei:插入key为phone value分别为hehe haha deidei有序列表

rpush list01 a b c:那么顺序就变成hehe haha deidei a b c

如果这里我在lpush list01 e f:那么顺序就变成e f hehe haha deidei a b c

4.lpop从指定列表中移除并且返回从左侧下标0开始开始的元素:lpop key

lpop list01:删除key为list01从左侧开始第一个元素,即下标为0的元素

5.从指定列表移除并且返回表尾元素:rpop key,返回被删元素

rpop list01:移除key为list01列表里表尾最后一个元素

6.查看获取指定列表中指定下标的元素:lindex key index

lindex list01 0:获取查看key为list01里指定下标0的元素

7.获取指定列表的长度:llen key

llen list01:获取key为list01里value的个数

8.根据count值移除(删除)列表中跟value相等的数据:lrem key count value.返回删除的个数

如果count大于0:从列表左侧开始移除count个跟value相等的数据

如果count小于0:从列表右侧开始移除count个跟value相等的数据

如果count等于0:从列表中移除所有跟value相等的数据

比如list01中的value是    a f f b c a d e a f f

那么lrem list01 2 f:表示删除key为list01从左侧开始删除2个value值为f的value,删除后a b c a d e a f f.返回删除的个数

lrem list01 -2 f:表示删除key为list01从右侧开始删除2个value值为f的value,删除后剩下a b c a d e a

lrem list01 0 a:表示删除key为list01所有value值为a的value,删除后剩下b c d e

-----------------------------------------------------------------------------------

Redis中有关set类型数据的操作命令:单key-多value(value不能重复)且无序,一个key对应多个value

因为无序,那么不用像list一样考虑左侧插入还是右侧插入,反正就是插入

Redis的Set是String类型的无需不重复集合.

1.将一个或多个元素添加到指定集合中:sadd key value或者sadd key value1 value2 value3,如果后面的value相同,以第一个为准,重复加入的不成功,返回成功加入的元素的个数

sadd set01 a b c:将a b c三个value插入到指定的key为set01的set集合,如果value重复(已存在该value)则忽略

2.获取指定集合中所有的元素:smembers key

smembers set01:返回key为set01的集合中的所有元素

3.判断指定元素在指定集合中是否存在:sismember key member,member指元素value,如果存在返回1,不存在返回0

sismember set01 f:判断key为set01的集合里是否含有元素f,存在返回1,不存在返回0

4.获取指定集合的长度即某key的集合元素的总个数:scard key

scard set01:获取key为set01的元素个数

5.移除指定集合中一个或多个元素:srem key value或者srem key value1 value2 value3,集合中不存在的元素会被忽略,返回成功移除的个数

srem set c d m:移除set01集合中value为 c d m的元素,如果该value在该集合中没有,则忽略,返回成功移除的个数

6.随机获取指定集合中的一个元素或多个元素:(抽奖) srandmember key(一个) 

srandmember key count

如果count大于0,随机从该集合中获取count个元素,而且count个元素都不会重复

如果count小于0,随机从该集合中获取count个元素,但是元素可能重复,可能不重复

比如我先往集合中放些数据sadd set02 1 2 3 4 5 6 7 8 9 10

然后再srandmember set02:随机从set02中获取一个值  常用于抽奖

 7.从指定集合中随机移除一个或多个元素:spop key或spop ket 1或者spop key count,,返回被移除的元素值

spop key或spop key 1都是从指定集合随机移除一个元素,返回被移除的元素值

spop key count是从指定集合随机移除多个元素,返回被移除的元素值

8.集合和集合中将指定集合中的指定元素移动到另一个集合:smove source dest member,返回移动的个数

例如现在有set01和set02

 将set01中的a移动到set02去

命令:smove set01 set02 a 这样set01少了个元素a    set02里多了个元素a

9.集合与集合的交集,差集,并集

9.1)求差集sdiff key key或者sdiff key key key .....获取指定第一个集合中有,但是其他集合中都没有的元素组成的新集合,返回新集合的value

9.2)获取所有指定集合中都有的新集合,求交集(大家都有的):sinter key1 key2......,返回新集合的value

9.3)获取所有指定集合中,所有元素组成的大集合,求并集:sunion key1 key2......返回新集合的value

-------------------------------------------------------------------------------------------------

Redis中有关hash类型数据的操作命令:单key value是一个对象,对象里是属性名对应属性值

field-value

field-value.......

例如:key为student    value为   id-1 name-zhangsan age-20

因此要创建hash,首先取个key名,然后是file(域)对应值,file(域)对应值......

学术些讲:Redis的hash是一个String类型的key和value的映射表,这里的value是一系列的键值对,hash特别适合用于存储对象.

hash类型的数据操作总的思想是通过key和field操作value,key是数据标识,field是域,value是我们感兴趣的业务数据.

1.将一个或者多个filed-value对设置到哈希表中:hset key filed value或者

hset key field1 value1 field2 value2.......返回成功插入的field-value的对数,如果key field已经存在会覆盖掉

hset studen01 id 1001 name zhangsan age 20

2.获取指定哈希表中指定field的值:hget key field,返回该field的值

hget student01 name:获取key为student01的哈希表中,field为name的值,返回该field的值

3.hmset用法和hset key field1 value1 field2 value2.......完全一样

4.批量获取指定哈希表中多个field的值:hmget key field1 field2 field3....,返回这些field的值

5.在不知道field的情况下,获取指定哈希表中所有的field-value:hgetall key

 6.从指定哈希表中删除一个或者多个field:hdel key field或者hdel key field1 filed2.....

hdel studen01 id name:删除hash表中key为studen01的 filed为id和name的field-value对

7.指定哈希表中所有的field个数:hlen key,返回值是field-value的个数

hlen studen01

8.判断指定哈希表中是否存在某一个field:hexists key field.存在返回1,不存在返回0

9.获取哈希表中某key对应的所有field:hkeys key

10.获取哈希表中某key对应的所有value:hvals key

11.如果哈希表中某key对应的某field对应的value是个数值,可以对该数值进行加法运算(int只能是整数)

hincrby key field int

hincrby studen01 age 5:哈希表中对key为studen01  field为age的value值加5,返回加之后对应的整数

12.如果哈希表中某key对应的某field对应的value是个数值,可以对该数值进行加法运算(float是浮点数)

hincrbyfloat key field float

13.针对于第一个方法(第一种设置方式其实是很危险的),hsetnx key field value或hsetnx key field1 value1 field2 value2...

也是设置,但是当key field已经存在,则放弃设置.反之则设置成功

----------------------------------------------------------------------------------------------------------

Redis有序集合zset和集合set一样也是String类型元素的集合,且不允许重复的成员.

不同的是zset的每个元素都会关联一个分数(分数可以重复),Redis通过分数来为集合中的成员进行从小到大的排序.

Redis中有关zset类型数据的操作命令:zset是有序集合,对集合里每一个value对应一个分数,然后redis根据对应分数对集合进行排序(升序)

zset集合的每一个value必须关联分数

1.将一个或者多个member及其分数值放入一个有序集合:zadd key score member.如果元素已经存在分数会被覆盖 

zadd zset01 100 z1 200 z2 300 z3

2.获取指定有序集合中指定下标区间的元素:zrange key startIndex endIndex

zrange zset01 0 -1:获取所有元素

zrange zset 0 1:获取z1  z2

zrange zset 0 -1 withscores:获取所有元素和所有元素的分数

3.获取指定有序集合中指定分数区间的元素:zrangebyscore key min max

zrangebyscore set01 100 300.查出来的元素包含分数100和300的

zrangebyscore set01 100 300 withscore:把value和分数都查出来

4.指定有序集合中一个或者多个元素:zrem key member或者zrem key value1 value2.....

zrem zset01 z1 z2

5.获取指定有序集合中所有元素的个数:zcard key

zcard zset01

6.获取指定有序集合中分数在指定区间内的元素个数:zcount key min max

zcount set01 100 400

7.获取指定有序集合中指定元素的排名(排名从0开始):zrank key value

zrank zset01 z3:返回从0开始的下标

8.获取指定有序集合中指定元素的分数:zscore key value

zscore zset01 z4:返回z4的分数

9.zrevrank key value获取指定有序集合中指定元素的排名(反向排名,按照分数从大到小的排名)

返回从大到小的(最后一位下标为0)下标排名

---------------------------------------------------------------------------------------

Redis的配置文件

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
AWSECS:哪种网络模式具有... 使用AWS ECS中的awsvpc网络模式来获得最佳性能。awsvpc网络模式允许ECS任务直接在V...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...