redis
keys *
exists
set name sun
get name
expire name 10
ttl name
del key
append key1 value 追加,如果不存在就是创建
incr key
incrby key 10
getrange key 0 -1 所有长度
setrange key key 1 xxx 这个就是替换
setex key 30 hello 设置30s
setnx key value 如果不存在设置 上面的是替换掉
mset mget
getset key val 获取并设置
-----------------------------------list-----------------
- 当做栈去执行
lpush list one
lrange list 0 -1
rpush list two
lpop list
rpop list
lindex list 0
rindex list 0
llen list
lrem list 移除几个 移除内容
ltrim list 1 2 截取
lset list 2 val 设置值
linsert mylist before val1 val2
----------------------------------set----------------- - set 中的值是不能重复的
sadd set val
smemers myset 查看所有的元素
sismember myset val
scard myset 获取个数
srem myset val 移除
srandmember myset 随机取出一个元素
srandmember myset 2
spop myset 弹出
smove myset myset2 val
sdiff
sunion
sinter
---------------hash----------------- - map集合 key-value
hset mysha key val
hget mysha key val
hdel mysha key 删除
hlen mysha
hexists mysha key
hkeys mysha
hvals mysha
hincr
hsetnx
hsetex
---------------------zset------------有序集合
-在set的的情况下家了个值 - zadd myset 1 one 可以用1去排序
zrange myset 0 -1
zrangebyscore slary -inf +inf
ZREVRANGEBYSCORE salary +inf -inf
zrem salary xiaohog
zrange salary 0 -1
zcard salary 个数
zcount salary 0 10
--------------geospatial--------------地理位置
geoadd china:city 116.40 39.90 beijing - 两级是无法添加 直接使用程序直接导入
geodist china:city beijing shagnhai km
georadius china:city 110 30 100 km 以一定的经纬度为中心去寻找
--------------------hyperloglog----------------
a{1,2,3,7}
b{1,2,3,4}
pfadd mykey a b c d e f
pfcount mykey
pfmerge mykey mykey2
---------------------bitmap-------------------------------
setbit sign 0 1
setbit sign 1 0
setbit sign 2 0
getbit sign 21
-----------------------事务--------------
原子性,一致性,隔离性,持久性
没事隔离级别的概念,单条原子,事务不保证原子性
multi
…
exec
discard 取消事务
编译异常:所有命令都不执行,就是代码的问题
运行时异常:语法性错误,其他命令可以执行看,错误抛出啦 — 字符串 incr
------------------------锁---------------
悲观锁:什么时候都会出问题,无论做什么就是会加锁
乐观锁:认为不会出问题,在使用功能数据的时候去判断数据是否变动 一般都是使用乐观锁
-乐观锁
watch money 监视money在事务中如果money被改变 监视就回失败
unwatch
-----------------------配置文件-------------------
include 配置文件导入进来
bind 127.0.0.1 绑定ip
port 6379
daemonize yes 守护进程的方式运行
pidfile 如果是守护进程的方式运行就要配置
loglevel notice 日志
logfile
databses 16
—快照
在规定的时间内执行了多少操作会持久化
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes 如果持久化出错,是否还要继续工作
rdbcompression yes 是否压缩rdb文件
rdbchecksum rdb文件校验
----replication
----security
requirepass 123456 设置密码
config get requirepass
config set requirepass
----client 客户端限制
----redis持久化
在指定的时间写入文件
rdb模式
save 60 5 都会触发一次 60秒内修改5次key
flushall 会自动触发 退出redis也是会生成rdb 恢复rdb就是把rdb文件放到目录下面就行
aof
将我们的所有的命令都记录下来,然后执行一遍 只需追加文件 大文件的时候就是会比较慢
默认是不开启的
aof的优点缺点:
每次修改都同步,默认开启的是每秒
缺点相对于数据文件来说aof远远大于rdb,修复的速度也比rdb慢
----redis发布订阅
消息发送者 频道 消息订阅
subscribe dingyue 订阅一个频道 就是一直会在哪里监听
publish dingyue nihao 发送一个信息
----主从复制
master slave
主以写为主
从读为主 一主二从
----主从复制
info replication 查看当前库的信息
配置主从 只需要配置从机 不需要配置从机
slaveof 127.0.0.1 6370
在配置文件中去配置
------------------------------哨兵模式-------------------
- 自动选举的模式
- 有一个独立的哨兵进程 去监视所有的redis 哨兵也有可能是集群 就是会去投票选举出一个
- 启动哨兵redis-sentinel kconfig/sentinel.conf
- failover 故障转移
------------------------------缓存穿透 - 缓存是在内存中
- 读的请求先在缓存中读取
- 所有的请求穿过缓存 都去查询mysql 导致mysql宕机
- 解决方式 布隆过滤器 在缓存中查询空对象
------------------------------缓存击穿 - 非常大的热点 一直被查询 所有的人都查询这个key
- 这个key
------------------------------缓存雪崩 - key 集体失效 所有的数据都消失了 不可能放在数据库中
redis高可用
限流降级
数据预热