Redis学习笔记(上)

Redis学习笔记(上)

导读

本篇内容适合初学redis的人群使用,本篇内容不讲比较深入的东西只普及基础的概念;后续会逐步深入。

1. Redis安装和使用

  • Redis和可视化界面的安装,点击引用的地址就能找到了

Redis安装地址教程
Redis可视化界面安装教程
-> 可视化操作界面安装下载(可装可不装,主要是方便看值):常用的一般是RedisStudio或者是Redis Desktop Manager(推荐这个Manager非常好用就是安装包比较难找,大部分都需要收费)

  • Redis使用打开安装目录–》先运行redis-sercer.exe启动服务,再运行redis-cli.exe指令窗口–》打开可视化界面RedisStudio\n在这里插入图片描述效果图如下:在这里插入图片描述redis-cli.exe用来使用操作指令的,操作命令这个后面会讲,有需要可以点击目录快速定位。这里的可视化是用Reids Studio;

在这里插入图片描述
在这里插入图片描述
这里每个db都是一个库,库里面能看到你设置的值
在这里插入图片描述
在Redis-cli.exe输入命令,可视化会显示值,显示不出来重新开可视化界面就好了在这里插入图片描述

2. 什么是Redis

  • 什么是Redis
    Redis全称(Remote Dictionary Server),远程字典服务,是一个开源且用C语言编写,支持网络,可基于内存可持久化的日志型,Key-Value数据库,并且提供多种语言的API。

  • Redis的特点

  1. 有于是基于C语言编写,可以完全基于内存,绝大部分请求是净内存操作,非常的快速
  2. 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程(一个进程内有多个线程)切换的CPU消耗
  3. 非阻塞的IO多路复用机制

3. Redis数据类型

类型说明
String 字符串使用Redis字符串的命令管理字符串
hash 哈希Redis hash是一个String类型的field和value的映射表,hash一般都是用来存对象的,Redis每个hash可以存232-1键值对约40多亿
List 列表Redis列表是简单的字符串列表,可以插入排序。
Set 集合Redis的Set是String类型的无序集合,集合内的元素唯一,一般用于去重
sorted Set 有序集合Redis 有序集合和集合一样也是String类型元素的集合,集合元素唯一

4. 常用的命令

这里我只列举比较常用的命令,其它一些不常用的如果需要使用到可以自行百度或者到下面这个老哥哪里查看;直接点击我引用的地址就能进去了

Redis命令大全

1. String

使用场景:几乎所有场景都能使用

命令描述语法
set赋值set key value
get取值get key value
incr自增+1incr key
strlen返回key的值和长度strlen key
setrange字符串替换setrange key start value
getrange获取指定字符串getrange key start end
mset同时设置多个key valuemset key value [key1 value1…]
mget同时获取多个key valuemget key [key1…]

2. Hash

使用场景:用来缓存一些对象,商品信息,用户信息等等

命令描述语法
hset给key中的field字段赋值hset key field value
hget获取以中filedhget key field
hexists判断key中是否存在fieldhexists key field
hlen获取key中的field的数量hlen key
hdel删除key字段中的fieldhdel key field [field1,]

3. List

使用场景:收藏列表,商品评论,队列

命令描述语法
lpush在list头部添加值lpush key value [value1…]
rpushlist在尾部添加值rpush key value [value1…]
lrange获取指定位置的数据lrange key start end
lpop从头部弹出key的值(删除)lrange key start end
rpop从尾部弹出key的值(删除)rpop key
rpoplpush从一个list的尾部弹出插入到另外一个list的头部rpoplpush source destnation

4. Set

使用场景:用来做公众号,微博之类 的可以让别人关注自己的;
具体实现思路,讲a用户关注的人放在一个set中,粉丝根据六度分割理论放在一个集合里

命令描述语法
sadd添加值sadd key member [menber1]
smembers遍历集合smembers key
scard获取key 的成员数目scard key
srem删除指定成员srem key member [member1…]
sismenber判断成员是否存在sismember key member
spop随机弹出一个值(删除)spop key

5. ZSet

使用场景:存储班级成绩表,工资排序

命令描述语法
zscore获取指定成员的分数zscore key member

6. 其它常用命令

