一、redis五种数据类型
类型 | 简介 | 特性 | 场景 |
---|---|---|---|
string(字符串) | 二进制安全 | 可以包含任何数据,比如jpg图片或者序列化对象 | 一般情况下,开发中使用频率最高,常储存普通的key,如限流、商品信息等较固定的zhi |
hash(字典) | 键值对集合,即编程语言中的map类型 | 适合存储对象,并且可以像数据库中的update一个属性一样只修改某一项属性值 | 存储、读取、修改用户属性 |
list(列表) | 链表(双向链表) | 增删快,提供了操作某一元素的api | 最新消息排行;消息队列 |
set(集合) | hash表实现,元素不重复 | 添加、删除、查找的复杂度都是O(1),提供了求交集、并集、差集的操作 | 共同好友;利用唯一性,统计访问网站的所有Ip |
sorted set(有序集合) | 将set中的元素增加一个权重参数score,元素按score有序排列 | 数据插入集合时,已经进行了天然排序 | 排行榜;带权重的消息队列 |
二、各数据类型在命令行的基本操作
(这里具体的命令稍微看下即可,也可直接跳过,更多命令和用法推荐看官网api)
1、string
ps:字符串值最大值为512m
-
操作单条
增:set key value
查:get key
删:del key
-
操作多条
增:mset key value [key1 value1]
查:mget key [key1]
-
其他命令
strlen key //获取字符串长度
append key value //有则追加,无则新建
setnx key value //不存在就设置,存在就不设置
incr key //自增 1
incrby key num //给key的值增加num(int 类型),num 正数则为加,num 为负数 则为减
incrbyfloat key num //给key的值增加num(float 类型)
decr key //自减 1
decrby key num //给key的值减num
setex key second value //设置key的值为value存活时间为second秒
psetex key millisecond value //设置key的值为value存活时间为millisecond毫秒
2、Hash
-
Hash类型的value只能存字符串,不允许再嵌套其他类型,如果数据为空则为Nil
-
每个Hash可以存储2 32 − 1 2^{32}-1232−1个键的值对
-
Hash类型十分贴近对象的数据存储,并且可以灵活添加、删除对象属性。但Hash类型设计并不是存在量而设计的,切记不可滥用,更不可将Hash作为对象列表使用
-
hgetall操作可以获取全部属性,如果内部field过多,遍历整体数据时效率会降低,很有可能成为数据访问的瓶颈
单条操作
增:hset key field value
查:hget key field
删:hdel key field
多条操作
增:hmset key field value [field1 value2]
查:hmget key field [field1]
其他命令
hgetall key //获取key的全部的值
hlen key //获取key的值的数量
hexists key field //是否存在field
hkeys key //所有key的字段(field)
hvals key //所有key的值
hincrby key field num //给key的field的值增加num (num 为int值)
hincrybyfloat key field num //给key的field的值增加num (num 为float)
hsetnx key field value //存在不设置,不存在设置
3、List
- list中保存的数据都是String,数据总量是有限的,最多2 32 − 1 2^{32}-1232−1个元素
- list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作(或以栈的形式进行入栈出栈操作)
- 当stop的值为-1时,获取的是全部数据
- list对数据进行分页操作,通常第一页的数据使的信息来自list,其他页面的数据通过数据形式进行加载
添加
lpush key value [value1] //从左添加
rpush key value [value1] //从右添加
获取
lrange key start stop
lindex key index
llen key
获取并移除
lpop key //从左出
rpop key //从右出
案例结果
lpush list a b c
结果:c b a
===============================
rpush list a b c
结果:a b c
===============================
list=[a b c]
lpop list
结果:b c
===============================
list=[a b c]
rpop list
结果:a b
===============================
4、Set
增:sadd key member [member1]
查:smembers key
删:srem key member [member1]
获取总量:scard key
判定是否存在:sismember key member
随机获取(原集合保留):srandmember key [count]
随机获取(原集合不保留):spop key
集合交集:sinter key key1 key2
集合并集:sunion key key1 key2
集合差集:sdiff key key1 key2
存储集合交集:sinterstore destination key key1 key2
存储集合并集:sunionstore destination key key1 key2
存储集合差集:sdiffstore destination key key1 key2
集合元素移动:smove source destination member
5、Sorted_Set
增:zadd key score member [score1 member1]
删:zrem key member [member1]
获取全部(正序):zrange key start stop [withscores]
获取全部(倒序):zrevrange key start stop [withscores]
按条件查(正序):zrangebyscore key min max [withscore limit]
按条件查(倒序):zrevrangebyscore key max min [withscore limit]
按条件删除(索引):zremrangebyrank key start stop
按条件删除(积分):zremrangebyscore key min max
获取集合总量:zcard key | zcount key min max
存储集合交集: zinterstore destination numkeys key key1
存储集合并集:zunionstore destination numkeys key key1
获取索引(正序):zrank key member
获取索引(倒序):zrevrank key member
score值获取:zscore key member
score值修改:zincrby key num member
6、小结
1)String存储对象(Json) 对比 Hash存储对象
- String存在对象讲究整体性,以读为主
- Hash存储对象讲究分散性,以写为主
三、Key的操作
(这里具体的命令也是稍微看下即可,也可直接跳过)
删除:del key
判断是否存在:exists key
获取key类型:type key
指定有效期:
expire key seconds
pexpire key milliseconds
expireat key timestamp
pexpireat key milliseconds-timestamp
获取有效期:
ttl key
pttl key
设置永久:persist key
查询key:key pattern //*,?,[]
重命名:rename key newkey | renamenx key newkey
对key排序:sort
四、数据库的操作
(这里的数据清除命令最好记住,开发过程中会用到的)
选择数据库:select index
数据移动:move key db
数据库大小:dbsize
数据清除:
单库删除:flushdb
多库删除:flushall