String
- 1、String
- 常用命令:
- 除了get、set、incr、decr mget等操作外,Redis还提供了下面一些操作:
- 获取字符串长度
- 往字符串append内容
- 设置和获取字符串的某一段内容
- 设置及获取字符串的某一位(bit)
- 批量设置一系列字符串的内容
- 应用场景:
- String是最常用的一种数据类型,普通的key/value存储都可以归为此类,value其实不仅是String,
- 也可以是数字:比如想知道什么时候封锁一个IP地址(访问超过几次)。INCRBY命令让这些变得很容易,通过原子递增保持计数。
- 实现方式:
- m,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
Hash
- 常用命令:
- hget,hset,hgetall 等。
- 应用场景:
- 我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息:
- 用户ID,为查找的key,
- 存储的value用户对象包含姓名name,年龄age,生日birthday 等信息,
- 如果用普通的key/value结构来存储,主要有以下2种存储方式:
- 第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,
- 如:set u001 "李三,18,20010101"
- 这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。
- 第二种方法是这个用户信息对象有多少成员就存成多少个key-value对儿,用用户ID+对应属性的名称作为唯一标识来取得对应属性的值,
- 如:mset user:001:name "李三 "user:001:age18 user:001:birthday "20010101"
- 虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的。
- 那么Redis提供的Hash很好的解决了这个问题,Redis的Hash实际是内