04 Redis数据类型与应用场景
2020-02-14 本文已影响0人
markeNick
更多命令可以查看这个Redis 命令参考文档:http://doc.redisfans.com
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)等。
String类型
简介
- string类型是Redis最基本的数据类型,一个键最大能存储512MB。
- string数据结构是简单的key-value类型,value不仅是string,也可以是数字,包含很多种类型的特殊类型,
- string类型是二进制安全的。意思是redis的string可以包含任何数据。比如序列化的对象进行存储,比如一张图片进行二进制存储,比如一个简单的字符串,数值等等。
常用命令
赋值语法:
命令 | 说明 |
---|---|
set key_name value | set命令用于设置给定key的值,如果已经存储值,就覆盖,且无视类型 |
setnx key value | 如果key不存在,则赋值并返回1,如果不存在不赋值,返回0 |
setex key 10 xxx | 设置key的值为xxx,过期时间为10秒,10秒后key清除 |
setrange key range value | 用 value 参数覆写给定 key 所储存的字符串值,从偏移量range开始 |
取值语法:
命令 | 说明 |
---|---|
get key | 获取指定key的值,如果不存在返回 nil,如果key存储不是字符串类型返回一个错误 |
getrange key start end | 获取存储在指定key中字符串的子字符串,截取范围由start和end两个偏移量决定 (包含start和end) |
getbit key offset | 对key所存储的字符串值,获取指定偏移量上的为(bit) |
getset key value | 用于设置指定key的值,并返回key的旧值,当key不存在时返回 nil |
删值语法:
命令 | 说明 |
---|---|
del key1 key2 | 删除指定的key,返回被删除key的数量 |
mset k1 v1 k2 v2 | 一次性写入多个key |
gset k1 v1 k2 v2 | 一次性读取多个key的值 |
自增/自减:
命令 | 说明 |
---|---|
incr key | 将key中存储的数值加1,如果key不存在,key的值被初始化为0并执行incr操作 |
incrby key increment | 将 key 所储存的值加上增量 increment
|
decr key | 将key中存储的数值减1 |
decrby key decrement | 将 key 所储存的值减去减量 decrement
|
其他:
命令 | 说明 |
---|---|
append key value | 用于为指定的key追加value至末尾,如果不存在,为key赋值 |
strlen key | 返回key所存储的字符串值的长度 |
应用场景
- String通常用于保存单个字符串或JSON字符串数据
- 因String是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储
- 计数器(常规key-value缓存应用。常规计数: 微博数, 粉丝数)
INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的效果。
假如,在某种场景下有3个客户端同时读取了num的值(值为2),然后对其同时进行了加1的操作,那么,最后num的值一定是5。 不少网站都利用redis的这个特性来实现业务上的统计计数需求。
Hash类型
简介
-
Hash类型是String类型的field和value的映射表,或者说是一个String集合。
-
hash特别适合用于存储对象,相比较而言,将一个对象类型存储在Hash类型要存储在String类型里占用更少的内存空间,并方便对整个对象的存取。
-
可以看成具有KEY和VALUE的MAP容器,该类型非常适合于存储值对象的信息, 如:username, age等。
-
该类型的数据仅占用很少的磁盘空间(相比于JSON)。Redis 中每个 hash 可以存储 2的32次方 - 1 键值对(40多亿)。
常用命令
赋值语法:
序号 | 说明 |
---|---|
hset key field value | 将哈希表 key 中的域field 的值设为 value |
hmset key field value [field value ...] | 同时将多个field-value (域-值)对设置到哈希表 key 中,此命令会覆盖哈希表中已存在的域,如果 key 不存在一个空哈希表被创建并执行hmset操作 |
取值和删值语法:
命令 | 说明 |
---|---|
hget key field | 返回哈希表 key 中给定域 field 的值。 |
hmget key field [field....] | 返回哈希表 key 中,一个或多个给定域的值。如果给定的域不存在于哈希表,那么返回一个 nil 值。因为不存在的key 被当作一个空哈希表来处理,所以对一个不存在的key进行hmget操作将返回一个只带有 nil 值的表 |
hgetall key | 返回哈希表key 中,所有的域和值 |
hdel key field [field....] | 删除哈希表key 中的一个或多个指定域,不存在的域将被忽略。 |
其他语法:
命令 | 说明 |
---|---|
hsetnx key field value | 将哈希表 key 中的域 field 的值设置为 value ,当且仅当 field 不存在 |
hincyby key field increment | 为哈希表 key 中的域 field 的值加上增量 increment,增量可为负数 |
hincybyfloat key field increment | 为哈希表 key 中的域 field 加上浮点数增量 increment |
hexists key field | 查看哈希表 key 中,给定域 field 是否存在 |
hkeys key | 返回哈希表 key 中的所有域 |
hlen key | 返回哈希表 key 中域的数量 |
应用场景
存储部分变更数据,如用户信息等
持续更新中。。。。。。