栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

redis数据类型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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(实现乐观锁的测试结果)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004042.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号