数据库
首页 > 数据库> > Redis完整快速入门 看完就无敌!!!!!!

Redis完整快速入门 看完就无敌!!!!!!

作者:互联网

Redis

NoSQL

优点:易扩展,NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性,数据之间无关系,不需要设计数据库,这样就非常容易扩展,NoSQL数据库都具有非常高的读写性能。

大数据时代
3V:海量Volume,多样Variety,实时Velocity。
3高:高并发,高可扩,高性能。

4种类型

  1. 键值(Key-Value)存储数据库:这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。

  2. 列存储数据库:这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。

  3. 文档型数据库:JSON

  4. 图形(Graph)数据库:…
    在这里插入图片描述
    MongoDB
    MongoDB是一个介于关系数据库和非关系数据库之间的数据库,是一种文档型数据库。

Redis

Redis:remote dictionary server是一种key-value数据库,基于内存的数据结构存储系统,作用于数据库、缓存、消息中间件。

基本命令

ping #测试连接 返回pong
keys * #查看所有key值
set xxx xxx #设置key-value
get xxx #获取对应key的value
select x #切换数据库
dbsize #查看当前数据库大小
flushdb #清空当前数据库
flushall #清空所有数据库
exsist #是否存在对应key
move xxx x #移动key到对应的数据库下标
expire xxx x#使对应key 在指定秒内过期
ttl xxx #查询key剩余存活时间
type xxx #查询key类型

使用benchmark
在这里插入图片描述
在这里插入图片描述
基本配置
默认下使用第0个数据库,一共有16个数据库。
在这里插入图片描述
redis是单线程的且使用C语言开发,其是基于内存操作,redis受限于内存和带宽。

五大数据类型

string

append xxx xxx #添加
strlen xxx #获取长度
incr xxx #自增1
decr xxx #自减1
incrby xxx x #直接增加x
decrby xxx x #直接减少x

getrange xxx x x #获取指定范围字符串 -1全部
setrange xxx x x #修改指定范围字符串
setex xxx #set with expire
setnx xxx #set if not exsist
mset xx xx xx#批量设置值
msetnx #mset if not exsist 原子性操作,一起成功,一起失败
set user:1 {name:zhangsan,age:3} # user:1对象 value为json
mset user:1:name zzy user:1:age 21
getset #先get再set

List

#都是L开头
lpush xxx xxx #存入列表头部
ppush xxx xxx #存入尾部
lrange xxx x x #获取指定范围的
lpop xxx #移除头部值
rpop #移除尾部值
llen xxx #返回list长度
lrem list 1 one # #移除指定数量的value
ltrim x x #保留指定范围的元素,其他清除
rpoplpush xxx xxx #将一个list pop的值push到另外一个list
leset xxx x xxx #更新指定下标元素的值,前提是key存在
linsert xxx before|after xxx #将对应value插入到value前|后

set

#set中不能重复值
sadd xxx xxx #添加
sismember xxx xxx #判断set中是否存在value
smembers xxx #返回set中所有的元素
scard xxx #获取set中的个数
srem xxx xxx #移除指定set中的对应value元素
srandmember xxx x #随机获取指定set中x个元素
spop xxx #删除set中随机元素
smove xxx xxx x #将对应value的元素移动到另一set中

sdiff xxx xxx #差集
sinter xxx xxx #交集 共同关注
sunion xxx xxx #并集

hash

#key-map,value是一个map
hset xxx filed xxx # hset nameset name1 zzy
hget xxx xxx #hget nameset name1
hmset xxx xxx xxx xxx #hmset nameset name1 zzy nam2 tzq
hmget xxx xxx #hmget name1 name2
hgetall xxx # hgetall nameset
hdel xxx xxx #hdel namset name1
hlen xxx #获取hash元素数量
hexists xxx xxx #hexists nameset name1
hkeys xxx #获取所有key
hvals xxx #获取所有value
hincrby xxx xxx x #
hsetnx xxx xxx xxx # if not exsist

zset

#有序集合,在set上增加一个值s
zadd xxx x x #zadd myset 1 one 2 two
zrange xxx x x #获取指定范围 zrange myset 0 1
zrangebyscore xxx xx xx #

在这里插入图片描述
在这里插入图片描述

zcard #获取zset中的个数
zcount xxx x x #指定区间的元素数量

Geospatial

地理空间,多用于打车距离,附近的人,定位。

geoadd china:city 114.31 30.52 wuhan 106.71 26.57 guiyang
 #添加经纬度 纬度:-180到180 经度:-85.05到85.05
geopos xxx xxx #查询元素的值
geodist xxx xxx #两个元素之间的距离
georadius xxx xxx #china:city 110 30 1000 km withcoord count 3
georadiusbymember xxx xxx #以元素为中心,半径查找
geohash xxx xxx #将经纬度转为字符串,用于hash

HyperlogLog

基于基数统计算法,多用于user visit统计。

pfadd mykey a b c d e f g h i j #添加
pfcount mykey #统计元素个数
pfmerge mykey3 mykey mykey2 #将后两个集合的并集放入第一个集合

