Linux上怎样安装gcc
Redis安装
更改redis.conf配置文件
./bin/redis-server ./redis.conf //启动服务
ps -ef | grep -i redis //查看进程
./bin/redis-cli -a root //加密码进行访问redis
keys * //查看键值对
set key value //添加
mset key value key1 value ... ... //设置多个值
mget key1 key2 key3 ... //查看多个值
del key //删除
get key //查看value
getset key value //先get再set
dump key //查看序列化的值
exists key //是否存在
pexpire key 过期时间 //给key设置存活时间
persist key //移除过期时间
ttl key //查看key过期时间
select 数据库代号数字 //切换数据库
append key 追加的字符串 //字符串追加
strlen key //查看字符串长度
randomkey //产生随机key
rename key 新key //改名字
type key //查看key的类型
setex key 过期时间 value //存在设置值和过期时间
setnx key value //不存在设置值,存在不执行
msetnx k1 v1 k2 v2 ... ... //原子操作,一起成功,一起失败
getrange key 开始位置 结束位置 //字符串截取
setrange key 插入的位置 插入的内容 //替换字符串
incr //自增
incrby key 数值 //自增多少
decr //自减
decrby key 数值 //自增多少
哈希Hash存取值
hset key 属性 值 //hmset可以存多属性
hget key 属性 //hmget可以取多属性
hgetall key //取全部值
hkeys key //获取所有hash表的属性
hlen key //获取hash表中属性的数量
hdel key 属性 //删除hash的一个属性
hexists Hashkey key //查看hash中的某个key是否存在
hkeys Hashkey //查看hash中所有的key
hvalues Hashkey //查看hash中所有的value
hincrby Hashkey key 自增的数(加-号就是自减) //自增hash中的某个字段
List集合
lpush 名 值1 值2... //从头部插入
rpush 名 值1 值2... //依次插入
lrange 名 开始索引 结束索引 //查看范围值
lindex 索引号 //查看下标所在的值
pop 名 //删除l,r,bl
lset 名 索引 新值 //修改
lrem key 几个 值 //移除list中的几个相同值
ltrim key 起始下标 末下标 //保留截取的list数据
rpoplpush key newkey //将最右边的值移动到新集合newkey左边元素中
Set集合(无序)
sadd 名 值1 值2... //添加数据
scard 名 //查看长度
smembers 名 //查看值
sismember 名 值 //查看值是否存在
srandmember key [数值] //返回集合中一个或多个随机数,加上数值是显示多少条随机数
srem 名 值1 值2... //删除数据
spop 名 值... //随机删除数据
smove 名1 名2 值 //把名1中的值移动到值2中
//在命令后加store表示 ????store 新Set 名1 名2
sdiff 名1 名2 //差集
sinter 名1 名2 //交集
sunion 名1 名2 //并集
ZSet有序集合(按序号排序)
zadd 集合名 序号1 值1 序号2 值2 .... //添加
zrange 集合名 开始 结束 //正序查询
zrevrange 集合名 开始 结束 //反序查询
zcount 集合名 最小序号 最大序号 //查询区间有多少数据
订阅频道
subscribe 频道名 //关注频道
publish 频道名 发送的消息 //频道向客户发送消息
select 数据库 //数据库的切换
move key 数据库索引 //移动数据到数据库
flushdb //清除当前数据库的所有key
flushall //清除整个Redis的数据库所有key
multi //进入事务,之后的操作会进入队列,提交事务按顺序执行队列
exec //提交事务,如果事务中有命令出错(隐藏性报错除外),那么事务执行不成功
discard //取消事务
watch key //在事务中监视key,相当于乐观锁,修改的时候会加上之前的值,如果其它地方修改key值变了,至命令不成功,则该事务不会成功
使用UDF函数,数据库触发器保持Redis和数据库同步
redis主从复制,解决普通的高并发和高可用
Redis集群
修改redis.conf配置文件中的
bind 127.0.0.1 //注释掉,允许其他IP访问
port 端口号
daemonize yes //允许后台运行
pidfile /var/run/redis_端口号.pid
cluster-enabled yes //支持集群
cluster-config-file nodes-端口号.conf
将redis-trib.rb复制到/usr/local/bin/目录下 //相当于windows下的环境变量
redis-trib.rb create --replicas 1 127.0.0.1:端口号 //执行
redis5版本后不能用
redis-cli -h 127.0.0.1 -c -p 7001
info replication //查看当前状态
cluster nodes //查看所有节点信息
Redis配置文件讲解
网络
bind 127.0.0.1 #绑定的IP
protected-mode yes #保护模式
port 6379 #端口设置
通用GENERAL
daemonize yes #以守护进程的方式运行,默认是no,我们需要自己开启为yes!
pidfile /var/run/redis_6379.pid #如果以后台的方式运行,我们就需要指定一个pid文件
loglevel notice #日志
logfile "" #日志的文件名
databases 16 #数据库的数量,默认是16个数据库
always-show-logo yes #是否总是显示LOGO
快照
持久化,在规定的时间内,执行了多少次操作,则会持久化到文件.rdb,.aof
# 如果900秒内,如果至少有一个key进行了修改,我们及进行持久化操作
save 900 1
# 如果300秒内,如果有10个key进行了修改,我们及进行持久化操作
save 300 10
# 如果60秒内,如果有10000key进行了修改,我们及进行持久化操作
save 60 10000
stop-writes-on-bgsave-error yes #持久化如果出错,是否还需要继续工作
rdbcompression yes #是否压缩rdb文件,需要消耗一些cpu资源!
rdbchecksum yes #保存rdb文件的时候,进行错误的检查校验!
dir ./ #rdb文件保存的目录
requirepass 123456 //配置文件给redis设置密码
config set requirepass “123456” //命令给redis设置密码
auth 123456 //使用密码进行登录
持久化
appendonly no #默认是不开启aof模式的,默认是使用rdb方式持久化的,在大部分所有的情况下,rdb完全够用!
appendfilename "appendonly.aof" #持久化的文件的名字
appendfsync always #每次修改都会sync,消耗性能
appendfsync everysec #每秒执行一次sync,可能会丢失这1s的数据,默认!
appendfsync no #不执行sync,这个时候操作系统自己同步数据,速度最快!
触发机制
1.save的规则满足的情况下,会自动触发rdb规则
2.执行flushall命令,也会触发我们的rdb规则
3.退出redis,也会产生rdb文件
aof会记录所有的命令,文件比rdb大,执行效率不如rdb,但完整性比较好!
在主从复制中,rdb就是备用了!而aof一般不使用
Redis的发布订阅模式
subscribe 频道 //订阅一个频道
publish 频道 消息 //发布消息到哪个频道
Redis集群
集群配置需要让从机认老大(slaveof 主机地址 主机端口),主机不用修改
info replication:查看集群状态
使用命令配置是暂时的,配置文件是永久的。
主机是写,从机是只读
如果是使用命令行来配置的主从,那么从机如果重启了,就会变为主机,如果再次变为从机,会先从主机同步所有数据
全量复制:复制全部的数据
增量复制:复制修改的数据
如果主机断开了连接,我们可以使用slaveof no one让自己变为主机,如果老大回来了,只能重新连接。
哨兵模式(自动选取老大)
随机投票,票数最高的为主机
配置文件
sentinel monitor myredis 127.0.0.1 6379 1
启动哨兵模式:redis-sentinel 配置文件
如果主机回来了,只能归并到新选的老大当手下
哨兵模式主要配置文件解释
# 端口
port 26379
# 是否后台启动
daemonize yes
# pid文件路径
pidfile /var/run/redis-sentinel.pid
# 日志文件路径
logfile "/var/log/sentinel.log"
# 定义工作目录
dir /tmp
# 定义Redis主的别名, IP, 端口,这里的2指的是需要至少2个Sentinel认为主Redis挂了才最终会采取下一步行为
sentinel monitor mymaster 127.0.0.1 6379 2
# 如果mymaster 30秒内没有响应,则认为其主观失效
sentinel down-after-milliseconds mymaster 30000
# 如果master重新选出来后,其它slave节点能同时并行从新master同步数据的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保守的设置为1,同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。
sentinel parallel-syncs mymaster 1
# 该参数指定一个时间段,在该时间段内没有实现故障转移成功,则会再一次发起故障转移的操作,单位毫秒
sentinel failover-timeout mymaster 180000
# 不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
sentinel deny-scripts-reconfig yes
哨兵模式优缺点
优点:
1、哨兵集群,基于主从复制模式,所有的主从配置优点,它都有
2、主从可以切换,故障可以转移,高可用性的系统
3、哨兵模式就是主从模式的升级,手动到自动,更加健壮
缺点:
1、Redis不好在线扩容的,集群容量一旦到达上限,在线扩容就十分麻烦
2、哨兵模式的配置繁琐
Redis缓存穿透和击穿,雪崩
缓存穿透是大量请求访问不存在的数据
缓存空数据,布隆过滤器
缓存击穿是缓存中一个热点数据失效,大量请求同一时间访问该热点数据
热点数据永不失效,访问数据库时加上分布式锁
缓存雪崩是大量缓存数据失效,Redis宕机,大量请求同时访问数据库
redis高可用,限流降级,缓存(数据)预热
布隆过滤器
布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力。