Redis安装与使用[通俗易懂]

Redis安装与使用

大家好,又见面了,我是全栈君。

Redis安装与使用[通俗易懂]

介绍

Redis是可基于内存亦可持久化的Key-Value数据库(nosql数据库)
NoSQL,泛指非关系型的数据库

1. redis server 安装

yum install redis    # 安装
systemctl enable redis    # 设置开机启动
service redis start | stop | restart    # 相关操作

2. redis server 安全配置

vim /etc/redis.conf

bind 127.0.0.1 注释掉
requirepass XXX密码 #初始为注释代码
protected-mode no # 初始为yes
daemonize yes # 如果为no,则改为yes
重启后生效,再操作就会要求登陆验证

3. 测试连接server

redis-cli -h 127.0.0.1 -p 6379
auth XXX密码

验证了密码后,就可以进行相关操作

4. 安装php redis扩展

我是用的宝塔:对应PHP版本-> 插件安装-> redis安装
使用宝塔安装方式,前3个步骤可省略,因为宝塔会自动安装其客户端软件。
目录在/www/server/redis,配置文件以及相关命令都在里面。

redis持久化前沿

AOF和RDB的区别

RDB:dump完整的db进行持久化,用save m n进行周期持久,性能消耗小,速度快,并且dump出的db可以转存到其它地方使用。
官方默认开启:save 900 1,save 300 10,save 60 10000,设置了这三项,分别代表900s 有1次更改操作则写入rdb
AOF:存储写日志的方式进行持久,appendfsync everysec:每秒同步一次,性能消耗大,安全系数高。

AOF和RDB如何取舍

对数据安全性要求比较高,可以两者同时使用。
要求不是那么高的话,可以只开RDB,因为RDB是备份数据库文件方式,所以方便我们进行备份工作。

开启持久化后,是否影响客户端读取性能?

两者的持久化方式都是异步方式(单独开启了一个守护进程),所以不会影响客户端的性能。

自动触发的场景

  1. save:根据我们的save m n / appendfsync everysec配置规则自动触发:save 900 1 (900s周期,如果有1条更改操作(新增或修改),则进行持久化)

  2. slave:节点之间全量复制时,主节点发送rdb文件给从节点完成复制操作,主节点会触发bgsave

  3. shutdown:执行shutdown时,如果没有开启aof,也会触发

持久化的方式

RDB:redis db

在指定的save m n周期性对数据进行持久化。

RDB的2种执行方式

save:会阻塞当前Redis服务器,直到持久化完成,线上应该禁止使用。
bgsave:另开启一条bgsave主进程异步守护redis数据变化情况,会触发会多个子fork进程进行持久化,fork子进程会阻塞bgsave主进程,影响redis的少许性能。

AOF:appendonly filelog

记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。

1. AOF的2种执行方式

参考RDB方式。
appendfsync everysec:每秒同步一次,意味着有最多1秒的
他们在进行持久化的时候,都会生成2个文件(新文件/旧文件),保证在进行持久化过程中,有新的数据写入时,保持完整性,持久化完成后,新文件删除,继续用旧文件。

Redis数据类型

String(字符串)

  1. set:实例set / get。键为 name,对应的值为 wangkun。

  2. get:如上

redis 127.0.0.1:6379> set name "wangkun"
OK
redis 127.0.0.1:6379> get name
"wangkun"

Hash(哈希)

  1. hmset:实例中 hmset 设置了两个 field=>value 对

  2. hget:获取对应 field 对应的 value

redis> hmset myhash field1 "Wk" field2 "Wx"
"OK"
redis> hget myhash field1
"Wk"
redis> hget myhash field2
"Wx"

List(列表)

  1. lpush key value:左插入,添加一个元素到列表的头部

  2. rpush key value:右插入,添加一个元素到列表的尾部

  3. lrange key start stop:显示列表的指定内容,格式:lrange mylist 0 10

  4. lpop key:移出并获取列表的第一个元素

  5. rpop key:移除并获取列表最后一个元素

  6. blpop key timeout:移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

  7. brpop key timeout:移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

  8. blpop和brpop,因为是阻塞式的,连接中的超时时间设置为0时,即可无限等待,直到弹出消息

redis 127.0.0.1:6379> lpush mylist redis
(integer) 1
redis 127.0.0.1:6379> lpush mylist mongodb
(integer) 2
redis 127.0.0.1:6379> lpush mylist rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange mylist 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"

Set(无序集合)

  1. sadd:向集合添加元素

  2. smembers:显示列表的所有元素内容

redis 127.0.0.1:6379> sadd myset redis
(integer) 1
redis 127.0.0.1:6379> sadd myset mongodb
(integer) 1
redis 127.0.0.1:6379> sadd myset rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd myset rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers myset

1) "redis"
2) "rabitmq"
3) "mongodb"

