Redis 数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
1、string(字符串)
127.0.0.1:6379> set a 2048 # 给'键'a赋值(设置给定key的值。如果key已经存储其他值,SET就覆写旧值,且无视类型。)
OK
127.0.0.1:6379> get a # 获取'键'a对应的value
"2048"
127.0.0.1:6379> del a # 删除'键'a及其对应的value
(integer) 1
127.0.0.1:6379> get a
(nil)
127.0.0.1:6379> keys * # 获取所有已经赋值的'键'
1) "q"
2) "15"
3) "p"
4) "xiaoshuo"
5) "mycounter"
127.0.0.1:6379> del p q 15 # 同时删除多个元素
(integer) 3
127.0.0.1:6379> keys *
1) "xiaoshuo"
2) "mycounter"
127.0.0.1:6379> mset a1 123 a2 456 a3 789 # mset 同时给多个key进行赋值
OK
127.0.0.1:6379> mget a1 a2 a3 # mget 同时获取多个key对应的value
1) "123"
2) "456"
3) "789"
127.0.0.1:6379> set a4 999
OK
127.0.0.1:6379> incr a4 # 递增,每次增加1
(integer) 1000
127.0.0.1:6379> incr a4
(integer) 1001
127.0.0.1:6379> decr a4 # 递减,每次减少1
(integer) 1000
127.0.0.1:6379> incrby a4 100 # 增加 100
(integer) 1100
127.0.0.1:6379> decrby a4 500 # 减少 500
(integer) 600
127.0.0.1:6379> incrbyfloat a4 5.5 # 增加小数
"605.5"
127.0.0.1:6379> incrbyfloat a4 15
"620.5"
127.0.0.1:6379> set a5 7
OK
127.0.0.1:6379> get a5
"7"
127.0.0.1:6379> append a5 18 # 追加
(integer) 3
127.0.0.1:6379> get a5
"718"
127.0.0.1:6379> set a6 123456789
OK
127.0.0.1:6379> get a6
"123456789"
127.0.0.1:6379> getrange a6 0 0 # getrange key start end :获取存储在指定key中字符串的子字符串。字符串的截取范围由 start和end两个偏移量决定(包括start和end 在内)。
"1"
127.0.0.1:6379> getrange a6 0 1
"12"
127.0.0.1:6379> getrange a6 0 -1
"123456789"
127.0.0.1:6379> getrange a6 -2 -1
"89"
2、hash(哈希)
Redis hash 是一个string类型的field和value的映射表,是一个键值(key=>value)对集合, hash特别适合用于存储对象。
在以下代码中,我们设置了 redis 的一些描述信息(name, author, likes, desc) 到哈希表的 xiaoshuo 中
127.0.0.1:6379> hset xiaoshuo name jack # key field value 赋值
(integer) 1
# Redis Hset 命令用于为哈希表中的字段赋值.
# 如果哈希表不存在,一个新的哈希表被创建并进行hset操作。
# 如果字段已经存在于哈希表中,旧值将被覆盖。
127.0.0.1:6379> hset xiaoshuo author chendong
(integer) 1
127.0.0.1:6379> hset xiaoshuo desc hahah
(integer) 1
127.0.0.1:6379> hgetall xiaoshuo # 读取所有的redis hash字段
1) "name"
2) "jack"
3) "author"
4) "chendong"
5) "desc"
6) "hahah"
127.0.0.1:6379> hkeys xiaoshuo # 获取所有哈希表中的字段
1) "name"
2) "author"
3) "desc"
127.0.0.1:6379> hvals xiaoshuo # 获取哈希表中所有值
1) "jack"
2) "chendong"
3) "hahah"
127.0.0.1:6379> hdel xiaoshuo name # 删除哈希表中字段为name的值
(integer) 1
127.0.0.1:6379> hkeys xiaoshuo
1) "author"
2) "desc"
127.0.0.1:6379> hgetall xiaoshuo
1) "author"
2) "chendong"
3) "desc"
4) "hahah"
3、list(双向链表)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的左边(lpush)或者右边(rpush)
判断value类型:type key
127.0.0.1:6379> lpush lt 123 456 789 # 依次从左边插入值
(integer) 3
127.0.0.1:6379> lrange lt 0 -1 # 读取
1) "789"
2) "456"
3) "123"
127.0.0.1:6379> rpush lt 111 222 333 # 依次从右边插入值
(integer) 6
127.0.0.1:6379> lrange lt 0 -1
1) "789"
2) "456"
3) "123"
4) "111"
5) "222"
6) "333"
127.0.0.1:6379> type lt # 判断value类型
list
127.0.0.1:6379> lpop lt # 移除并获取列表第一个元素
"789"
127.0.0.1:6379> lrange lt 0 -1
1) "456"
2) "123"
3) "111"
4) "222"
5) "333"
127.0.0.1:6379> rpop lt # 移除并获取列表最后一个元素
"333"
127.0.0.1:6379> lrange lt 0 -1
1) "456"
2) "123"
3) "111"
4) "222"
127.0.0.1:6379> llen lt # 打印列表元素个数
(integer) 4
4、set(集合)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
127.0.0.1:6379> sadd b1 1 2 3 # 向集合添加一个或多个成员
(integer) 1
127.0.0.1:6379> sadd b1 p
(integer) 1
127.0.0.1:6379> scard b1 # 获取集合的成员数
(integer) 4
127.0.0.1:6379> smembers b1 # 返回集合中的所有成员
1) "1"
2) "3"
3) "p"
4) "2"
127.0.0.1:6379> sadd b1 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> spop b1 # 移除并返回集合中的一个随机元素
"6"
5、zset(有序集合)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
127.0.0.1:6379> zadd c1 10 m1 # 添加
(integer) 1
127.0.0.1:6379> zadd c1 11 m2
(integer) 1
127.0.0.1:6379> zadd c1 12 m3
(integer) 1
127.0.0.1:6379> zscore c1 m1 # 读取
"10"
127.0.0.1:6379> zscore c1 m2
"11"
127.0.0.1:6379> zrange c1 0 -1 # 顺序排序
1) "m1"
2) "m2"
3) "m3"
127.0.0.1:6379> zscore c1 m3
"12"
127.0.0.1:6379> zrevrange c1 0 -1 # 倒序排序
1) "m3"
2) "m2"
3) "m1"
127.0.0.1:6379> zscore c1 m3
"12"