Redis基础学习

作用

  1. 内存存储,持久化,内存中是断电即失,持久化很重要(rdb,aof)
  2. 效率高,高速缓存
  3. 发布订阅系统
  4. 地图信息分析
  5. 计时器,计数器

……

特点

  • 开源
  • 持久化
  • 多种数据类型

基础知识

redis中有16个数据库,默认使用第一个数据库

select 数字 :可切换到第几个数据库

keys * :查看当前数据库下所有的key

flushdb:清除当前数据库

flushall:清除所有数据库

dbsize:查看数据库大小
    

redis是单线程的

redis基于内存操作,所以 cpu不是redis的性能瓶颈,redis的瓶颈是网络带宽和内存,可以使用单线程来实现

为什么redis单线程还这么快
  • 高性能的服务器不一定是多线程的
  • 多线程不一定比单线程效率高

速度:cpu>内存>硬盘

redis将所有数据放在内存中,所以使用单线程效率最高,多线程会有cpu中的上下文切换,这是耗时操作

而对于内存系统来讲,没有上下文切换效率就是最高的,多次读写都是在一个cpu上

五大数据类型

String(字符串)

String类使用场景

value除了是字符串还可以是数字

  • 计数器
  • 粉丝数
  • 统计多单位数量
  • 对象缓存存储

List(列表)

  • 实际上是个链表,before node ,after ,left ,right 都可以插入值
  • 如果移除了所有值,空链表,代表不存在
  • 两边插入或改动值,效率比较高
  • 如果key不存在,创建新的链表,存在,新增内容

作栈(lpush lpop) 作消息队列(lpush rpop)

Set(集合)

Hash(哈希)

Map集合,本质和String差不多,都为键值对,不过他的值为map集合
hash更适合用于对象的存储,String用于字符串的存储

Zset(有序集合)

三种特殊数据类型

geospatial(地理位置)

底层原理:

就是Zset,所以可以用Zset来操作geo(如移除元素,查看所有元素)

  • 朋友定位
  • 附近的人
  • 打车距离

HyperLogLog(基数统计)

是redis的数据结构

可用于统计数据中去重之后的元素个数

如果数据较多,可能会有误差

如果容错,推荐使用

Bitmap(位存储)

位图,也是radis的数据结构

事务

  • 本质:一组命令的集合,在事务中的所有命令将会串行化的执行,Redis在此期间不会对其他客户端的请求提供任何服务
  • 事务在执行一次后就已经没了,如果需要重新执行,需再次开启
  • 在Redis事务执行过程中,如果有一条命令执行失败,剩下命令依然会执行

总结:redis事务就是一次性,顺序性,排他性的执行一个队列中的一系列命令

1、Redis事务没有隔离级别概念

批量操作在发送exec命令前被放入队列缓存中,并不会被实际执行,也就不存在事务内的查询能看到更新,事务外的查询不能看到

2、Redis不保证原子性

原子性(要么同时成功,要么同时失败)

Redis中单条命令的执行是保证原子性的,而事务是不保证的,且没有回滚,事务中任意命令执行失败,其余命令仍会被执行

3、三个阶段
  1. 开启事务
  2. 命令入队
  3. 执行事务
4、相关命令
multi 开启事务
exec  提交事务
discard 取消事务
watch 开启监控
unwatch 取消监控

若命令中存在语法错误(类似Java中的1/0,运行时异常),执行exec时,错误命令抛出异常,其它命令正常执行

若命令中存在(编译时异常)则exec命令时,所有命令都不会执行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值