1、Redis的安装

1、查看是否安装了redis的编译环境(redis是由C语言编写的,它的运行需要C环境)

rpm -qa | grep -i gcc

在这里插入图片描述
若没有安装redis的编译环境,使用如下命令安装
安装命令:yum install gcc-c++

2、从redis官网下载redis的压缩包。
在这里插入图片描述

3、使用Xftp工具将redis压缩包上传到linux。
在这里插入图片描述

4、将redis压缩包解压到/usr/software

tar -xvf redis-7.0.0.tar.gz -C /usr/software

在这里插入图片描述
5、进入到redis-7.0.0目录

cd /usr/software/redis-7.0.0

在这里插入图片描述
6、在redis-7.0.0目录输入make命令,对解压后的文件进行编译
在这里插入图片描述
7、安装redis(需要进入到redis解压后的目录中进行安装)

make PREFIX=/usr/software/redis install

PREFIX=/usr/software/redis的意思是将redis安装到/usr/software/redis目录下
在这里插入图片描述

安装完成!在/usr/software目录下,会有一个redis目录
在这里插入图片描述
8、进入redis目录,下面有个bin目录,bin目录下有几个可执行文件
在这里插入图片描述
redis-benchmark ----性能测试工具
redis-check-aof ----AOF文件修复工具
redis-check-dump ----RDB文件检查工具(快照持久化文件)
redis-cli ----命令行客户端
redis-server ----redis服务器启动命令

2、Redis的启动和停止

2.1、前端模式启动(不推荐使用)

#进入到/usr/soft/redis/bin目录下,执行redis-server
cd /usr/software/redis/bin
./redis-server

在这里插入图片描述

缺点:启动完成后,不能再进行其他操作,如果要操作必须使用ctrl+c,此时redis-server程序结束,不推荐使用此方法。

2.2、后端模式启动(推荐使用)

(1)需要使用redis的配置文件redis.conf,该文件的位置:/usr/software/redis-7.0.0/redis.conf,在这个配置文件中,可以修改端口号等信息,为了方便使用,将该配置文件copy一份到redis的bin目录下。

cp /usr/software/redis-7.0.0/redis.conf  /usr/software/redis/bin

在这里插入图片描述

(2)然后修改该配置文件中的daemonize no为daemonize yes

vim /usr/software/redis/bin/redis.conf

在这里插入图片描述
先不进入编辑模式,内容太多,需要搜索,在命令模式下输入/daemonize no,回车。
在这里插入图片描述
然后再按 Shift + A,进入编辑模式并将光标定位在当前行的末尾,将no改为yes
在这里插入图片描述
按esc退出编辑模式,按:wq保存修改并退出文件。
(3)启动redis

cd /usr/software/redis/bin
./redis-server  redis.conf

2.3、关闭Redis

强制结束Redis程序,可能会导致redis持久化数据丢失!企业中禁止使用!

查看redis进程端口占用

ps -ef | grep -i redis

在这里插入图片描述
强制杀死进程:kill -9 5718

正确停止Redis的方式应该是向Redis发送shutdown命令
方式一:

cd /usr/sfotware/redis/bin

./redis-cli shutdown

方式二:
在这里插入图片描述

3、redis的简单使用

3.1、ping

ping [message]:测试客户端与Redis服务的连接是否正常,如果连接正常会收到回复PONG(如果指定message,则原样回复)。
在这里插入图片描述

