Redis基础知识以及数据类型

  • 基础知识
  • Redis-key
  • 基本数据类型
  • String(字符串)
  • list(列表)
  • set(集合)
  • Hash(散列)
  • Zset(有序集合)
  • 三种特殊的数据类型
  • geospatial(地理位置)
  • hyperloglog
  • bitmaps


基础知识

redis默认有16个数据库,默认使用的时第0个,可以使用select进行切换数据库

redission 另一个线程解锁 redis线程数_Redis


redission 另一个线程解锁 redis线程数_redission 另一个线程解锁_02

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

Redis是单线程的!

Redis是基于内存操作,CPU不是Redis性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了!所以就使用了单线程。

Redis为什么单线程还很快?

核心:Redis是将所有数据全部放在内存中的,所以说使用单线程去操作效率就是最高的(多线程上下文切换:耗时的操作),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!

Redis-key

redission 另一个线程解锁 redis线程数_nosql_03


redission 另一个线程解锁 redis线程数_nosql_04


redission 另一个线程解锁 redis线程数_数据库_05


redission 另一个线程解锁 redis线程数_数据库_06

基本数据类型

String数据类型、List 数据类型(队列)、Hash数据类型(散列类型)、set数据类型(无序集合)、Sorted Set数据类型 (zset、有序集合)

String(字符串)

redission 另一个线程解锁 redis线程数_数据库_07

redission 另一个线程解锁 redis线程数_nosql_08


redission 另一个线程解锁 redis线程数_Redis_09


redission 另一个线程解锁 redis线程数_数据库_10


redission 另一个线程解锁 redis线程数_nosql_11


redission 另一个线程解锁 redis线程数_redission 另一个线程解锁_12

  • 对象设置


    String类型的使用场景:value除了事我们的字符串还可以使我们的数字!
  • 计数器
  • 统计多单位的数量
  • 粉丝数
  • 对象缓存存储

list(列表)

列表 在redis里面,我们可以把list玩成,栈、队列、阻塞队列!

redission 另一个线程解锁 redis线程数_数据库_13


所有的list命令都是用l开头的


redission 另一个线程解锁 redis线程数_Redis_14


redission 另一个线程解锁 redis线程数_Redis_15


redission 另一个线程解锁 redis线程数_nosql_16


redission 另一个线程解锁 redis线程数_数据库_17


redission 另一个线程解锁 redis线程数_Redis_18


redission 另一个线程解锁 redis线程数_Redis_19


redission 另一个线程解锁 redis线程数_nosql_20


redission 另一个线程解锁 redis线程数_数据库_21


redission 另一个线程解锁 redis线程数_nosql_22

小结

  • 它实际上是一个链表,before after left right都可以插入值
  • 如果key不存在,创建新的链表
  • 如果key存在,新增内容
  • 如果移除了所有值,空链表,也代表不存在
  • 在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点

set(集合)

set中的值不能重复

redission 另一个线程解锁 redis线程数_Redis_23


redission 另一个线程解锁 redis线程数_数据库_24


redission 另一个线程解锁 redis线程数_redission 另一个线程解锁_25


redission 另一个线程解锁 redis线程数_redis_26


redission 另一个线程解锁 redis线程数_redission 另一个线程解锁_27


redission 另一个线程解锁 redis线程数_数据库_28

  • 微博,A用户将所有关注的人放在一个set集合中!将它的粉丝也放在一个集合中!共同关注等等

Hash(散列)

可以看做一个Map集合、key-Map集合!的时候这个值是一个map集合!本质和string类型没有太大区别,还是一个简单的key-value

redission 另一个线程解锁 redis线程数_Redis_29


redission 另一个线程解锁 redis线程数_nosql_30


redission 另一个线程解锁 redis线程数_redission 另一个线程解锁_31


redission 另一个线程解锁 redis线程数_redission 另一个线程解锁_32


redission 另一个线程解锁 redis线程数_redis_33


redission 另一个线程解锁 redis线程数_数据库_34

Zset(有序集合)

在set的基础上,增加了一个值

redission 另一个线程解锁 redis线程数_数据库_35


redission 另一个线程解锁 redis线程数_redission 另一个线程解锁_36

192.168.184.135:6379> ZREVRANGE salary 0 -1 #从大到小进行排列
1) "zhangsan"
2) "xiaohong"
192.168.184.135:6379> ZREVRANGE salary 0 -1 withscores
1) "zhangsan"
2) "5000"
3) "xiaohong"
4) "2500"
192.168.184.135:6379>

redission 另一个线程解锁 redis线程数_Redis_37

192.168.184.135:6379> ZCARD salary #统计zset个数
(integer) 2
192.168.184.135:6379>


案例思路:set排序 存储班级成绩表 工资表排序 排行榜应用场景

三种特殊的数据类型

geospatial(地理位置)

朋友的定位、附件的人,打车距离计算
Redis的Geo在redis3.2版本就推出了!这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!

  • geoadd

hyperloglog

bitmaps