Redis学习|Redis基础知识、Redis五大数据类型、Redis三种特殊数据类型、Redis事务

Redis基础知识

redis默认有16个数据库,并且这个数量可以在conf配置文件中更改

默认使用的是第0个
可以使用 select 进行切换数据库!

key *查看数据库所有的key 

清除当前数据库 flushdb
清除全部数据库的内容FLUSHALL

为什么redis是6379!(了解一下即可!)

Redis 是单线程的

明白Redis是很快的,官方表示,Redis是基于内存操作,CPU不是Redis性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了!所有就使用了单线程了!Redis 是C语言写的,官方提供的数据为 100000+的QPS,完全不比同样是使用 key-vale的Memecache差!

Redis 为什么单线程还这么快?

1、误区1:高性能的服务器一定是多线程的 ?
2、误区2:多线程(CPU上下文会切换!)一定比单线程效率高!
先去CPU>内存>硬盘的速度要有所了解!
核心:redis 是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作!!!),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!

Redis-Key

Redis五大数据类型

String(字符串)

90% 的java程序员使用redis 只会使用一个String类型!

String类似的使用场景:value除了是我们的字符串还可以是我们的数字!

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

List(列表)

基本的数据类型,列表

在redis里面,我们可以把list玩成,栈、队列、阻塞队列!
Redis不区分大小命令

他实际上是一个链表,before Node after ,left,right 都可以插入值
e如果key 不存在,创建新的链表
如果key存在,新增内容e
如果移除了所有值,空链表,也代表不存在
。在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点消息排队!消息队列(Lpush Rpop),栈(Lpush Lpop)

Set(集合)

set中的值是不能重读的!


Hash(哈希)

Map集合,key-map!时候这个值是一个map集合!本质和String类型没有太大区别,还是一个简单的 key-vlaue!
set myhash field kuangshen

hash变更的数据 user name age,尤其是是用户信息之类的,经常变动的信息!hash 更适合于对象的存储,String更加适合字符串存储!

Zset(有序集合)

在set的基础上,增加了一个值,set k1 v1; zset k1 score1 v1

三种特殊数据类型

geospatial 地理位置

朋友的定位,附近的人,打车距离计算?
Redis 的 Geo 在Redis3.2版本就推出了!这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!可以查询一些测试数据:http://www.jsons.cn/Ingcodeinfo/0706D99C19A781A3/

只有 六个命令 官方文档:https://www.redis.net.cn/order/3685.html

Hyperloglog

什么是基数?
A {1,3,5,7,8,7}
B{1 ,3,5,7,8}
基数(不重复的元素)=5,可以接受误差!

Redis 2.8.9 版本就更新了 Hyperloglog数据结构!
Redis Hyperloglog 基数统计的算法!
优点:占用的内存是固定,2^64不同的元素的技术,只需要废 12KB内存!如果要从内存角度来比较的话 Hyperloglog首选!网页的 UV(一个人访问一个网站多次,但是还是算作一个人!)
传统的方式,set 保存用户的id,然后就可以统计 set中的元素数量作为标准判断!这个方式如果保存大量的用户id,就会比较麻烦!我们的目的是为了计数,而不是保存用户id;0.81%错误率!统计UV任务,可以忽略不计的!

Bitmaps

位存储
统计用户信息,活跃,不活跃! 登录、未登录!打卡,365打卡!两个状态的,都可以使用 

Bitmaps 位图,数据结构!都是操作二进制位来进行记录,就只有0和1两个状态!365天=365 bit 1字节=8bit 46个字节左右!

事务

Redis 事务本质:一组命令的集合! 一个事务中的所有命令都会被序列化,在事务执行过程的中,会按照顺序执行!
一次性、顺序性、排他性!执行一些列的命令!

------队列set set set 执行------
Redis事务没有没有隔离级别的概念!
所有的命令在事务中,并没有直接被执行!只有发起执行命令的时候才会执行!Exec
Redis单条命令是保存原子性的,但是事务不保证原子性!
redis的事务:
开启事务(multi)
命令入队(。。。)
执行事务(exec)

  • 26
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值