Bitmaps

位图,多用于打卡,统计用户信息,只有两种状态。

setbit daka 0 1 #daka的0位元素位1
getbit daka x #查看daka下某一下标元素的值
bitcount daka x x #指定范围内为1的元素个数

事务

Redis的事务是不保证原子性,没有隔离级别,所有的命令在事务中并不执行,直到使用exec。

开启事务:multi
入队:…
执行事务:exec
在这里插入图片描述
取消事务
在这里插入图片描述
编译异常:命令有错,整个事务中都不会执行。
运行异常:语法性错误,只有错误这条命令不会执行。
在这里插入图片描述

乐观锁

watch key #监视一个key值,对key加上锁,相当于乐观锁,在这个事务执行期间,其他线程对key修改,那么这个事务就不会成功
unwatch key #释放锁
#若使用watch提交事务失败,可以unwatch后再次watch获取最新值

jedis

开发中使用java操作redis。不做具体分析。

conf文件

包含其他conf文件
在这里插入图片描述
pid文件,如果以后台方式运行么久需要指定一个pid文件
在这里插入图片描述
日志级别:debug verbose notice warning
在这里插入图片描述
生成的日志文件,默认为标准输出。
在这里插入图片描述
默认16个数据库。
在这里插入图片描述
快照,在规定时间内执行多少次操作就会持久化到文件,redis是基于内存,断电就没了,必须要持久化数据。
save 900 1 (900秒内对一个key操作,持久化)
在这里插入图片描述
持久化error,是否还要继续工作。
在这里插入图片描述
是否压缩rdb文件。
在这里插入图片描述
是否校验rdb文件。
在这里插入图片描述
文件名和存储路径
在这里插入图片描述
设置密码,默认为空。
在这里插入图片描述
最大客户端连接数。
在这里插入图片描述
最大内存容量。
在这里插入图片描述
内存满后的处理策略。
在这里插入图片描述
在这里插入图片描述

redis持久化

rdb

满足save条件、执行flushall、退出redis都会产生一个dump.rdb文件,每次redis启动时,都会自动加载conf文件中的配置,在conf指定rdb文件路径即可。
fork出一个子进程来执行rdb文件的产生,这样适合大规模数据恢复,同时不会影响到主线程,但是fork出来会占用一定的内存空间,如果意外宕机,可能会造成数据丢失。
在这里插入图片描述

aof

append only file,默认下是关闭,将除了读命令的其他所有命令记录下来,恢复时就将文件中的命令全执行一遍,每次都是以append追加的方式添加命令,都会保存到appendonly.aof。
如果appendonly.aof出现错误,redis就启动不了,使用redis-check-aof,来校验aof文件。
在这里插入图片描述

优缺点

在这里插入图片描述

Redis发布订阅

一种消息通信模式,发送者发送消息,接受者接收消息,可以实现关注等功能。
一个client可以订阅多个发送者。
在这里插入图片描述
在这里插入图片描述
redis-server会维护一个字典,字典的键就算频道,而值就是链表,链表中包含订阅这个频道的订阅者。使用subscribe就是将订阅者加入到对应的链表中。

Redis主从复制

在这里插入图片描述
在这里插入图片描述

配置

使用info repilication命令查看当前redis1的主从信息。
在这里插入图片描述
配置当前redis变为指定redis的从slave。
在这里插入图片描述
在conf文件中配置,才是永久的 replication,使用命令行配置的,在slave机断开重启后就又会变为默认的master。
在这里插入图片描述
slave只能读
在这里插入图片描述

原理

在这里插入图片描述

哨兵模式

在没有配置哨兵模式下,如果master宕机,slave任然为slave,此时只能手动输入命令:slaveof no one,清除slave模式,然后其他redis需要重新slave of 指认master。若master在宕机后又重新上线,但是slave已经手动完成slaveof no one,此时任然会变为原来的模式。
在这里插入图片描述
在配置哨兵模式后: sentinel [ˈsentɪnl]
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个哨兵也许也会出现问题,采用多哨兵模式。
在这里插入图片描述
原理:通过心跳机制发现master宕机后,哨兵并不会马上faileover,而等到一定数量的其他哨兵也发现master宕机后,哨兵之间会投票(根据算法),然后就会执行failover,并通过发布订阅模式来切换监控的redis。当原来的master上线后,自动变为slave。
基本配置:

  1. 配置哨兵配置文件。
    在这里插入图片描述

  2. 启动哨兵:redis-sentinel xxxx # 哨兵配置文件
    在这里插入图片描述

Redis缓存穿透与雪崩

缓存穿透

在这里插入图片描述
解决
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

缓存击穿

在这里插入图片描述
解决
在这里插入图片描述

缓存雪崩

在这里插入图片描述
解决
在这里插入图片描述

标签:set,入门,redis,数据库,xxx,Redis,无敌,value,key
来源: https://blog.csdn.net/TheCarol/article/details/112664809