redis 入门学习

redis 数据类型(5种常用)

类型KeyValue特点
stringStringString可以包含任何数据(JSON)
hashStringMap<String, String>相当于Java的Map
listStringLinkedList字符串双向列表,按照插入顺序排序, 可重复 存取有序
setStringHashSet字符串无序集合, 不可重复 存取无序
zsetStringTreeSet字符串有序集合, 按分数(score)排序, 不可重复 存取无序

string

基本操作

  • 添加修改数据
set key value				
  • 查询数据
get key value
  • 删除数据
del key 
  • 添加修改多个数据
mset key1 value1 key2 value2 ... 
  • 查询多个数据
mget key1 key2 ... 
  • 获取数据字符的长度
strlen key 
  • 追加信息到原始数据后 (如果没有原始数据 则新建)
append key value

扩展操作

  • 解决一张表数据量过大问题,将一张表拆分成多张表(设置主键不唯一)
增加或减少有效值
incr(decr) key
incrby(decrby) key increment
incrbyfloat key increment    (可正可负可小数) 
  • 解决每天投票(设置数据的生命周期)
设置数据具有指定的生命周期
setex key seconds value
psetex key milliseconds value

hash

一个存储空间保存多个键值对数据(典型存取对象信息)

  • 应用场景: 购物车,实现抢购

基本操作

  • 添加/修改数据
hset key filed value
  • 查询数据
hget key filed
hgetall key	
  • 删除数据
hdel key filed1 [filed2]
  • 添加/修改多个数据
hmset key filed1 value1 filed2 value2
  • 查询多个数据
hmget key filed1 filed2 ...
hgetall key	
  • 删除数据
hdel key filed1 [filed2]
  • 获取hash表中的字段数量
hlen key
  • hash表中是否存在指定字段
hexists key filed

扩展操作

  • 获取hash表中的所有字段名或字段值
hkeys key
hvals key 
  • 设置指定字段的数值增加指定值
hincrby key filed increment
hincrbyfloat key filed increment

set

存储大量数据,高效的存储机制,便于查询
于hash的存储结构完全相同,只存键,不存值(nil)

  • 应用场景:网站访问量,黑白名单

基本操作

  • 增加数据
sadd key member...
  • 获取全部数据
smembers key
  • 删除数据
srem key member
  • 获取集合中的数据总量
scard key
  • 判断是否包含指定数据
sisnumber key number

扩展操作

  • 随机获取指定数量的数据
srandmember key [number]
  • 随机获取某个数据并移出集合
spop key
  • 两个集合的交,并,差集
sinter key1 key2
sunion key1 key2
sdiff key1 key2
  • 求两个集合的交,并,差集并保存到指定集合
sinterstore destination key1 key2
sunionstore destination  key1 key2
sdiffstore destination  key1 key2
  • 将指定数据从原集合中移到指定集合
smove source destination member

sorted_set

有序展示
与set相比多了排序字段(score)

基本操作

  • 添加数据
zadd key score1 member1 [score2 member2] 
  • 获取全部数据
zrange key start stop [WITHSCORES] (可带排序字段)
zrevrange key start stop [WITHSCORES]
  • 删除数据
zrem key member1 ...
  • 按条件获取数据
zrangebyscore key min max [WITHSCORE] [LIMIT]
zrevrangebyscore key max min [WITHSCORE]
  • 按条件删除
zremrangebyscore key min max
zremrangebyrank key start stop(按索引删除)
  • 获取集合数据总量
zcard key
zcount key min max
  • 集合交并操作
zinterstore destination numkeys key [key ...](numkeys是几后面就需要跟几个key)
zunionstore destination numkeys key [key ...]
聚合操作:SUN  MAX MIN
zinterstore destination numkeys key [key ...] aggregate SUN\MAX\MIN

扩展操作

  • 获取数据对应的索引(排名)
zrank key member
zrevrank key member
  • score值的获取与修改
zscore key member
zincrby key increment member

通用命令

key

基本操作

  • 删除指定key
del key
  • 判断key是否存在
exists key
  • 获取key的类型
type key

扩展操作

  • 为指定key设置有效期
expire key seconds
pexpire key milliseconds
expireat key seconds-timestamp
pexpireat key milliseconds-timestamp
  • 获取key的有效期
ttl key
pttl key
  • 切换key从时效性到永久性(持久化)
persist key
  • 查询key
keys pattern (*?[])
  • 为key改名
rename key newkey
renamex key newkey(判断是否存在)
  • 对所有key排序
sort

数据库通用指令

基本操作

  • 切换数据库(一共有16个数据库 0~15)
select index
  • 数据移动(剪切操作)
move key db
  • 数据清除
dbsize
flushdb
flushall

Jedis

客户端连接Jedis

//连接redis
Jedis jedis = new Jedis("localhost",6379);
//操作redis
jedis.set("name","helloworld");
jedis.get("name");
//关闭redis
jedis.close();

redis持久化

RDB

  • save 手动进行一次保存,会生成一个.rdb数据文件
    save指令会阻塞当前的redis服务,知道RDB过程完成为止,会造成长时间的阻塞
  • bgsave 手动启动后台保存操作 针对save阻塞问题的优化
  • 配置 save second changes 限定时间范围内key的辩护士数量达到指定数量进行持久化
    在conf文件中配置
