zoukankan      html  css  js  c++  java
  • Redis 基础数据结构(二)

    1.String

    字符串 string 是 Redis 最简单的数据结构。Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据。不同类型的数据结构的差异就在于 value 的结构不一样。

    字符串结构使用最为广泛,最常见的就是缓存信息。一般情况下我们是将这些信息使用JSON序列化成字符串,然后将序列化后的字符串塞进Redis进行缓存,同样,获取用户信息的时候是会进行一次反序列化的过程。

    字符串是由多个字节组成,每个字节又是由 8 个 bit 组成,如此便可以将一个字符串看成很多 bit 的组合,这便是 bitmap「位图」数据结构。

    Java中的字符串是常量,知道String pool的同学应该很明白这句话的含义,但Redis 的字符串是动态字符串,是可以修改的字符串,内部结构实现上类似于 Java 的 ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配,内部为当前字符串实际分配的空间 capacity 一般要高于实际字符串长度 len。当字符串长度小于 1M 时,扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M 的空间。需要注意的是字符串最大长度为 512M。可以看到扩容机制和Java中的ArrayList有所不同。

    键值对:

    127.0.0.1:6379> set name xiaoming
    OK
    127.0.0.1:6379> get name
    "xiaoming"
    127.0.0.1:6379> exists name
    (integer) 1
    127.0.0.1:6379> del name
    (integer) 1
    127.0.0.1:6379> get name
    (nil)

    批量键值对:

    127.0.0.1:6379> mset name1 xiaoming1 name2 xiaoming2
    OK
    127.0.0.1:6379> get name1
    "xiaoming1"
    127.0.0.1:6379> get name2
    "xiaoming2"
    127.0.0.1:6379> mget name1 name2
    1) "xiaoming1"
    2) "xiaoming2"

    过期和set:

    127.0.0.1:6379> set myName xiaoming
    OK
    127.0.0.1:6379> get myName
    "xiaoming"
    127.0.0.1:6379> expire myName 5
    (integer) 1
    127.0.0.1:6379> get myName
    (nil)
    127.0.0.1:6379> setex myName1 5 xiaoming
    OK
    127.0.0.1:6379> get myName
    (nil)
    127.0.0.1:6379> setnx myName2 xiaoming
    (integer) 1
    127.0.0.1:6379> get myName2
    "xiaoming"

    计数:

    127.0.0.1:6379> set age 30
    OK
    127.0.0.1:6379> get age
    "30"
    127.0.0.1:6379> incr age
    (integer) 31
    127.0.0.1:6379> get age
    "31"
    127.0.0.1:6379>
    127.0.0.1:6379> incrby age 5
    (integer) 36
    127.0.0.1:6379> set age 9223372036854775807
    OK
    127.0.0.1:6379> incr age
    (error) ERR increment or decrement would overflow



     

  • 相关阅读:
    事务的特性(ACID)
    网络代理
    防止SpringMVC拦截器拦截js等静态资源文件
    Tomcat配置虚拟目录
    SpringMVC总结(SSM)
    Spring声明式事务总结
    Linux中MySQL忽略表中字段大小写
    MySQL之sql文件的导入导出
    MyBatis总结
    Linux网络
  • 原文地址:https://www.cnblogs.com/yangfei-beijing/p/10053197.html
Copyright © 2011-2022 走看看