2. redis的数据类型

一. string类型

  1. 字符串类型是redis中最基本的数据类型,它能存储任何形式的内容,包含二进制数据,甚至是一张图片(二进制内容)。一个字符串类型的值存储的最大容量是1GB
  2. 命令

(1)setnx :如果不存在key,就插入,否则就保持原来的值 ( setnx crxy aaa )
(2)mset : 一次设置多个key ( mset crxy1 1 crxy2 2 )
(3)mget : 一次查询多个值 ( mget crxy1 crxy2 )
(4)incr crxy1 : 让crxy1对应的value自增 (只能针对int)
(5)incrby crxy1 n :让crxy1的value增加n
(6)decry : 自减
(7)decryby : 自减
(8)incrbyfloat crxy float:
(9)append crxy aaa : 给crxy的value后跟"aaa"
(10)strlen crxy : 返回value的长度

 [注] : set命令会覆盖其他所有数据类型,转换为String类型  

二. Hash

  1. hash类型的值存储了字段和字段值的映射,字段和字段值只能是字符串,不支持其他数据类型。hash类型的键至多可以存储(2^{32}-1)个字段。
  2. 命令

a. hset user:100 name zhangsan
b. hget user:100 name
//多次插入
c. hmset user:100 gender 0 birthday 1991-07-31
e. hmget user:100 gender
//获取所有user:100的属性
f. hgetall user:100
//插入age的年龄
g. hsetnx user:100 age 22
h. hdel user:100 age //删除value中的一个属性
i. hkeys user:100 // 相当于map.keyset
j: hvals user:100 // 键值对中的所有value
k: hlen user:100 // user:100有几个键值对

三. list

  1. list是一个有序的字符串列表,用双向链表实现
  2. list可模拟队列
  3. 一个列表最多能容纳(2^{32}-1)个字符串
  4. 命令

a.左侧插入:
lpush list1 a
lpush list1 b
lpush list1 c : list1<c,b,a>
b.右侧插入:
rpush list1 a
rpush list2 b : list<a,b,c>
c. 查询
lrange list1 0 -1 : 查询列表的0角标到最后一个角标的元素 (-1:最后个元素.-2:倒数第二个元素)
d. lpop list1 : 弹出左侧的一个 // 删除该元素
rpop list1 : 弹出右侧的一个
e. llen : 查看列表长度
f. lrem list1 1 b : 删除list1左侧的第一个b (删除所有b用0)
lrem list1 -1 b : 删除list1右侧的第一个b
g. lindex list1 0 : 获取0角标的元素
h. lset list1 0 m : 设置0角标的元素为m
i. ltrim list1 0 2 : 截取列表角标0-2
j. linsert list1 before m a : 在lsit1元素m的前面插入一个a (help linsert)
k. rpoplpush list1 list2 : list1右侧弹出一个左侧插入到list2中

[注]:lpush + rpop 操作的List可以模拟队列

四. set

  1. set中存放一系列的字符串,这些字符串无序不可重复 (插入重复字符串不报错,只是没有结果)
  2. set适合集合运算,例如求交集,并集
  3. 命令
  1. sadd set1 2 3 4 : 向set集合添加'2,3,4',不可插入集合中已经存在的元素
  2. srem set1 2 : 返回1,删除成功
  3. sismember set1 3 : 查看元素是否存在
  4. smembers set1: 查看set1的所有元素
  5. sdiff set1 set2 : 查看在set1而不再set2中的元素 (差集)
  6. sinter set1 set2 : 查看set1和set2中共有的元素 (交集)
  7. sunion set set1 : 查看两个集合的 (并集)
  8. sdiffstore a set set1 : 把在set而不在set1中的元素放到集合a中(a的类型是set)
  9. spop set1 : 弹出一个元素
  10. srandmember set1 2 : 从set1中随机取出2个数据(这2个数据不会重复)
    srandmember set1 -2 : 也是随机取2个, 这个元素可能重复
  11. srandmember key [count]
    如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
    如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

五. sorted set

  1. 在集合set的基础上,为其中的每一个元素加上一个分数 , 便于获取topN
  2. 命令
  1. zadd zset1 10 a : 增加元素a,分值10
    zadd zset1 +inf m : 向zset1中加入正无穷大的元素m
  2. zscroe zset1 a : 获取元素a的分值
  3. zrange zset1 0 -1 withscores : 从0号开始取所有元素,并带着分值一起取得
  4. zrevrange zset1 0 [withscores] : 倒叙取得元素值
  5. zincreby zset1 2 a : 为zset1中的元素a的分值增加2
  6. zcard zset1 : 获取zset1中元素的个数
  7. zcount zset1 0 15 : 获取zset1中分值0-15 的元素
  8. zrem zset1 a : 删除zset1中的元素a
    zrem zset 0 1 : 删除zset1中角标0,1的元素
  9. zremrangebyscroe zset1 0 10: 删除分值0-10的元素
[注]:zset和list的对比  
     1. 相同点:二者都有序,都可以获取某一范围的元素
     2. 不同点:
         (1)list用双向链表实现,访问链表两端的数据快,访问中间的数据慢
         (2)zset使用散列表和跳跃表(skip list)实现,所以无论是两端还是中间元素的访问速度都很快
         (3)list不能简单的调整某个元素的位置,而zset只需改变分值即可改变元素位置
         (4)zset比list更耗费内存
原文地址:https://www.cnblogs.com/72808ljup/p/5205260.html