Redis Linux环境 安装,卸载,启动,通用名令,数据结构,字符串类型操作
目录
Redis高级
速度快:10w ops(每秒10w读写),数据存在内存中,c语言实现,单线程模型
持久化方案:rdb和aof
多种数据结构:
5大数据结构
BitMaps位图:布隆过滤器 本质是 字符串
HyperLogLog:超小内存唯一值计数,12kb HyperLogLog 本质是 字符串
GEO:地理信息定位 本质是有序集合
支持多种编程语言:基于tcp通信协议,各大编程语言都支持
功能丰富:发布订阅(消息) Lua脚本,事务(pipeline)
简单:源代码几万行,不依赖外部库
主从复制:主服务器和从服务器,主服务器可以同步到从服务器中
高可用和分布式:
2.8版本以后使用redis-sentinel支持高可用
3.0版本以后支持分布式
Linux下安装redis
下载压缩包
wget http://download.redis.io/releases/redis-6.2.9.tar.gz
解压
tar -xzf redis-6.2.9.tar.gz
建立软链接
ln -s redis-6.2.9 redis
编译并安装
make&&make install
可以看到在当前文件夹下的src文件里多了很多执行文件
# 下列需要注意
redis-server redis服务器
redis-cli redis命令行客户端
redis-benchmark redis性能测试工具
redis-check-aof aof文件修复工具
redis-check-rdb rdb文件检查工具
redis-sentinel sentinel服务器,哨兵
卸载教程
查看redis进程
ps aux|grep redis
kill掉进程
kill 进程id
进入到redis目录
cd /root/redis
删除redis对应的文件
rm -f /root/redis/bin/redis* # 我是编译安装在/root/redis 目录下的
rm -f /usr/local/bin/redis*
删除对应的文件
rm -rf redis
redis启动方式
1.在redis目录下的src文件路径下
redis-server
# 输入完成后 redis服务会夯在那,不要关掉
查看进程方法
ps aux|grep redis
查看端口
netstat -antpl|grep redis # 报错先安装 yum install net-tools -y
2.动态参数启动
redis-serve --port 6379 #启动,监听6379端口
3.配置文件启动
先备份一下redis.conf
mv redis.conf redis.conf.bak # 到redis目录下执行
自己写一个redis.conf
vim redis.conf
daemonize yes
pidfile /var/run/redis.pid
port 6379
dir "/root/redis/data"
logfile 6379.log
命令解释
daemonizer yes # 是否守护进程启动 yes/no
port # 端口
dir # redis 工作目录
logfile # redis系统日志文件
创建data文件夹
mkdir data # 一定要在redis目录下
启动(是在后台运行不会夯在前台)
redis-server redis.conf
客户端连接命令
redis-cli -h 地址 -p 端口 # 连本地直接redis-cli
redis-cli -h 地址 -p 端口 info # 查看当前运行情况及版本
redis-cli -h 地址 -p 端口 ping # 返回PONG 则代表正常运行
连上客户端以后 输入
CONFIG GET * # 可以获取redis的配置信息
配置文件
一共可以查出296对配置文件 ,我们需要关注的
requirepass # 密码 如果是空 没有密码
bind # 地址 127.0.0.1 或0.0.0.0
dir # 工作目录
logfile # 日志文件 会在工作目录下
daemonize # 是否已守护进程运行
pidfile # 放的是进程id
maxmenory # 可以使用的最大内存
databases # 设置库的数量
dbfilename # rdb的持久化方案的存储文件
修改的方法
CONFIG SET requirepass 123456 # 密码修改成123456
注意同步到配置文件内
CONFIG REWRITE # 同步到redis.conf 里
# 设置密码后下次在连接必须输入密码
1. 连进去 输入 auth 密码
2. 链接时就直接指定密码 redis-cli -a 123456
redis的应用场景
作为缓存使用。
计数器 :网站访问量,转发量,评论数,因为是单线程模型不会出现并发安全问题
消息队列: 发布订阅,阻塞队列实现(简单的分布式,blpop) celery 的消息队列就是用的redis
排行榜: 有序集合(阅读排行,点赞排行,推荐(销量搞高的))
社交网络: 粉丝数,关注数
实时系统: 垃圾邮件处理系统,eg:白名单, 我们把能访问的邮箱放入白名单, 没见过的邮箱就可以加到垃圾邮件里。
地理位置信息:附近的人
redis通用命令
keys * # 打印出所有key
keys he* # 打印出he开头的key
keys he[h-l] # 打印出he开头后面第三个字母是h-l范围内的key
keys he? # 打印出he开头的第一个
dbsize # 统计总共有多少key
exists key # 是否存在 存在返回1 否则0
expire key 3 # 设置过期时间
ttl key # 查看过期时间
persist key # 去掉过期时间
type key # 查看数据类型
其他命令
info # 查看内存 cpu 主从相关
client list # 查看正在连接的客户端
client kill ip:port # 关闭链接
flushall # 清空所有
flushdb # 只清空当前库
select 数字 # 选择某个库
monitor # 记录操作日志 夯在前台
redis数据结构
string类型
raw 二进制
int 数字
embstr 字符串
hash类型
hashtable
ziplist # 压缩列表
list列表
linkedlist
ziplist # 压缩列表
set 集合
hashtable
intset
zset
skiplist
ziplist
redis跳跃表
redis 有序集合的底层实现
Redis字符串类型操作
字符串key value最大存储不能超过512m般建议100k以内
set name lxj # 添加 修改
get name # 获取
del name # 删除
incr age # 自增1
decr age # 自减1
incrby age 10 # 增加10
decrby age 10 # 减去10
set name lxj # 不管是否存在都设置
setnx name lxj # key不存在才设置
set name lxj nx #同上
set name lxj xx # key存在 才设置
mget key1 key2 key3 # 批量获取
mset key1 value1 key2 value2 key3 value3 #批量设置时间
getset name lqznb #设置新值并返回旧值 时间复杂度o(1)
append name 666 #将value追加到旧的value 时间复杂度o(1)
strlen name #计算字符串长度(注意中文) 时间复杂度o(1)
###6---其他:incrybyfloat,getrange,setrange
increbyfloat age 3.5 #为age自增3.5,传负值表示自减 时间复杂度o(1)
getrange key start end # 取范围内数据
setrange key index value #从指定index开始设置value值 时间复杂度o(1)
redis单线程为什么这么快
存内存操作
非阻塞IO(epoll模型) 自身实现了事件处理,不在网络io上浪费过多时间
避免线程切换和竞态消耗(抢锁)