哪里去获得redis常见数据类型操作命令:http://www.redis.cn/commands.html

Redis键(key)(先介绍key)

  • keys 查看当前库所有key (匹配:keys 1)
  • exists key 判断某个key是否存在
  • type key 查看你的key是什么类型
  • del key 删除指定的key数据
  • unlink key 根据value选择非阻塞删除。 仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。

关于unlink的解析:https://blog.csdn.net/qq_33361976/article/details/108714766

  • expire “abc” 10 :10秒钟:为给定的key设置过期时间
  • ttl “abc” 查看还有多少秒过期,-1表示永不过期,-2表示已过期
  • select命令切换数据库
  • dbsize查看当前数据库的key的数量
  • flushdb清空当前库
  • flushall通杀全部库

    Redis字符串(String)

    简介

  • String是Redis最基本的类型,一个key对应一个value。

  • String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
  • String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

讨论java中的增1不是原子性操作:
image.png
不是原子操作,范围是:2-200,上图是解释为什么最小值是2

因为i++实际上是三步:先取值,再增1,最后赋值,所以存在在三步间隙中被另一个线程抢占,导致i值被另一个线程操作覆盖

数据结构

String的数据结构为简单动态字符串。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.
image.png
如图中所示,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。

Redis列表(List)

简介

list是单键多值,如下:
image.png
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
image.png

数据结构

List的数据结构为快速链表quickList。
首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存。
当数据量比较多的时候才会改成quicklist。因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next。
image.png
Redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。