命令描述例子
echo在命令行打印内容echo context
keys获取所有keykeys pattern
exists判断key是否存在exists key
rename给key重新命名rename key newkey
renamenx给key重新命名,当newkey存在是不操作rename key newkey
expire设置key的存活时间expire key sexonds
expireat设置key的存活时间(年月日)expireat key timestamp
type返回key中的vakue的类型type key

5. Redis事务

Redis事务的特征:

  • 单独的隔离操作:事务中的送一命令都会序列化,按顺序执行。事务在执行过程中不会呗客户端送来的命令打断锁
  • 没有隔离级别的概念:队列中的命令没有提交之前都不会有实际的操作
  • 不保证原子性:redis同一个事务中如果有一条执行失败,其它命令不会回滚,成功的继续执行,失败的显示失败
  • redis的事务不会回滚,如果要回滚需要判断后手动回滚;(重点掌握这个)

事务的常用命令:

命令作用
multi开启事务
discard取消事务,取消所有事务命令
watch key [key1…]监视一个或者多个key,如果在事务执行之前这个key呗其它命令所改动那么事务将被打断(可以粗略的理解为线程的同步锁)
unwatch取消命令对所以key的监视

下面例举几个案例来说明

  • 首先是正常执行事务时,通过multi开启事务,完成自己想要的操作后用exec执行,并返回运行结果。
    在这里插入图片描述
  • 这里multi开启事务后,输入一些正确的代码,乱输入一些错误的代码,然后执行,发现这里提示。
    语法异常或参数异常
    在这里插入图片描述
  • 这里设置一个字符d让它自增,肯定是不行的,发现成功的继续执行失败提示错误
  • 事务不会回滚
    在这里插入图片描述
  • watch用法\n\n设置age为20,打开另一redis-cli 修改 age值为19
    在这里插入图片描述
    返回继续执行事务操作,发现事务执行失败;(防止非自己以外的修改)
    在这里插入图片描述

6. API讲解

  • Jedis\n这个是Redis实现的客户端,里面有全面的redis命令支持,springboot2.0之前一般都用这个(这个一般不用了,可以忽略)
  • Redisson\n实现了分布式和可拓展的java数据结构异步;不需要即时完成任务的异步执行;比如手机发短信。
  • Lettuce\n,比较常用;springboot2.0后才取代Jedis’的一个高级客户端,主要是用于线程安全同步,异步和响应使用,支持集群这点很重要,Sentinel,管道和编码器;

7. 持久化

  1. AOF方式:以日志的形式来记录每个写的操作,将redis执过的所有写的指令记录下来,并加锁(只允许追加,不允许修改文件)。
  • 当redis启动时会读取该文件重新构建数据,根据日志文件的内容从最开始写入文件的指令一次执行完成数据的恢复。
  • 缺点:就是随着时间的积累aof的文件会越来越大,这样会导致系统的响应时间变长,影响性能。

  1. RDB方式:在指定的事件间隔将内存中的数据集快照Snapshot写入磁盘,redis会单独创一个进程(一个进程里有多个线程)进行持久化,将数据写入临时文件夹中,
  • 当持久化结束后,将这个文件替换上次的持久化的文件。重点是整个过程主进程都不进行任何的I/O操作,这样的话性能更高
  • 缺点就是最后一次持久化的数据可能丢失,数据量大时,资源紧张时,系统会变慢。

8. 过期键的删除策略

  1. 定时删除:是指在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来执行对键的删除。
  2. 定期删除:redis默认没100ms(毫秒)随机抽取一些过期时间的key(幸运观众),如果过期就删除。
  3. 惰性删除:只在获取key的时候,先查下是否过期,过期删除,这样子每次获取key的时候都要查一下,会损耗一些内存,建议不使用

9. 内存淘汰机制

  • allkeys-lru:在键空间中,移除最少使用的key(使用较多)
  • noevivtion:在键空间中,写入操作会报错
  • allkehys-random :在键空间中,随机移除某个key
  • volatile-lru :在设置了过期时间的键空间中,移除最近最少使用的key
  • volatile-random 在设置了过期时间的键空间中,随机移除某个key
  • volatile-ttl 在设置了过期时间的键空间中,有更早过期时间的key优先移除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值