redis数据类型

深度剖析redis:

redis set底层数据结构 - 简书

深入理解redis原理! - 开心的鱼a1 - 博客园

  1. String :value可以是字符串也可以是数组

计算器

统计多单位的数量(mset)

粉丝数

对象缓存存储

  1. List(本质是链表node):可以改写成队列、栈、阻塞队列

LPUSH list one

LRANGE list 0 -1

RPUSH list two

LPOP list

RPOP list

LINDEX list 1

LLEN list

lrem list 1 one

trim

rpoplpush mylist myotherlist

lset list 0 item

linsert mylist before "world" "other"

linsert mylist after "world" "other"

  1. Set(集合)

应用场景:b站用户放到一个集合中,它的粉丝也放到一个集合中。

特点:数据都是无序的不能插入重复元素;可以支持集合和集合之间的操作。

sadd myset "hellp"

smembers myset

sismember myset hello

scard myset

rem myset hello

srandmember myset

srandmember myset 2

spop myset

smove myset myset2 "kuangshen"

sdiff key1 key2

sinter key1 key2

sunion key1 key2

  1. Hash(哈希)ziplist数据结构

Map集合,key-map,这个值是一个map集合!本质和String

hset myhash field1 kuangshen

hget myhash field1

hmset myhash field1 hello field2 world

hmget myhash field1 field2

hgetall myhash

hdel myhash field1

hkeys myhash

hvals myhash

hincrby mhash field3 1

hash变更的数据,尤其是用户信息,经常变动的信息。

  1. Zset(有序集合)

zadd myset 2 two 3  three //这里2和3是位置信息,不是key

zrangebyscore salary -inf +inf

zrangebyscore salary -inf +inf withscores

rem salary xiaohong

zcard salary

zrevrange salary 0 -1

zcount myset 1 2(最低位是1)

  1. Geospatial(底层原理就是Zset

地理位置数据类型key(china:city)/value(经度、纬度、地理位置)

geoadd china:city 116.40 39.90 beijing

getpos china:city beijing chongqing

geodist china:city beijing shanghai km

georadius china:city 110 30 1000 km withcoord

georadiusbymember china:city beijing 1000 km

  1. Hyperloglog(基数统计)

基数(不重复元素)= 5,可以接受误差

为什么要使用Hyperloglog?

当应用情况只是为了计数时,同时内存资源比较少,且容许误差就可以使用

优点:占用内存是固定的,只需要12KB内存,从内存角度讲使用Hyperloglog首选

缺点:错误率比较高,会出现0.81%错误率

目的:为了计数(不相同元素的个数,不是为了保存元素)

pfadd mykey a b c d e

pfcount mykey

pfmerge mykey3 mykey mykey2

  1. Bitmaps(位存储)

应用场景:用户是否活跃,打卡等

setbit sign 0 0

 表示星期一没打卡了

setbit sign 1 1

表示星期二打卡了

getbit sign 3

bitcount sign

  1. 事务

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

Redis事务没有隔离级别的概念,原因是:所有的命令在事务中,并没有直接被执行,只有发起执行命令的时候才会被执行Exec

Redis单条命令保证原子性,但是事务不保证原子性。

Redis事务:执行到最后,直接结束了,如果在开启事务必须重写multi

开启事务(multi)

命令入队(增删改查指令进入执行队列)

执行事务(exec)

discard取消事务,进入队列的都消失

编译型异常(代码有问题,命令错误),事务所有指令都不会被执行

运行时异常(1/0 ,错误命令抛出异常,其他命令正常执行。(体现了redis事务不具备原子性,在mysql是不会出现这种情况的)

  1. Redis锁

 

悲观锁:都会上锁,效率低,

乐观锁:都不会上锁,watch记录当前key的版本号,在执行的时候会对比这个key的版本号,如果版本号不同则修改失败。exec,discard,unwatch的执行都会中断所有监视。watch money(实现乐观锁的测试结果)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值