3.2、set/get:存储值。(get命令只能用于获取String value

在这里插入图片描述
set value为中文,get取值时乱码。
在这里插入图片描述
解决方法:连接redis服务器时使用命令:./redis-cli --raw
在这里插入图片描述

3.3、echo

echo message:在命令行打印一些内容
在这里插入图片描述

3.4、info

info:获取服务器的信息和相关统计。
在这里插入图片描述

3.5、操作key

keys pattern:获取所有与pattern匹配的key。pattern中 * 表示任意多个字符,?表示任意一个字符
在这里插入图片描述
del key1 ke2 key3:删除key对应的数据
在这里插入图片描述
exists key:判断指定的key是否存在,0代表不存在,大于0表示存在
在这里插入图片描述
rename oldkey newkey:为当前的key重命名
在这里插入图片描述
expire key :设置超时时间,单位:秒(超时后,会删除设置超时的key的数据)
在这里插入图片描述
ttl key:获取该key所剩的超时时间,如果没有设置,返回-1,返回-2表示key本身不存在。
在这里插入图片描述
type key:获取指定的key对应数据的类型:string、hash、list、set或zset
在这里插入图片描述

3.5、操作value

incr key:将指定的key对应的value递增1。
decr key:将指定的key的value递减1。
在这里插入图片描述
incrby key increment:将指定的key的value增加increment。
decrby key decrment:将指定的key的value减少decrement。
在这里插入图片描述
如果希望操作小数,可以使用命令:incrbyfloat key increment,没有decrbyfloat,可以使用正数表示增加,负数表示减少。
在这里插入图片描述

3.6、字符串拼接

append key value:如果该key存在,则在原有的value后追加该值;如果该key不存在,则重新创建一个key/value,返回值为追加后的长度!
在这里插入图片描述

4、redis的五种数据类型

value支持五种基本数据类型:

  • 字符串(String)
  • 哈希(hash)
  • 列表(list)
  • 集合(set)
  • 有序集合(sorted set)

5、hash常用命令

5.1、hash赋值

hset key field value:为指定的key设定field-value对(键值对)。
在这里插入图片描述

5.2、hash取值

hget key field:获取key中的单个field的值(单个)
hmget key fileds:获取key中的多个filed的值(多个)
hgetall key:获取key中的所有filed-value(所有)
在这里插入图片描述

5.3、hash删除

hdel key field [field … ] :可以删除一个或多个字段,返回值是被删除的字段个数。
在这里插入图片描述
del key :删除整个hash
在这里插入图片描述

5.4、其它命令

hexists key field:判断指定的key中的filed是否存在(只能单个)
在这里插入图片描述
hlen key:获取key所包含的field的数量
hkeys key :获得key所有field
hvals key:获得key所有的value
在这里插入图片描述

6、list常用命令

6.1、两端插入(列表插入值)

lpush key value…:在list的头部插入所有给定的值,如果该key不存在,则自动创建新list再操作,返回所有元素的个数。(前插法)
在这里插入图片描述
rpush key value…:在list的尾部插入所有给定的值,如果该key不存在,则自动创建新list再操作,返回所有元素的个数。(后插法)
在这里插入图片描述
lpushx key value [value…]:将给定的值插入到已存在的列表头部,如果列表不存在,则不插入。
rpushx key value [value…]:将给定的值插入到已存在的列表尾部,如果列表不存在,则不插入。
在这里插入图片描述

6.2、两端弹出(删除)

lpop key [count]:弹出并返回list中第一个元素,如果该key不存在,返回(nil)。count表示弹出几个,默认为1(左→右)
在这里插入图片描述
rpop key [count]:弹出并返回list中最后一个元素,如果该key不存在,返回(nil)。count表示弹出几个,默认为1(右→左)
在这里插入图片描述

6.3、获取长度

llen key:返回指定的key关联的链表中的元素的数量,如果list不存在,返回0。
在这里插入图片描述

6.4、删除多个相同的value

lrem key count value:删除count个值为value的元素,count 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count。
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
count = 0 : 移除表中所有与 value 相等的值。
在这里插入图片描述

6.5、根据index修改值

lset key index value:设置链表中索引为index的元素值,0表示第一个,-1表示最后一个,索引不存在则抛异常。
在这里插入图片描述

6.6、在指定value前后插入

linsert key before|after pivot value:在pivot元素前或者后插入value。
在这里插入图片描述

6.7、操作两个list

rpoplpush resource destination:移除resource列表的最后一个元素,并将该元素添加到destination列表的头部。
在这里插入图片描述

7、set(Set集合中不允许出现重复的元素)

7.1、存值和取值

sadd key member… :向Set中添加值,如果值已存在则不添加,返回添加成功的元素个数。
smembers key:获得集合中的所有元素。
在这里插入图片描述
srem key value… :删除Set中指定的值,返回移除元素的个数。
在这里插入图片描述

7.2、判断某个值是否存在

sismember key member:判断Set中是否存在指定的值,1表示存在,0表示不存在或者该key本身就不存在。
如果希望准确判断到底是key本身不存在,还是key对应的set中的值不存在,可以结合exists key先判断key对应的set是否存在(返回0表示key对应的set不存在),从而得出准确结论。
在这里插入图片描述

7.3 、差集、并集、交集

7.3.1、差集

sdiff key1 key2…:只在key1中存在的元素,称为“差集”。
在这里插入图片描述

7.3.2、交集

sinter key1 key2…:在key1和key2中都存在的元素,称为“交集”。
在这里插入图片描述

7.3.3、并集

sunion key1 key2…:在key1和key2中的所有元素(去重),称为“并集”。
在这里插入图片描述

7.3.4、获取差集、并集、交集的结果

sdiffstore destination key1 key2…:将返回的差集存储在destination上
sinterstore destination key1 key2:将返回的交集存储在destination上
sunionstore destination key1 key2:将返回的并集存储在destination上

7.4、获取随机成员

scard key:获取set中成员的数量
在这里插入图片描述
srandmember key:随机返回set中的一个成员,可以用于抽取幸运用户!
在这里插入图片描述

8、 zset(有序集合)

set和zset主要差别是Sorted-Set中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Set中的成员必须是唯一的,但是分数(score)却是可以重复的。

8.1 添加元素

zadd key score member score2 member2 …:将所有成员以及该成员的分数存放到sorted-set中。如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。

8.2 获取元素

zscore key member:返回指定成员的分数
在这里插入图片描述
zrange key start stop [withscores]:按分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素),[withscores]参数表明返回的成员包含其分数。(正序排列)
在这里插入图片描述
zrevrange key start stop [withscores]:按分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素),(反序排列)
在这里插入图片描述
zrangebyscore key min max [withscores] [limit offset count]:返回分数在[min,max]的成员并按照分数从低到高排序。[withscores]:显示分数;
[limit offset count]:offset,索引从offset开始的count个元素。
在这里插入图片描述

