第1章 Redis介绍
1.关系型和非关系型数据库
关系型: MySQL
非关系型: Redis,mongo,Elasticsearch
2.Redis重要特性 AK47
1)速度快
c语言编写的
代码优雅简洁
单线程架构
内存型数据库
2)支持多种数据结构
字符串,哈希,列表,集合,有序集合
3)丰富的功能
天然计数器
键过期功能
消息队列
发布订阅
4)支持客户端语言多
php,java,go,python
5)支持数据持久化
所有在运行的数据都是放在内存里的
支持多种数据久化格式,RDB,AOF,混合持久化
6)自带多种高可用架构
主从,哨兵,集群
3.Redis应用场景-面试重点
1)缓存-键过期
把session数据缓存在redis里,过期删除
换用用户信息,缓存mysql部分的数据,用户先访问redis,如果redis没命中,在访问mysql,然后回写给redis
商城优惠卷过期
短信验证码过期
2)排行榜-列表&有序集合
热度/点击量
直播间礼物打赏排行榜
3)计数器-天然计数器
帖子浏览数
视频播放次数
评论次数
点赞/点踩
4)社交网络-集合
粉丝
共同好友/可能认识的人
兴趣爱好/标签
检查用户注册名是否已经被注册
5)消息队列-列表
ELK缓存日志
聊天记录
6)发布订阅
粉丝关注通知
消息发布
第2章 Redis的安装部署
1.目录规划
/opt/redis_6379/{conf,logs,pid} 安装目录,日志目录,pid目录,配置目录
/data/redis_6379/ 数据目录
2.下载安装
安装编译安装包
yum install gcc -y
mkdir /data/soft -p
cd /data/soft/
wget http://download.redis.io/releases/redis-5.0.14.tar.gz
tar zxf redis-5.0.14.tar.gz
cd redis-5.0.14
make #如果报错可以执行 make MALLOC=libc
make install
3.创建目录及配置文件
mkdir -p /opt/redis_6379/{conf,logs,pid}
mkdir -p /data/redis_6379
cat > /opt/redis_6379/conf/redis_6379.conf < daemonize yes bind 127.0.0.1 10.0.0.51 port 6379 pidfile /opt/redis_6379/pid/redis_6379.pid logfile /opt/redis_6379/logs/redis_6379.log EOF 4.启动命令 redis-server /opt/redis_6379/conf/redis_6379.conf ps -ef|grep redis netstat -lntup|grep 6379 5.登录 [root@db-51 ~]# redis-cli 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> get k1 "v1" 6.关闭redis redis-cli shutdown 第3章 使用systemd管理redis redis-cli shutdown groupadd redis -g 2000 useradd redis -u 2000 -g 2000 -M -s /sbin/nologin chown -R redis:redis /opt/redis* chown -R redis:redis /data/redis* cat >/usr/lib/systemd/system/redis.service< [Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target [Service] ExecStart=/usr/local/bin/redis-server /opt/redis_6379/conf/redis_6379.conf --supervised systemd ExecStop=/usr/local/bin/redis-cli shutdown Type=notify User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl start redis 第4章 优化警告 查看警告 cat /opt/redis_6379/logs/redis_6379.log 1.告警内容 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. # Server initialized # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. * Ready to accept connections 2.解决TCP backlog太低 cat /proc/sys/net/core/somaxconn echo '511' > /proc/sys/net/core/somaxconn cat /proc/sys/net/core/somaxconn 3.解决overcommit_memory echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf sysctl -p 4.解决Transparent Huge Pages (THP) echo never > /sys/kernel/mm/transparent_hugepage/enabled 解决报警消息,必须先关闭redis 写入开机自启中 vim /etc/rc.local 修改执行权限 chmod +x /etc/rc.d/rc.local 第5章 Redis全局命令 1.数据格式 键值对数据库 键:值 key:value 2.数据类型 字符串 哈希 列表 集合 有序集合 3.查看所有数据!!!工作里禁止使用!!! #测试命令 修改完配置后,启动redis redis-cli set k1 v1 set k2 v2 set k3 v3 #查看所有数据 127.0.0.1:6379> keys * 1) "k3" 2) "k2" 3) "k1" 4.查看一共有多少个数据 127.0.0.1:6379> DBSIZE (integer) 3 5.查看某个key是否存在 127.0.0.1:6379> EXISTS k1 (integer) 1 127.0.0.1:6379> EXISTS k4 (integer) 0 127.0.0.1:6379> EXISTS k1 k2 k3 k4 (integer) 3 返回值: 0 这个key不存在 1 这个key存在 N 查询的key存在N个 6.删除KEY 127.0.0.1:6379> del k0 (integer) 0 127.0.0.1:6379> del k1 (integer) 1 127.0.0.1:6379> del k2 k3 k4 (integer) 2 返回值: 0 这个key不存在 1 这个key存在,删除成功 N 存在N个key,删除成功N个 7.键过期 设置过期时间: 127.0.0.1:6379> EXPIRE k1 10 (integer) 1 127.0.0.1:6379> EXPIRE k100 10 (integer) 0 返回值: 1 设置过期时间成功 0 这个key不存在 查看key的过期时间: 127.0.0.1:6379> ttl k1 (integer) 9 127.0.0.1:6379> ttl k1 (integer) 8 返回值: -1 表示这个key永远不过期 -2 表示这个key不存在 N 表示这个key还有N秒过期 取消过期时间: 方法1: 重新设置这个key 127.0.0.1:6379> get k1 "v1" 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> ttl k1 (integer) -1 方法2: 取消过期命令 127.0.0.1:6379> ttl k1 (integer) 96 127.0.0.1:6379> PERSIST k1 (integer) 1 127.0.0.1:6379> ttl k1 (integer) -1 第6章 Redis字符串数据类型 1.插入一个Key set k1 v1 2.查看一个key get k1 3.插入多个Key mset k1 v1 k2 v2 k3 v3 4.查看多个key mget k1 k2 k3 5.天然计数器 加1操作: INCR k1 减1操作: DECR k1 加N操作: INCRBY k1 100 减N操作: INCRBY k1 -N 第7章 列表操作 1.插入列表 LPUSH list1 A B C RPUSH list1 D E F 2.查看列表长度 LLEN list1 3.查看列表内容 LRANGE list1 0 -1 4.删除元素 LPOP list1 RPOP list1 第8章 HASH操作 1.mysql和redis数据对比 mysql数据格式: user表 id name job age 1 boss it 18 2 wei it 24 3 cookz it 30 Redis HASH类型: key field1 value field2 value field3 value user:1 name boss job it age 18 user:2 name wei job it age 24 user:3 name cookz job it age 30 2.创建一个HASH数据 hmset user:1 name boss job it age 18 hmset user:2 name wei job it age 24 hmset user:3 name cookz job it age 30 3.查询所有数据 select * from user where id = 1; HGETALL user:1 4.查询指定字段数据 select name from user where id = 1; select name,job,age from user where id = 1; HMGET user:1 name HMGET user:1 name job age 第9章 集合操作 1.创建集合 SADD set1 1 2 3 4 SADD set2 1 3 5 7 2.取交集 SINTER set1 set2 3.取差异 SDIFF set1 set2 SDIFF set2 set1 4.取并集 SUNION set1 set2 5.查看成员信息 SMEMBERS set1 SMEMBERS set2 6.删除成员 SREM set1 1 第10章 有序集合操作 1.添加有序集合 ZADD linux7 1 bo ZADD linux7 1 lao6 ZADD linux7 1 he 2.计算成员个数 ZCARD linux7 3.计算某个成员分数 ZSCORE linux7 he 4.增加成员分数 ZINCRBY linux7 50 he 5.按照升序查看成员名次 ZRANK linux7 he 0 he 51 1 liu 52 2 zhang 101 5.按照降序查看成员名次 ZREVRANK linux7 he 0 zhang 101 1 liu 52 2 he 51 6.删除成员 ZREM linux7 he 7.返回指定排名范围的成员 ZRANGE linux7 0 -1 8.返回指定分数范围的成员 ZRANGEBYSCORE linux7 50 100 9.返回指定分数范围的成员同时显示分数 ZRANGEBYSCORE linux7 1 200 WITHSCORES