Zset(Sorted Set:有序集合)

  1. zadd:向集合添加元素,格式:zadd key score member

  2. zrange / zrangebyscore:显示集合的所有元素内容(根据score进行排序)

redis 127.0.0.1:6379> zadd myzset 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd myzset 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd myzset 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd myzset 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> > zrangebyscore myzset 0 1000
1) "mongodb"
2) "rabitmq"
3) "redis"

设置 key 过期时间

expire keyname 5(单位秒)

列出所有的key

命令:KEYS pattern
列出所有的key

keys *

列出匹配的key

redis>keys apple* 
1) apple1
2) apple2

删除 key

del keyname

Redis 发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

订阅

开启客户端client1…5

redis 127.0.0.1:6379> subscribe channel1

Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1

发布消息

redis 127.0.0.1:6379> publish channel1 "Redis is a great caching technique"

(integer) 1

redis 127.0.0.1:6379> publish channel1 "Learn redis by runoob.com"

(integer) 1

# 订阅者的客户端会显示如下消息
1) "message"
2) "channel1"
3) "Redis is a great caching technique"
1) "message"
2) "channel1"
3) "Learn redis by www.zhuifanba.com"

Redis实现消息队列

可利用“List的阻塞功能” 或 “发布订阅” 功能实现消息队列功能。

List的阻塞功能

worker进行blpop某个List,只要有要处理的信息,立即处理。

发布订阅

客户端请求redis入队List数据,同时发布(PUBLISH)消息A到频道channel,此时已经订阅channel的worker就接收到了消息A,知道了List中有消息A进入,即可循环lpop或rpop来消费List中的消息。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111891.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python学得好、进监狱进的快_最经典的100部美剧,看到第一名瞬间服气!

    python学得好、进监狱进的快_最经典的100部美剧,看到第一名瞬间服气!(1999-Present)NBC80、摩登原始人TheFlintstones(1960-1966)ABC79、芝麻街SesameStreet(1969-Present)PBS78、奉子成婚MarriedwithChildren(1987-1997)Fox77、丑闻Scandal(2012-Present)ABC76、欢乐满屋FullHouse(1987-1995)…

    2022年9月30日
    1
  • 紫光同创国产FPGA学习之Power Calculator

    紫光同创国产FPGA学习之Power Calculator紫光同创里面的,芯片功耗计算。没看过,没用过。有兴趣瞄一下。我又不用再电池行业,对电源没啥要求。没用经验之谈,拷贝参考书。一、总体介绍  (一)PangoPowerCalculator总体介绍PangoPowerCalculator是用来计算用户设计产生功耗的软件,简称PPC,是集成在PDS中的一个组件。用户在完成design设计,经过综合、map、布局布线后,可以使用P…

    2022年8月30日
    2
  • 周末随笔「建议收藏」

    随便记录,聊以自慰这段时间的心思在工作上,也有一段时间没写一些东西了,内心有一些想法,搁置起来了。去年有段时间想着搞搞副业,说实话副业没赚到多少,几百上千的,还是自己能力不够。还是想办法先努力提高主业的收入,作为一个打工者,目前无非就是看哪里搬砖收益更好一点,能有更多点的成长而已。作为程序员,自己对技术的热情大多数只是停留在工作的使用上。这个技术工作中用了没有热情也是强制去了解去学习,要不就慢慢等着淘汰。单独靠热情驱动,还没发现自己真正对什么东西充满热情,有时候觉得可悲,无奈。工作对于目前的我来.

    2022年3月1日
    41
  • 与阿根廷一起学习Java Web四个发展:对于信息传输和信息传输

    与阿根廷一起学习Java Web四个发展:对于信息传输和信息传输

    2022年1月5日
    45
  • DIN 轴承标准目录[通俗易懂]

    DIN 轴承标准目录[通俗易懂]DIN118-1-1977传动元件.一般机械工程用托架滑动轴承.主要尺寸DrivingElements;PedestalPlainBearingsforGeneralMechanicalEngineeringApplications;MainDimensionsDIN1495-1-1983小功率电动机和功率小于37瓦的电动机用有满足特…

    2025年9月19日
    6
  • 女生学java开发难吗?女生适合学java吗?

    女生学java开发难吗?女生适合学java吗?女生学java开发?Java开发看上去是一项系统性很强、入门很难的“高大上”学科,前端、代码这些普通人基本不会接触到的名词,吓怕了众多初学者。大部分人对于Java程序员都有一个既定印象,那就是程序员都是男生。女程序员可以说是“稀有物种”,因为Java工作对于逻辑的要求很高,而这方面男生相对于女生比较有优势。现在女生从事程序员工作的也越来越多,在某些方面相对于男生也有优势。所以,小编就来给大家分析分析,女生学java开发难吗?女生适合学java吗?女生适合从事java吗?在很多人的潜意识里,认为女

    2022年7月7日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号