redis的五大数据类型
1. String
2. set
key + 3. list
4. hash
5. zset
先看看一些常见的操作命令:
select index 切换数据库,redis默认有16个数据库0~15
dbsize 查看当前数据库的key的数量
flushdb 清空单个数据库
flushall 清空全部数据库
1. String类型
String类型是二进制安全的。意味着Redis的String可以包含任何数据,比如jpg图片或者序列化的对象。
String类型是Redis最基本的数据类型,一个Redis中字符串value最大可以是512M。
原子性:
Redis单命令的原子性主要得益于Redis的单线程
命令 | 说明 | 示例 |
---|---|---|
set | 添加k-v | set name admin |
get | 根据key获取value | get name |
strlen | 获取value的长度 | strlen name |
exists | 判断key是否存在 | exists name,返回1:存在,0:不存在 |
del | 删除key(可以删除多个) | del name |
keys | 查询符合条件的key | keys * :查询redis中的全部key,keys n?me 使用占位符,keys name* 获取以name开头的数据 |
mset | 设置多个k-v | mset k1 v1 k2 v2 |
mget | 获取多个key的值 | mget k1 k2 |
append | 对某个key的value进行追加 | append key value |
type | 检查某个key的类型 | type key |
incr | 自动加1 | incr key |
decr | 自动减1 | decr key |
incrby | 指定数值加 | incrby key 10 |
decrby | 指定数值减 | decrby key 10 |
expire | 指定key的生效时间 | expire key 20,key20秒后失效 |
ttl | 检查key的剩余存活时间 | ttl key(-1:永不过期,-2:已过期) |
persist | 撤销key的过期时间 | persist key |
setnx | set if not exists 当key不存在设置成功 | 0:不成功,1:成功 |
msetnx | 设置多组k-v,当且仅当key都不存在时设置成功 | 有一个key已存在都执行不成功 |
getrange key <起始位置> <结束位置> | 获取value的截取字符串,类似于substring但是包含了头和尾 | 例如:set key 01234,执行:getrange key 0 3,得到:0123 |
setrange key <起始位置> <值> | 从value的某个位置开始设值 | 例如:set key 01234,执行:setrange key 1 hhh,得到:0hhh4 |
setex key <过期时间> <值> | 设置k-v的同时设置过期时间,单位:秒 | setex a 20 a |
getset | 设置新值的同时获取旧值 | getset a 01234,返回了之前的旧值 |
2. hash类型
说明:可以用散列类型保存对象和属性值
例子:User对象{id:2,name:小明,age:19}
命令 | 说明 | 示例 |
---|---|---|
hset | 添加数据 | hset key field value |
hget | 获取对象属性值 | hget key field |
hexists | 判断对象属性是否存在 | hexists key field 1:存在,0:不存在. |
hdel | 删除对象属性 | hdel user field[field…] |
hgetall | 获取hash中全部元素和值 | hgetall user |
hkeys | 获取hash中的所有字段 | hkeys user |
hlen | 获取hash中所有属性的数量 | hlen user |
hmget | 获取指定属性值 | hmget key field[field…] |
hmset | 设置多个属性和值 | hmset key field value [field value …] |
hsetnx | 当字段不存在时设置成功 | hsetnx key field value |
hvals | 获取哈市的所有值 | hvals user |
hincrby <键> <属性> <值> | 将指定的field的值加上value | hincrby user age -7 |
3. list类型
说明:redis中的list集合是双端循环列表,分别可以从左右两个方向插入数据
list集合可以当作队列使用,也可以当作栈使用
命令 | 说明 | 示例 |
---|---|---|
lpush | 从队列的左边入队一个或多个元素 | lpush key value [value…] |
rpush | 从队列的右边入队一个或多个元素 | rpush key value [value…] |
lpop | 从队列的左端弹出一个元素 | lpop key |
rpop | 从队列的右端弹出一个元素 | rpop key |
lpushx | 当队列存在时,从队列左侧入队一个元素 | lpushx key value |
rpushx | 当队列存在时,从队列右侧入队一个元素 | rpushx key value |
lrange | 从队列中返回指定的元素 | lrange key start stop,例如:lrange key 0 -1,获取全部队列元素 |
lrem key < count > < value> | 从存于key’的队列中移除前count次出现的值为value的元素 ,count>0:从头往尾移除值为value的元素(左->右);count<0:从尾往头移除值为value的元素(右->左);count=0:移除所有值为value的元素 | 如:100010001,执行:lrem key 2 0,得到:1010001,再执行:lrem key -2 0,得到:10101,lrem key 0 0,得到:111.需要注意的是,如果list里没有存在key就会被当作空list处理,这个命令会返回0 |
lset | 设置index位置的元素为value | lset key index value |
lindex | 按照下标获取元素 | 如:lpush l2 0 1 2,执行:lindex l2 1,得到:1 |
llen | 获取列表长度 | llen key |
linsertt < key> befor/after < value> < newValue> | 在value左/右边插入newValue | 如:0 1 2,执行:linsert l3 before 1 -1,得到:0 -1 1 2,再执行:linsert l3 after 1 -1,得到:0 -1 1 -1 2 |
4. set类型
Redis的set对外提供的功能与list相似,是一个列表功能,特殊之处在于set是可以自动排重的
当需要存储一个列表又不希望出现重复数据时,set是一个很好的选择
并且set提供了判断某个成员是否在一个set集合内的重要接口
Redis的set时String类型的无序集合.底层是一个value为null的hash表,所以添加查找复杂度都是O(1)
命令 | 说明 | 示例 |
---|---|---|
sadd < key> < value1> < value2>… | 将一个或多个member元素加入到key中,已经存在于集合的member元素将被忽略 | sadd set1 a b c d e |
smembers < key> | 取出该集合的所有值 | smembers set1 |
sismember < key> < value> | 判断集合key是否含有该value | 1:有,0:没有 |
scard | 返回集合元素个数 | scard set1 |
srem < key> < value1> … | 删除集合中的某个元素 | srem set1 b e |
spop < key> < n> | 随机从集合突出n个元素(会删除),不写默认为1 | spop key [count] |
srandmember < key> < n> | 随机从集合突出n个元素(不会删除) | srandmember set1 3 |
sinter < key1> < key2> | 返回交集元素 | |
sunin < key1> < key2> | 返回并集元素 | |
sdiff < key1> < key2> | 返回差集元素 | 如set1: a b c ;set2 : a b c d e,执行sdiff set1 set2,结果:空,而执行sdiff set2 set1 ,结果:d e |
5. zset类型(sorted set)
Redis有序集合zset与普通集合非常相似,是一个没有重复元素的字符串集合.
不同的是zset的每个成员都关联了一个评分(score),这个评分被用来按照从最低分到最高分的方式排序几个中的元素.
集合中的元素是唯一的,但是评分可以重复.
因为元素是有序的,所以可以很快地根据评分或者次序来获取一个范围的元素.访问有序集合的中间元素是很快的,因此你能够使用zset作为一个没有重复元素的智能列表
命令 | 说明 | 示例 |
---|---|---|
zadd < key> < score1> < v1> … | 将一个或多个元素及其score值存入 | zadd zset1 0 a 1 b 2 c |
zrange < key> < start> < stop> [WITHSCORES] | 返回下表从start到stop的元素,如果有withscores,连带score一起返回 | zrange zset1 1 3 withscores |
zrangebyscore < key> < min> < max> [withscores] [limit offset count] | 返回有序集合key中,所有score值介于min和max之间(含头尾)的成员.从小到大排序 | zrangebyscore zset1 1 3 |
zrevrangebyscore < key> < max> < min> [withscores] [limit offset count] | 同上,从大到小排序 | |
zincrby < key> < increment> < value> | 为元素member的score加上增量increment | zincrby zset1 2 a |
6. 结束语
再写这篇博客的时候翻开以前的笔记,感觉跟新知识一样==,好多命令都记不清了.勤加练习,多多益善.