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上浪费过多时间
避免线程切换和竞态消耗(抢锁)
posted @ 2023-04-18 14:53  李阿鸡  阅读(52)  评论(0编辑  收藏  举报
Title