8.2 、删除元素

zrem key member [member…]:移除集合中指定的成员,可以指定多个成员。
在这里插入图片描述
zremrangebyrank key start stop:删除索引在start-stop之间的成员,包括两端的成员。
在这里插入图片描述

zremrangebyscore key min max:按照分数范围删除元素
在这里插入图片描述
zremrangebylex key min max:按照字典(元素)范围删除元素
该命令的使用前提是所有元素的分数必须一致!
在这里插入图片描述

8.3、改变数值

zincrby key increment member:给指定的成员增加指定的分数。返回值是更改后的分数。
该命令常用于投票,或者点击某个微博标题增加热度的时候使用!
在这里插入图片描述

8.4、 其他命令

zcount key min max:获取分数在[min,max]之间的成员个数
在这里插入图片描述
zrank key member:返回成员在集合中的排名。(从小到大)
zrevrank key member:返回成员在集合中的排名。(从大到小)
在这里插入图片描述

9、三种特殊数据类型

9.1、bitmaps(打卡计数)

位图:一般用于完成类似打卡这样的操作。例如:记录一周的打卡状态。
在这里插入图片描述

9.2、hyperloglogs

统计集合中不重复元素的个数。特点:不管有多少个元素,只需要占用12KB的内存!

#往集合添加数据
pfadd key element...
#统计集合中不重复元素的个数
pfcount key
#将多个 HyperLogLog 合并为一个 HyperLogLog 
pfmerge destkey sourcekey [sourcekey ...]

在这里插入图片描述

9.3、geospatial

geospatial可以用于地理空间位置的计算,例如计算两地之间的距离、某一地理位置指定半径范围内的所有地理位置等。