优点: 
RDB是一个紧凑压缩的二进制文件,存储效率高,适用于数据备份,全量复制等场景
恢复数据比AOF快很多
缺点: 
无法做到实时持久化,很可能丢失数据;
数据量巨大时,效率非常低,IO性能较低
bgsave每次执行都要执行fork操作创建子进程,损失性能
多版本EDB文件格式不统一,可能会出现不兼容的情况

AOF

  • 以独立日志的方式记录每次写命令,重启时再重新执行AOOF文件中的命令,达到数据恢复.
    与RDB相比:改记录数据为记录数据产生的过程
  • 解决了数据持久化的实时性,目前redis持久化的主流方式

AOF持久化策略

  • always (每次)
    每次操作都同步到AOF文件中,数据零误差,性能较低
  • everysec(每秒)
    每秒将缓存区的指令同步到AOF文件中去,数据准确性较高,性能较高
    在系统突然宕机的时候丢失一秒的数据
  • no(系统控制)
    由系统控制每次同步到AOF文件的周期,过程不可控

AOF功能开启

配置:appendonly yes|no (默认no)
作用:是否开启AOF持久化功能,默认不开启
配置:appendfsnc always|everysec|no

AOF重写

将多条指令转化成最终结果指令

  • 作用
    减低磁盘占用,提高磁盘利用率
    提高持久化效率,减低持久化写时间,提高IO性能
    降低数据恢复用时,提高数据回复率

事务

将一系列预定命令包装成一个整体(一个队列),执行时按照添加顺序依次执行,不被打断或者干扰

事务基本操作

  • 开启事务
multi
作用:设定事务开始的位置,后续的所有命令都加到事务中
  • 执行事务
exec
作用:设定事务结束的位置,并执行事务,于multi成对出现使用
  • 取消事务
discard
作用:终止当前事务的定义,在multi后,exec前

  • 对key添加监视锁,在执行exexc前如果key发生了变化,终止事务的执行
watch key1 [key2 ...]
  • 取消所有对key的监视
unwatch

分布式锁

  • 使用setnx设置一个公共锁
setnx lock-key value  (value代表线程id  防止别人删除掉你的锁)
操作完毕后通过del操作释放锁

死锁的解决方案

  • 使用expire为锁key添加时间限定,到时自动释放锁
expire lock-key second
pexpire lock-key millionseconds

删除策略

数据删除策略

定时删除 惰性删除 定期删除

逐出算法

  • 最大可用内存
maxmemory 
占用物理内存的比例,默认值为0  不限制
  • 每次选取删除的数据个数
maxmemory-samples
选取数据时并不会在全库扫描,
  • 删除策略
maxmemory-policy
达到最大内存后,对挑选出来的数据进行删除策略

八种策略:

  • 检测易失数据(可能会过期数据)
    volatile-lru:最近最少使用数据
    volatile-lfu:最近使用次数最少数据
    volatile-ttl:即将过期数据
    volatile-random:随机数据
  • 检测全库数据(所有数据集)
    allkeys-lru:最近最少使用数据
    allkeys-lfu:最近使用次数最少数据
    allkeys–random:随机数据
    *放弃数据驱逐
    no-enviction(驱逐):禁止驱逐

高级数据类型

bitmaps

基本操作

  • 获取指定key对应偏移量上的bit值
getbit key offset
  • 设置指定key对应偏移量上的bit值,value只能是0或1
setbit key offset value

扩展操作

  • 对指定key按位进行交|并|非|异或操作,并将结果保存到destkey中
bitop op destkey key1 [key2 ...]
op:    and:交   or:并   not:非    xor:异或
  • 统计指定key中1的数量
bitcount key [start end]

HperLogLog

基本操作

  • 添加数据
pfadd key element [element ...]
  • 统计数据
pfcount key [key ...]
  • 合并数据
pfmerage destkey sourcekey [sourcekey ...]

GEO

基本操作

  • 添加坐标点
geoadd key longitude latitude member [longitude latitude member  ...]
  • 获取坐标点
geopos key member [member ...]
  • 计算坐标点距离
geodist key member1 member2 [unit]
  • 根据坐标求范围内的数据
georadius key longitude latitude radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count]
  • 根据点求范围内的数据
georadiusbymember key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count]
  • 获取指定点对应坐标的hash值
geohash key member [member ...]

redis集群

主从复制

哨兵模式

集群

解决方案

缓存预热

系统启动前,提前将高热度的缓存数据加载到缓存内存中.避免大量请求,先查询数据库,再缓存数据的问题

缓存雪崩

瞬间过期数据量太大,导致对数据库服务器造成巨大压力,甚至崩溃.
方案:通过随机值设置过期时间.超热数据设置永久性
监控访问量,热度突然增大,延长过期时间
加锁

缓存击穿

单个高热度数据过期的瞬间,数据访问量较大,未命中redis后,发起大量对数据访问的请求,导致对数据库服务器造成压力
方案:预防为主
监测访问量,延长过期时间
加锁

缓存穿透

访问不存在的数据,跳过数据缓存阶段,每次访问数据库,都对数据库服务造成压力
方案:缓存null,设定短时限
布隆过滤器(白名单策略)
key加密

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值