Redis数据类型一共是五种,在昨天的文章里面已经提到了。今天就具体说一下五种数据类型的相关操作命令。
Redis存储形式就是key-value。
1、String
set key value:赋值
get key: 取值
getset key value:取值并赋值。(返回key原来的值,将新的value值赋值给key)
mget key1 key2 key3:获取多个值
mset key1 value1 key2 value2:设置多个值
del key:删除
incr key: 将key对应的value(数字)增加1
incr key num:将指定key对应value(数字)增加num
decr key: 将key对应的value(数字)减少1
decr key num:将指定key对应value(数字)减少num
append key value:想key对应的值得末尾追加value,若key对应的值不存在,则该命令相当于set key value。返回值是追加后字符的总长度。
strlen key:返回key对应值的长度,若键不存在,则返回0
应用场景:商品编号,订单号采用string的递增数字特性生成。
2、Map,散列类型
hset key key1 value1:key是键,key1 value1 是值。value1再不能设置为Map。新增和更新都是这个方法,返回值为1是新增,返回为0是更新。
hget key key1:获取key对应Map中键为key1的元素
hmset key key1 value1 [key2 value2 ...}:新增多个值
hmget key key1 [key2 ...]:获取多个值
hgetall key:获取key对应Map中所有的value
hdel key key1:删除key对应Map中键为key1的元素
hincrby key key1 num:key对应Map中键为key1的元素的值增加num
hexists key key1:判断key对应的Map中是否存在键为key1的元素,若存在,返回1,若不存在,返回0
hkeys key:获取key对应Map中的所有键
hvals key:获取key对应Map中的所有值
hlen key:获取key对应value中的字段数量
应用场景:存储商品对应信息,key为商品id,value为商品对应所有信息。
eg:hmset items:10010 id 3 name apple price 6688 size 8p
商品信息的key为:[items:10010]
商品信息的value为:[ id 3 name apple price 6688 size 8p]
3、List,列表类型
我们都知道,ArrayList是基于数组实现数据存储,特点:增删慢,查询快。
LinkedLise是基于双向链表实现数据存储,特点:增删快,查询慢,但查询链表两端时也很快。
Redis中的List类型是采用链表来存储数据的,所以对于redis的list数据类型的操作,都是操作List两端的数据。
lpush key value1 [value2 value3 ...]:从链表的左边开始存储
rpush key value1 [value2 value3 ...]:从链表的右边开始存储
eg:lpush list1 1 2 3 4 5 6;
rpush list1 a b c d e;
链表中存储如下图所示:
lrange key start end:获取key对应值的下标从start 到 end的所有元素,下标从0开始。
eg:lrange key 0 -1 这是查看key对应的value的所有元素。-1代表最后一个 元素
lpop key:从链表左边弹出一个元素
rpop key:从链表右边弹出一个元素
注意:元素弹出后,该元素就不存在原来列表中。
llen key:获取key对应列表中元素的个数
lrem key count value:删除列表中前count个值为value的元素,返回实际删除的元素的个数。
count > 0:lrem 会从列表的左边开始删除
count < 0: lrem 会从列表的右边开始删除
count = 0: lrem会删除所有值为value的元素
lindex key index:获取key对应列表中指定索引index的元素值
lset key index value : 设置key对应列表中指定索引index的元素值
ltrim key start end:保留key对应列表的指定范围的片段(下标从start到end保留),指定范围和lrange一致。
linsert key before|after value value1: 向列表中插入元素。该命令首先会在列表中从左到右查找值为value的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value1插入到该元素的前面还是后面。
应用场景:
在Redis中创建商品评论列表
用户发布商品评论,将评论信息转成json存储到list中。
用户在页面查询评论列表,从redis中取出json数据展示到页面。
定义商品评论列表key:
商品编号为1001的商品评论key【items: comment:1001】
LPUSH items:comment:1001 '{"id":1,"name":"商品不错,很好!!","date":1430295077289}'
4、Set,集合(无序,不可重复)
sadd key value1 value2 value3:增加集合key,值为 value1 value2 value3
srem key value1 value2:删除key对应集合中的值为 value1 value2 的元素
smembers key:获取key对应集合的所有元素
sismember key value: 判断key对应集合中是否存在值为value的元素,若存在,返回1,若不存在,返回0
sdiff key1 key2:获取集合key1和key2的差集
sinter key1 key2:获取集合key1和key2的交集
sunion key1 key2:获取集合key1和key2的并集
scard key:获取key对应集合中元素的个数
spop key:弹出key对应集合中的某一个元素,弹出后该集合中就不存在该元素
5、SortedSet
集合(有序集合,可排序,元素唯一),又叫zset
Sortedset和set的不同之处,是会给set中的元素添加一个分数,然后通过这个分数进行排序。
zadd key score1 value1 [score2 value2 score3 value3 ...]: 向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素.
zscore key member:查看某个元素的分数
zrem key value: 从key对应的集合中删除值为value的元素
zrange key start end : 获取key对应集合中下标从start 到 end 的元素,从小到大
zrevrange key start end: 获取key对应集合中下标从start 到 end 的元素,从大到小
zrange key start end withscores: 获取key对应集合中下标从start 到 end 的元素以及元素对应的分数,从小到大
zrevrange key start end withscores: 获取key对应集合中下标从start 到 end 的元素以及元素对应的分数,从大到小
zrand key value:获取值为value元素在key所对应集合中的排名。(按分数,从小到大的排名名次)
zrevrand key value: 获取值为value元素在key所对应集合中的排名。(按分数,从大到小的排名名次)
zrangebyscore key min max [withscores] [limit offset count]:获取分数在min 和max之间的元素,加上【withscores】就是带上分数,加上limit 是指:从满足条件的结果中的下标为offset的元素开始返回count个元素
zincrby key num value: 增加key对应集合中值为value元素的分数,增加量为num,返回值是增加后的分数。
zcard key: 获取集合中元素的个数
zcount key min max: 获取key对应集合中分数范围在min 到 max的元素个数
zremrangebyrank key start end:按照排名范围删除元素。(删除排名在范围start 到end 范围内的元素,包括start和end)
zremrangebyscore key min max: 按照分数范围删除元素。(删除分数在min 到max范围内的元素,包括min和max)
应用场景:
商品销售排行榜
根据商品的销售量对商品进行排行显示:定义一个商品销售量集合,分数为商品销售量
6、其他命令
keys *:查看数据库中所有的key
keys *list:查看数据库中所有的以list结尾的key(此处可以任意*匹配)
exits key:查看是否存在某一个key,存在返回1,不存在返回0
del key:删除某个key
rename key new_key:修改某个key的名字
type key:判断某个key对应的值的类型
好了 ,以上就是Redis五种数据类型的一些常见命令操作,还是那句话,希望能帮到一些像我一样也刚开始学习redis的朋友。
今天到此结束,明天继续。
--------------------------------------------------------------------------------------------------------------------------------