#添加北京和深圳的地理位置:
geoadd citys 114.085947 22.547 shenzheng 116.405285 39.904989 beijing
#获取北京到深圳的直线距离:
geodist citys shenzheng beijing km
#返回指定地理位置的经纬度(和添加时的经纬度有细微的区别)
geopos citys shenzheng
#以给定的经纬度为中心, 返回与中心的距离不超过给定最大距离的所有位置元素。
georadius citys 114.085947 22.547 2000 km
#获取指定的地理位置指定半径内的所有元素
georadiusbymember citys shenzheng 2000 km

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10、redis高级

10.1、多数据库

一个redis实例(连接)包括16个数据库,下标从0到15,客户端默认使用第0号数据库。

select index:切换到指定的库,索引范围为0-15
move key index:将当前库指定的key移植到指定的库(剪切)
dbsize:返回当前数据库中 key 的数目。
flushdb:删除当前选择数据库中的所有key。
flushall:删除所有数据库中的所有key。

在这里插入图片描述

10.2、事务

10.2.1、事务中的命令

multi:开启事务用于标记事务的开始,其后执行的命令都将被存入命令队列,直到执行exec时,这些命令才会被执行。
exec:事务提交。
discard:事务回滚。
watch:监视某个数据的变化。

10.2.3、事务中的异常

在这里插入图片描述

10.2.3、回滚事务

在这里插入图片描述

10.2.4、redis实现乐观锁

悲观锁:悲观锁在操作数据时是直接把数据上锁,直到操作完成之后才会释放锁,在上锁期间其他人不能操作数据。
乐观锁:只有提交数据时,才会去判断在此期间别人是否修改了数据,如果别人修改了数据则放弃操作,否则执行操作。

redis中,通过watch命令,来对某个要在事务中操作的数据进行监视,如果在最终执行的时候,发现监视的数据已经被修改了,则放弃事务对监视数据的改变。(类似乐观锁)
在这里插入图片描述

10.3、消息订阅与发布

subscribe channel:订阅频道。此时如果没有人“发布”消息,第一个窗口处于等待状态。
在这里插入图片描述
publish channel content:在指定的频道中发布消息。打开第二个窗口,在mychannel频道中发布消息"hello everyone"。
在这里插入图片描述
第一个窗口收到第二个窗口发布的消息。
在这里插入图片描述
psubscribe channel*:订阅的频道支持模式(pattern),可以进行批量订阅频道。

10.4、 redis持久化

10.4.1、两种方式

Redis支持两种方式的持久化

  • RDB方式(默认支持,无需配置)
    该机制是以指定的时间间隔内将内存中的数据集快照写入磁盘。
    优势:备份恢复
    劣势:数据丢失
    当客户端调用shutdown命令时,在redis服务器在关闭之前,会自动持久化内存中的数据到磁盘,除非在关闭redis时不进行持久化:shutdown nosave,或者强制杀死redis进程:kill -9 进程id。
  • AOF方式
    该机制将以日志的形式记录服务器所处理的每一个写操作(对数据产生改变的操作),在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。
    优势:高数据持久性,相较于RDB
    劣势:AOF在运行效率上往往会慢于RDB

10.4.2、AOF的使用

1.修改redis.conf的appendonly no为appendonly yes,开启AOF
2.清空数据库:flushall
3.设置一些数据
4.关闭redis:shutdown nosave
5.启动redis,并查看数据
在这里插入图片描述

10.4、 启动多个redis

方式一:

#开启默认redis服务器
./redis-server redis.conf
#开启指定端口号的redis服务器
./redis-server redis.conf --port 6380

在这里插入图片描述
关闭默认redis服务器:./redis-cli shutdown
关闭指定端口号redis服务器:./redis-cli -p 端口号 shutdown
在这里插入图片描述
方式二:复制redis.conf文件,修改端口【推荐使用】
1)cp redis.conf redis6380.conf
在这里插入图片描述
2)修改redis6380.conf中的启动端口为6380
在这里插入图片描述
3)启动redis时,指定配置文件redis6380.conf
在这里插入图片描述

10.5、主从复制(主服务器写入数据,从服务器只读)

