String类型
String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等
1、set / get / append / strlen
127.0.0.1:6379> append k1 hello 该键不存在,因此append创建
(integer) 5
127.0.0.1:6379> append k1 word 该键已经存在,因此返回追加后value的长度值
(integer) 9
127.0.0.1:6379> get k1 get命令获取该键值
"helloword"
127.0.0.1:6379> strlen k1 获取指定key的字符长度
(integer) 9
127.0.0.1:6379> exists k1 判断该键是否存在,存在返回1,否则返回0
(integer) 1
127.0.0.1:6379> set k1 "just do it" #
OK
127.0.0.1:6379> get k1 通过set命令为键设置新值,并覆盖原有值
"just do it"
2、incr / decr / incrby / decrby
127.0.0.1:6379> set n 100
OK
127.0.0.1:6379> incr n #递增1
(integer) 101
127.0.0.1:6379> incr n
(integer) 102
127.0.0.1:6379> decr n #递减1
(integer) 101
127.0.0.1:6379> incrby n 10 #递增10
(integer) 111
127.0.0.1:6379> decrby n 100 #递减100
(integer) 11
3、getset,setex,setnx
getset key value :覆盖,并显示旧值
setex key time value :为键值设置过期时间(秒)
ttl key :显示剩余有效时间
setnx:创建指定键,若该键存在则不执行,不存在则执行
例:getset key value :获取key值并返回,同时给key设新的值
getset返回值:①返回get的值分别执行 ② 返回的get 后 set变更的值(原子性 、一致性)
127.0.0.1:6379> getset k2 "hello"
"11"
127.0.0.1:6379> get k2 #查看k2键,显示被覆盖
"hello"
127.0.0.1:6379> setex k2 100 "i miss u"
OK
127.0.0.1:6379> get k2
"i miss u"
127.0.0.1:6379> ttl k2 查看剩余时间
(integer) 82 现在的时间剩余82
127.0.0.1:6379> get k2 #时间到了之后
(nil)
127.0.0.1:6379> ttl k2
(integer) -2
127.0.0.1:6379> setnx k9 10 #无k9这个键时
(integer) 1
127.0.0.1:6379> get k9
"10"
127.0.0.1:6379> setnx k9 100 #已经k9这个键时。setnx失败
(integer) 0
127.0.0.1:6379> get k9
"10"
4、mset / mget / msetnx
例:mset key value [key value…] :批量设置键-值对
mget key [key…]: 批量获取键值对
MSETNX key value [key value …]:批量设置键-值对,都不存在就执行并返回1;只要有一个存在就不执行并返回0
127.0.0.1:6379> mset aa "hello" bb "world" 批量设置键的值
OK
127.0.0.1:6379> mget aa bb 批量获取键的值
1) "hello"
2) "world"
127.0.0.1:6379> msetnx cc 100 dd 200
(integer) 1
127.0.0.1:6379> mget cc dd
1) "100"
2) "200"
127.0.0.1:6379> msetnx aa 200 mm 100 批量设置键值,若有存在的键则不执行
(integer) 0
List类型
概述:列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素
1、lpush/lpushx/lrange
LPUSH key value [value …]在头部(左侧)依次插入列表元素
LPUSHX key value:键必须存在才能执行,在头部插入元素值并返回列表元素数量
LRANGE key start stop:|取从位置索引start到位置索引stop的所有元素(所以以o开始)
127.0.0.1:6379> lpush k1 a b c d e f g
(integer) 7
127.0.0.1:6379> lrange k1 0 3 第一个元素到第四个元素
1) "g"
2) "f"
3) "e"
4) "d"
127.0.0.1:6379> lrange k1 2 4 第三个元素到第五个元素
1) "e"
2) "d"
3) "c"
2、lpop / llen
127.0.0.1:6379> lpop k1
"e"
127.0.0.1:6379> lpop k1
"g"
127.0.0.1:6379> lpop k1
"f"
127.0.0.1:6379> llen k1 上面弹出了三个元素,所以查看变成五个元素
(integer) 5
3、lrem / lset / lindex / ltrim
lrem key count value:从列表头部开始删除count个值为value的元素,并返回实际删除数量
lset key index value:将位置索引为index的元素设置新值value
lindex key index:获取索引为index的元素
ltrim key start stop:仅保留从位置索引start到索引stop的元素
127.0.0.1:6379> lpush k2 a b c d e f a b c
(integer) 9
127.0.0.1:6379> lrem k2 2 a 从头部(left)向尾部(right)变量链表,删除2个值等于a的元素,返回值为实际删除的数量
(integer) 2
127.0.0.1:6379> lrange k2 0 -1 看出删除后链中的全部元素
1) "c"
2) "b"
3) "f"
4) "e"
5) "d"
6) "c"
7) "b"
127.0.0.1:6379> lrem k2 3 b
(integer) 2 只查看到两个b元素 并删除
127.0.0.1:6379> lset k2 2 f #将第三个元素设置为f
OK
127.0.0.1:6379> lindex k2 3 #获取索引为3的元素值
"b"
127.0.0.1:6379> ltrim k2 0 2 仅保留索引为0到索引为2的元素,相当于保留删除
OK
127.0.0.1:6379> lrange k2 0 -1
1) "b"
2) "d"
3) "f"
4、linsert
linsert : 在元素的前面(向左)或后面(向右)插入新元素
127.0.0.1:6379> lpush k2 a b c d e
(integer) 5
127.0.0.1:6379> linsert k2 before a a1 在a前面插入新元素a1
(integer) 6
127.0.0.1:6379> linsert k2 after e e2 在e后面插入新元素e2
(integer) 7
127.0.0.1:6379> lindex k2 1
"e2"
127.0.0.1:6379> linsert k2 after k a 在不存在的元素前或后插入,失败返回-1
(integer) -1
5、rpush / rpushx / rpop / rpoplpush
RPUSH key value [value …]在列表的尾部依次插入value
RPUSHX key value: key必须存在才可执行,将value从尾部插入,并返回所有元素数量RPOP key:在尾部弹出~(移除)一个元素,并返回该元素
RPOPLPUSH source destination:在keyl的尾部弹出一个元素并返回,将它插入key2的头部
127.0.0.1:6379> rpush k2 a b c d 右插入
(integer) 4
127.0.0.1:6379> rpushx k2 e
(integer) 5
127.0.0.1:6379> lindex k2 4 查看索引值4的元素
"e"
........ 分别插入到f
127.0.0.1:6379> rpop k2
"f"
Hash类型
概述: hash用于存储对象。可以采用这样的命名方式(hash格式) :对象类别和TD构成键名,使用字段表示对象的属性,而字段值则存储属性值。
如:存储ID为2的汽车对象。
如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。
1、set / hget / hdel / hexists / hlen / hsetnx
127.0.0.1:6379> del k2 删除原有的
(integer) 1
127.0.0.1:6379> hset k2 zhangsan a lisi b wangwu c
(integer) 3 添加内容元素
127.0.0.1:6379> hget k2 zhangsan
"a" 获取和zhangsan 字段的值a
127.0.0.1:6379> hget k2 lisi
"b"
127.0.0.1:6379> hexists k2 wangwu 判断wangwu存在 返回值1
(integer) 1
127.0.0.1:6379> hexists k2 liuyang
(integer) 0
127.0.0.1:6379> hlen k2
(integer) 3
127.0.0.1:6379> hsetnx k2 lisi 4
(integer) 0
127.0.0.1:6379> hget k2 wangwu
"c"
2、hincrby
127.0.0.1:6379> hset k2 lisi1 110 #追加的方式
(integer) 1
127.0.0.1:6379> hget k2 lisi1
"100"
127.0.0.1:6379> hget k2 zhangsan1
"a"
127.0.0.1:6379> hincrby k2 lisi 2 6
(integer) 105
127.0.0.1:6379> hincrby k2 lisi 2 - 8
(integer) 95
127.0.0.1:6379> hget k2 lisi1
"95"
3、hmset / hmget / hgetall / hkeys / hvals
127.0.0.1:6379> hgetall k2 hgetall 命令返回myhash 键的又有字段及其值,从结果中可以看出,他们是逐对列出的
1) "zhangsan"
2) "a"
3) "lisi"
4) "b"
5) "wangwu"
6) "c"
127.0.0.1:6379> hgetall k2
1) "zhangsan"
2) "a"
3) "lisi"
4) "b"
5) "wangwu"
6) "c"
127.0.0.1:6379> hget k2 zhaogo
(nil)
127.0.0.1:6379> hget k2 lisi
"b"
127.0.0.1:6379> hkeys k2 hkeys命令仅获取myhash键中所有字段的名字
1) "zhangsan"
2) "lisi"
3) "wangwu"
127.0.0.1:6379> hvals k2 hvals 命令仅获取myhash键中所有字段的值
Set类型(无序集合)
概述:无序集合,元素类型为String类型,元素具有唯一性,不允许存在重复的成员。多个集合类型之间可以进行并集、交集和差集运算。
应用范围:
①可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。
②充分利用Set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的Set中,而购买另外一种电子产品的客户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,Set的intersections命令就可以充分发挥它的方便和效率的优势了
1、sadd / smembers / scard / sismember
sadd 将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合
smembers 通过smembers命令查看插入的结果,输出的顺序与插入顺序无关
scard 获取集合中成员的数量
sismember 判断键中xxx成员是否存在,返回0表示不存在,1表示存在
127.0.0.1:6379> sadd k1 a b c d e
(integer) 5
127.0.0.1:6379> smembers k1
1) "b"
2) "a"
3) "d"
4) "c"
5) "e"
127.0.0.1:6379> scard k1
(integer) 5
127.0.0.1:6379> sismember k1 c
(integer) 1
127.0.0.1:6379> sismember k1 f
(integer) 0
2、spop / srem / srandmember / smove
127.0.0.1:6379> sadd k1 a b c d e
(integer) 5
127.0.0.1:6379> spop k1
"d"
127.0.0.1:6379> smembers k1
1) "c"
2) "b"
3) "a"
4) "e"
127.0.0.1:6379> srem k1 a b c
(integer) 3
127.0.0.1:6379> smembers k1
1) "e"
127.0.0.1:6379> del k2
(integer) 1
127.0.0.1:6379> smove k1 k2 d k1中没有d所以失败
(integer) 0
127.0.0.1:6379> smove k1 k2 e
(integer) 1
127.0.0.1:6379> keys k2
1) "k2"
127.0.0.1:6379> smembers k2 分别查看myset和myset2的成员,确认移动是否真的成功
1) "e"
Sorted Set类型(zset、有序集合)
有序集合,元素类型为String,元素具有唯一性,不能重复。
每个元素都会关联一个double类型的分数score(表示权重),可以通过权重的大小排序,元素的score可以相同
应用范围:
可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行zADD命
令更新玩家的分数,此后再通过ZRANGE命令获取积分"OP10的用户信息。当然我们也可以利用ZRANK命令通过username来获取玩家的排行信息。最后我们将组合使用ZRANGE和ZRANK命令快速的获取和某个玩家积分相近的其他用户的信息。
1、zadd / zcard / zcount / zrem / zincrby / zscore / zrank
127.0.0.1:6379> del k2
(integer) 1
127.0.0.1:6379> zadd k2 1 a 2 b 3 c
(integer) 3
127.0.0.1:6379> zrange k2 0 -1 withscores 0表示第一个成员 -1表示最后一个成员;withscores选项表示返回的结果中包含每个成员及其分数,否则只返回成员
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
127.0.0.1:6379> zcard k2
(integer) 3
127.0.0.1:6379> zcount k2 1 2
(integer) 2
127.0.0.1:6379> zrem k2 a b
(integer) 2
127.0.0.1:6379> zincrby k2 2 a
"2"
127.0.0.1:6379> zrange k2 0 -1 withscores
1) "a"
2) "2"
3) "c"
4) "3"
127.0.0.1:6379> zrank k2 c
(integer) 1
127.0.0.1:6379> zrank k2 d
(nil)
127.0.0.1:6379> zrank k2 a
(integer) 0
2、zrangebyscore / zremrangebyrank / zremrrangebyscore
127.0.0.1:6379> zadd k1 1 a 2 b 3 c 4 d 5 e
(integer) 5
127.0.0.1:6379> zrangebyscore k1 2 4
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> zrangebyscore k1 -inf +inf limit 2 2
1) "c"
2) "d"
127.0.0.1:6379> zremrangebyrank k1 1 3
(integer) 3
127.0.0.1:6379> zrange k1 0 -1
1) "a"
2) "e"
127.0.0.1:6379> zremrangebyscore k1 1 2
(integer) 1
127.0.0.1:6379> zrange k1 0 -1
1) "e"
3、zrevrange / zrevrangebyscore / zrevrank