
Redis的安装和基本操作01
发布日期:2021-05-09 07:05:29
浏览次数:19
分类:博客文章
本文共 8718 字,大约阅读时间需要 29 分钟。
Redis做会话保持
Redis学习
一、Redis简介
1.redis是什么
Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储'NoSQL数据库'产品。Redis采用内存(In-Memory)数据集(DataSet) 。支持多种数据类型。运行于大多数POSIX系统,如Linux、*BSD、OS X等。redis就是非关系型数据库的一种,存储方式是:key:value
2.redis的作用
1.会话保持(键设置过期时间)2.缓存(放在数据库前面,memcache,mongodb),Redis数据存储在内存3.消息队列(kafka),一般与elk结合使用 利用Redis list类型
3.为什么要用Redis
1.redis'功能全面'2.redis企业使用率高
4.redis优点
1.高速读写 将所有数据存储在内存,单线程服务,使用C语言 #线程多,事件的处理速度不一定快 #redis性能稳定,硬件限制一般是内存2.部署简单,使用稳定3.'数据类型'丰富 String: 字符串类型 Hash: 哈希类型 List: 列表类型 Set: 集合类型 Sorted set: 顺序集合类型4.支持'持久化' 将内存的数据写入磁盘5.多种内存分配及回收策略(#例:回收过去的session占用的内存)6.支持事物、锁7.消息队列、消息订阅8.支持'高可用' 哨兵模式(类似于MHA)9.支持'分布式'分片集群,企业中最少5个节点 一个副本 分布式: 1.数据分开存储 2.数据分开读取 副本:另一个节点的从库10.支持的'客户端语言'很多 java,php,python,nodejs,C语言
5.redis帮助
官方网站:https://redis.io/下载网站:http://download.redis.io/releases/帮助网站:http://redisdoc.com/
6.缓存服务对比
#Memcached:1.优点:高性能读写、单一数据类型、支持客户端式分布式集群、一致性hash多核结构、多线程读写性能高。2.缺点:无持久化、节点故障可能出现缓存穿透、分布式需要客户端实现、跨机房数据同步困难、架构扩容复杂度高#Redis:1.优点:高性能读写、多数据类型支持、数据持久化、高可用架构、支持自定义虚拟内存、支持分布式分片集群、单线程读写性能极高2.缺点:多线程读写较Memcached慢#Tair:1.优点:高性能读写、支持三种存储引擎(ddb、rdb、ldb)、支持高可用、支持分布式分片集群、支撑了几乎所有淘宝业务的缓存。2.缺点:单机情况下,读写性能较其他两种产品较慢#对比结论:1.Memcached:多核的缓存服务,更加'适合于多用户并发访问'次数(访问次数较少的应用场景)。2.Redis:单核缓存服务,在单节点情况下,更加'适合少量用户(web),多次访问'的应用场景。
二、Redis使用场景
1.缓存 放在'数据库前面'2.会话保持(生存时间) 登录cookie、session 折扣券,代金券3.排行榜(#Redis values排序)(socket set类型)4.计数器(#Redis values运算)(string类型) 论坛帖子点赞点踩5.社交软件(集合)(set类型) QQ共同好友,微博共同爱好6.消息队列(list类型) 结合ELK做日志收集7.存储(hash类型)
三、redis搭建
1.下载软件包
[root@db01 ~]# rz redis-3.2.12.tar.gz或者[root@db01 ~]# wget http://download.redis.io/releases/redis-3.2.12.tar.gz
2.安装依赖
[root@db01 ~]# yum install -y gcc gcc-c++
3.解压移动
[root@db01 ~]# tar xf redis-3.2.12.tar.gz [root@db01 ~]# mv redis-3.2.12 /usr/local/[root@db01 ~]# ln -s /usr/local/redis-3.2.12 /usr/local/redis
4.安装
方法一[root@db01 ~]# cd /usr/local/redis[root@db01 redis]# make && make install方法二(交互式)[root@db02 ~]# cd /usr/local/redis/utils/[root@db02 redis]# ll-rwxrwxr-x 1 root root 8529 Jun 13 2018 install_server.sh端口配置文件名字日志路径数据目录可执行文件
5.启动redis
不指定配置文件启动[root@db01 redis]# ./src/redis-server &[root@db01 redis]# netstat -lntp tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 11759/./src/redis-s指定配置文件启动[root@db02 ~]# /usr/local/redis/src/redis-server /service/redis/6379/redis.conf连接Redis[root@db02 ~]# /usr/local/redis/src/redis-cli -a ''关闭Redis[root@db02 ~]# /usr/local/redis/src/redis-cli -a '' shutdown
6.连接redis
#配置环境变量,或者 cd /usr/local/redis/ && make install[root@db01 redis]# vim /etc/profile.d/redis.shexport PATH=/usr/local/redis/src:$PATH#连接[root@db01 redis]# redis-cli 127.0.0.1:6379>
7.关闭redis
[root@db01 redis]# redis-cli shutdown11759:M 03 Aug 10:20:20.535 # User requested shutdown...11759:M 03 Aug 10:20:20.535 * Saving the final RDB snapshot before exiting.11759:M 03 Aug 10:20:20.546 * DB saved on disk11759:M 03 Aug 10:20:20.546 # Redis is now ready to exit, bye bye...[1]+ Done ./src/redis-server[root@db01 redis]# redis-cli 127.0.0.1:6379> shutdown11851:M 03 Aug 10:20:59.580 # User requested shutdown...11851:M 03 Aug 10:20:59.580 * Saving the final RDB snapshot before exiting.11851:M 03 Aug 10:20:59.584 * DB saved on disk11851:M 03 Aug 10:20:59.584 # Redis is now ready to exit, bye bye...not connected> quit[1]+ Done ./src/redis-server
四、redis配置文件
1.配置
#默认的配置文件[root@db01 redis]# pwd/usr/local/redis[root@db01 redis]# ll-rw-rw-r-- 1 root root 46695 Jun 13 2018 redis.conf#创建reids配置文件目录(位置随意)[root@db01 redis]# mkdir /service/redis/6379 -p#编写配置文件[root@db01 redis]# vim /service/redis/6379/redis.conf#监听地址(注意顺序)bind 172.16.1.52 127.0.0.1#端口port 6379#后台启动daemonize yes#pid文件位置pidfile /service/redis/6379/redis_6379.pid#日志级别loglevel notice#指定日志文件logfile "/service/redis/6379/redis_6379.log"#密码requirepass 123#Redis持久化(不能配置较短的时间)save 900 1save 300 10save 60 10000[root@db02 redis]# grep -Ev '^#|^$' /usr/local/redis/redis.conf
2.指定配置文件启动
#配置文件位置随意[root@db01 redis]# redis-server /service/redis/6379/redis.conf
五、redis操作
1.基本操作
1.连接redis,默认进入'0'库 [root@db01 redis]# redis-cli 127.0.0.1:6379>2.查看所有数据,先查看数据量DBSIZE 127.0.0.1:6379> DBSIZE 127.0.0.1:6379> keys *3.添加数据 127.0.0.1:6379> set k1 v1 OK4.查看数据 127.0.0.1:6379> keys * 1) "k1" 127.0.0.1:6379> get k1 "v1"5.删除数据(通过删除key,删除名值对) 127.0.0.1:6379> keys * 1) "k1" 127.0.0.1:6379> DEL k1 (integer) 1 127.0.0.1:6379> keys * (empty list or set)6.修改数据 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> set k1 v11111 OK 127.0.0.1:6379> get k1 "v11111"7.追加数据(合并) 127.0.0.1:6379> APPEND k1 000000 (integer) 12 127.0.0.1:6379> get k1 "v11111000000"8.切换库,Redis数据库默认有16个库(0..15) 127.0.0.1:6379> SELECT 1 OK 127.0.0.1:6379[1]> SELECT 2 OK 127.0.0.1:6379[2]> SELECT 3 OK 127.0.0.1:6379> SELECT 16 (error) ERR invalid DB index (错误)ERR无效的数据库索引
2.密码的设置
1.配置文件配置密码,重启Redis [root@db01 redis]# vim redis.conf requirepass 1232.使用密码连接,为了安全可以创建多级目录来保存Redis密码 [root@db01 redis]# redis-cli -a 1233.或者登陆后输入密码 [root@db01 redis]# redis-cli 127.0.0.1:6379> AUTH 123 OK #查看key数量 127.0.0.1:6379> DBSIZE (integer) 20180414.redis连接后获取'配置文件'中密码 127.0.0.1:6379> CONFIG GET requirepass 1) "requirepass" 2) "123"5.redis连接后'临时修改'密码,无法保存,Redis重启后失效 127.0.0.1:6379> CONFIG set requirepass 234 OK [root@db01 redis]# redis-cli 127.0.0.1:6379> DBSIZE (error) NOAUTH Authentication required. #输入密码后才能查看 127.0.0.1:6379> auth 123 (error) ERR invalid password 127.0.0.1:6379> auth 234 OK
3.通用操纵
1.判断key是否存在 127.0.0.1:6379> EXISTS k1 (integer) 1 #存在则返回1 127.0.0.1:6379> EXISTS k22 (integer) 0 #不存在则返回0 #命令行判断可以是否存在(脚本使用) [root@db02 redis]# redis-cli -a 1 exists k1 (integer) 12.修改key的名字,rename 127.0.0.1:6379> KEYS * 1) "k1" 127.0.0.1:6379> RENAME k1 k100 OK 127.0.0.1:6379> KEYS * 1) "k100"3.查看数据类型,type 127.0.0.1:6379> TYPE k100 string #字符类型 4.设置生存时间,EXPIRE #以秒为单位 127.0.0.1:6379> set qiudao 666 127.0.0.1:6379> EXPIRE qiudao 10 (integer) 1 #以毫秒为单位 127.0.0.1:6379> PEXPIRE k100 10000 (integer) 15.查看生存时间,TTL 127.0.0.1:6379> TTL k100 (integer) 10 #正整数生存时间倒计时 127.0.0.1:6379> TTL k100 (integer) -1 #-1代表没有设置生存时间 127.0.0.1:6379> TTL k100 (integer) -2 #代表设置过生存时间已删除,或者已过期6.取消生存时间,PERSIST 127.0.0.1:6379> TTL qiudao (integer) 93 127.0.0.1:6379> PERSIST qiudao (integer) 1 127.0.0.1:6379> TTL qiudao (integer) -1 #命令行[root@db02 ~]# redis-cli -a 123 'bgsave'Background saving started
六、持久化
1.什么是持久化
将内存中的数据写入到磁盘,永久保存
2.持久化的模式
1.RDB模式(#Redis默认模式) 一般用dump.rdp文件备份2.AOF模式
3.RDB模式
可以在'指定的时间间隔内'生成数据集的'时间点快照'(point-in-time snapshot)
1)RDB工作模式
1.默认情况下,Redis保存数据集快照到磁盘,名为dump.rdb的二进制文件。你可以设置让Redis在N秒内至少有M次数据集改动时保存数据集,或者你也可以'手动调用SAVE或者BGSAVE命令。'save :阻止IO的写入bgsave :不会阻止IO的写入2.在上文中我们已经在配置文件中做过对应的配置:例如,这个配置会让Redis在'每个60秒内超过1000次键改动时'自动转储数据集到磁盘:save 60 10003.当 Redis 需要保存 dump.rdb 文件时,服务器执行以下操作: #Redis文件保存原理Redis 调用 fork() ,同时拥有父进程和子进程。子进程将数据集写入到一个临时的 RDB 文件中。当子进程完成对新 RDB 文件的写入时, Redis 用新RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。4.这种方式使得 Redis 可以从写时复制机制中获益。(类似于不停机更新)
2)配置RDB持久化
#编辑配置文件[root@db01 ~]# vim /service/redis/6379/redis.conf #监听地址bind 172.16.1.51 127.0.0.1#启动端口port 6379#Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程daemonize yes#pid文件路径pidfile /service/redis/6379/redis_6379.pid#日志级别(debug verbose notice warning)loglevel noticelogfile /service/redis/6379/redis_6379.log#设置redis密码requirepass 123#持久化数据文件存储位置dir /etc/redis/6379#rdb持久化数据文件名dbfilename dump.rdb#900秒(15分钟)内有1个更改,符合条件则帮助用户自动bgsave,关闭Redis自动持久化save 900 1#300秒(5分钟)内有10个更改save 300 10#60秒(1分钟)内有10000个更改save 60 10000[root@db04 src]# redis-server /service/redis/6379/redis.conf[root@db04 src]# vim /service/redis/6379/redis_6379.log[root@db04 src]# mkdir /etc/redis/6379 -p
3)使用RDB文件
1.先停止redis2.将rdb文件放到指定目录下(dbfilename指定的)3.启动redis,读取指定的rdb文件[root@db02 ~]# ls /usr/local/redis/dump.rdb#Redis在哪个目录下启动,就会读取哪个目录下的rdb文件(前提是没有配置dir /etc/redis/6379)#Redis关闭进程的时候才会在指定的路径生成dump.rdb文件,'小心'覆盖掉该目录下已经存在的dump.rdb文件
报错
1.redis无法启动,查看日志[root@db04 src]# tailf /service/redis/6379/redis_6379.log
总结
1.Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享2.redis基于单级才有数据库的概念,如果是集群的话,Redis将没有数据库的概念3.Redis是一个字典结构的存储服务器,可以将每个字典都理解成一个独立的数据库。4.每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库(可以通过配置文件支持更多,无上限),可以通过配置databases来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据库5.Redis存储服务器与数据库的区别Redis不支持'自定义'数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据。另外Redis也不支持为每个数据库设置不同的'访问密码',所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问。最重要的一点是多个数据库之间并不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据。5.redis特点数据库更像是一种命名空间,而'不适宜存储不同应用程序的数据'。比如可以使用0号数据库存储某个应用'生产环境中的数据',使用1号数据库存储'测试环境中的数据',但不适宜使用0号数据库存储'A应用'的数据而使用1号数据库'B应用'的数据,不同的应用应该使用不同的Redis实例存储数据。由于Redis非常轻量级,一个空Redis实例占用的内在只有1M左右,所以不用担心多个Redis实例会额外占用很多内存。
发表评论
最新留言
不错!
[***.144.177.141]2025年04月07日 10时02分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[备忘]21个演示展示强大的jQuery特效
2019-03-06
[备忘]域用户登陆出现“此工作站和主域间的信任关系失败”错误解决方法
2019-03-06
go package依赖图自动生成
2019-03-06
stout代码分析之二:None类
2019-03-06
hadoop压缩和解压
2019-03-06
Hyper和Vmware冲突,Device/Credential Guard 不兼容
2019-03-06
关于开箱即用的文档静态网站生成器VuePress
2019-03-06
温故知新,.Net Core遇见JWT(JSON Web Token)授权机制方案
2019-03-06
xmake v2.3.2 发布, 带来和ninja一样快的构建速度
2019-03-06
继续聊WPF——用Blend自定义Listview控件的列表头
2019-03-06
Windows Phone开发(8):关于导航的小技巧
2019-03-06
【WPF】制作自定义的列表项面板
2019-03-06
【.net 深呼吸】启动一个进程并实时获取状态信息
2019-03-06
【.net 深呼吸】项目中是否有必要删去多余的引用
2019-03-06
【Win 10 应用开发】在后台播放视频
2019-03-06
【ASP.NET Core】浅说目录浏览
2019-03-06
OO_Unit2 多线程电梯总结
2019-03-06
mybatis源码分析:Mapper接口是什么
2019-03-06
mybatis源码配置文件解析之五:解析mappers标签(解析class属性)
2019-03-06
git操作之二:git restore
2019-03-06