1、创建两个空文本 redis6380.conf和redis6381.conf
命令:touch redis6380.conf redis6381.conf
在这里插入图片描述
2、编辑从服务器的配置文件
vim redis6380.conf

include redis.conf
#后端启动
daemonize yes
#端口号
port 6380
#指定主服务器的IP和端口
slaveof 127.0.0.1 6379

vim redis6381.conf

include redis.conf
#后端启动
daemonize yes
#端口号
port 6381
#指定主服务器的IP和端口
slaveof 127.0.0.1 6379

3、启动主从服务器
端口号为6379的redis为主服务器(Master)
端口号为6380和6381的redis为从服务器(Salve)
在这里插入图片描述
4、登录master服务器和slave服务器
info replication:查看服务器信息
在这里插入图片描述
在这里插入图片描述
测试主写数据,从读数据
登录master服务器,写入数据
在这里插入图片描述
登录slave服务器,读取数据
在这里插入图片描述
slave服务器写数据失败
在这里插入图片描述
slaveof no one:将当前slave服务器升为master服务器。
slaveof host port:将当前服务器添加到host port的从服务器中。

10.6、高可用哨兵Sentinel

Sentinel 系统有三个主要任务:
监控:Sentinel 不断的检查主服务和从服务器是否按照预期正常工作。
提醒:被监控的 Redis 出现问题时,Sentinel 会通知管理员或其他应用程序。
自动故障转移:监控的主 Redis 不能正常工作,Sentinel 会开始进行故障迁移操作。将一个从服务器升级新的主服务器。让其他从服务器挂到新的主服务器。同时向客户端提供新的主服务器地址。

1)在/usr/software/redis/bin下新建3个哨兵配置文件:
touch sentinel26379.conf sentinel26380.conf sentinel26381.conf
在这里插入图片描述
2)vim sentinel26379.conf:修改文件
mater服务器的ip:127.0.0.1,port:9379

#导入redis-7.0.0下的sentinel.conf
include /usr/software/redis-7.0.0/sentinel.conf
#需要改变的从这开始(覆盖)后端启动
daemonize yes
#master服务器的信息,IP,port,对mater服务器监视
sentinel monitor m6379 127.0.0.1 6379 2

vim sentinel26380.conf:修改文件

#导入redis-7.0.0下的sentinel.conf
include /usr/software/redis-7.0.0/sentinel.conf
#需要改变的从这开始(覆盖)后端启动
daemonize yes
port 26380
#master服务器的信息,IP,port,对mater服务器监视
sentinel monitor m6379 127.0.0.1 6379 2

vim sentinel26381.conf:修改文件

#导入redis-7.0.0下的sentinel.conf
include /usr/software/redis-7.0.0/sentinel.conf
#需要改变的从这开始(覆盖)后端启动
daemonize yes
port 26381
#master服务器的信息,IP,port,对mater服务器监视
sentinel monitor m6379 127.0.0.1 6379 2

3)修改完成之后,启动3个哨兵进程

./redis- sentinel sentinel26379.conf
./redis- sentinel sentinel26380.conf
./redis- sentinel sentinel26381.conf

在这里插入图片描述
4)手动干掉master,稍等1分钟,再次查看当前master/slave情况。
在这里插入图片描述
发现127.0.0.1:6380由slave升为master服务器,127.0.0.1:6381变为新master的slave。(这就是哨兵,发现master故障,从master的slave选择一个作为新master,把其他slave改为新master的slave,保证注册服务器架构)
在这里插入图片描述

10.7、redis设置密码

1、vim redis.conf:修改配置文件
修改前
在这里插入图片描述
修改后
在这里插入图片描述
2、.redis-server redis.conf:启动redis。./redis-cli:连接redis服务器。发现redis命令失效,没有权限。
在这里插入图片描述
3、访问有密码的 Redis 两种方式:
①:在连接到客户端后,使用命令:auth 密码,命令执行成功后,可以正常使用 Redis
在这里插入图片描述
②:在连接客户端时使用 -a 密码。例如 ./redis-cli -h ip -p port -a password
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