五大数据类型
在redis中无论什么数据类型,在数据库中都是以key-value形式保存,通过进行对Redis-key的操作,来完成对数据库中数据的操作。
Redis的全部官方命令
下面只是一些常见的命令
String(字符串)
set key value
(设置name字段的值为wulei)
127.0.0.1:6379> set name wulei
OK
get key
得到name字段的值
127.0.0.1:6379> get name
"wulei"
exists key
判断key是否存在,存在返回1,不存在返回0
127.0.0.1:6379> EXISTS name
(integer) 1
127.0.0.1:6379> exists name2
(integer) 0
del key
删除keymove key [0~15]
移动key到指定的数据库type key
查看key的数据类型
127.0.0.1:6379> type name
string
expire key second
设置字段的作用时间(多久会失效)ttl key
查看字段的有效时间
127.0.0.1:6379> expire name 30 # 设置name字段的有效期为30秒
(integer) 1
127.0.0.1:6379> ttl name # 查看name还有多久失效 如果还没失效会返回正常的有效时间
(integer) 21
127.0.0.1:6379> ttl name
(integer) 16
127.0.0.1:6379> ttl name
(integer) 11
127.0.0.1:6379> ttl name
(integer) 4
127.0.0.1:6379> ttl name # 现在name已经失效,返回-2
(integer) -2
127.0.0.1:6379> get name # 再次get name 返回空,说明name字段已经被自动删除
(nil)
127.0.0.1:6379> set age 3 # 加一个字段age不设置有效时间
OK
127.0.0.1:6379> ttl age # 用ttl age 会返回 -1
(integer) -1
rename key newkey
字段重命名renamenx key newkey
当newkey不存在的时候重命名成功,否则失败
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> rename age newage
OK
127.0.0.1:6379> renamenx newage newage2
(integer) 1
127.0.0.1:6379> keys *
1) "newage2"
APPEND key value
向指定的key的value后追加字符串
127.0.0.1:6379> set string hello
OK
127.0.0.1:6379> append string ,wulei
(integer) 11
127.0.0.1:6379> get string
"hello,wulei"
DECR/INCR key
将指定key的value数值进行+1/-1的原子递增
127.0.0.1:6379> set count 0
OK
127.0.0.1:6379> incr count
(integer) 1
127.0.0.1:6379> incr count
(integer) 2
127.0.0.1:6379> get count
"2"
127.0.0.1:6379> decr count
(integer) 1
127.0.0.1:6379> decr count
(integer) 0
127.0.0.1:6379> decr count
(integer) -1
127.0.0.1:6379> get count
"-1"
INCRBY/DECRBY key num
按指定的步长对数值进行加减
127.0.0.1:6379> incrby count 10
(integer) 10
127.0.0.1:6379> incrby count 10
(integer) 20
127.0.0.1:6379> get count
"20"
127.0.0.1:6379> decrby count 20
(integer) 0
127.0.0.1:6379> get count
"0"
STRLEN key
查看key保存值的长度
127.0.0.1:6379> set string abcdefg
OK
127.0.0.1:6379> strlen string
(integer) 7
GETRANGE key start end
按起止位置获取字符串[start,end]
127.0.0.1:6379> getrange string 0 3
"abcd"
SETRANGE key offset value
用指定的value 替换key中 offset开始的值
127.0.0.1:6379> setrange string 1 xxx
(integer) 7
127.0.0.1:6379> get string
"axxxefg"
GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
127.0.0.1:6379> getset string xxxxxx
"axxxefg"
127.0.0.1:6379> get string
"xxxxxx"
SETNX key value
仅当key不存在时进行set
127.0.0.1:6379> set name wl #name:wl
OK
127.0.0.1:6379> setnx name zhangsan #在name已经存在的情况下用setnx设置name的值失败返回0
(integer) 0
127.0.0.1:6379> get name
"wl"
127.0.0.1:6379> setnx name2 lishi
(integer) 1
127.0.0.1:6379> get name2
"lishi"
SETEX key seconds value
创建一个键值对并设置它的有效期(秒)
127.0.0.1:6379> setex name3 20 wl
OK
127.0.0.1:6379> get name3
"wl"
127.0.0.1:6379> ttl name3
(integer) 11
127.0.0.1:6379> keys *
1) "name2"
2) "name3"
3) "name"
4) "count"
5) "string"
127.0.0.1:6379> keys *
1) "name2"
2) "name"
3) "count"
4) "string"
MSET(MGET) key1 value1 [key2 value2..]
批量设置(获取)键值对
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
MSETNX key1 value1 [key2 value2..]
批量设置键值对,仅当参数中所有的key都不存在时执行(有一个失败就全部失败)
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> msetnx k1 v1 k2 v2 k3 v3
(integer) 0
127.0.0.1:6379> keys *
1) "k1"
- 最常用的习惯性写法之一
127.0.0.1:6379> msetnx user:1:name zhangsan user:1:age 3
(integer) 1
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "3"
127.0.0.1:6379> keys *
1) "user:1:name"
2) "user:1:age"
List(列表)
Redis里面的list与java的list有一点点相同,常用的也是push和pop命令,只是redis的list可以在两头添加或者移除元素,常用的命令也不多
LPUSH/RPUSH key value1[value2..]
在左边或者右边push一个或者多个值,那个key就是一个list
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> LPUSH list one #新建一个list名为list并在左边push一个value
(integer) 1
127.0.0.1:6379> LPUSH list two
(integer) 2
127.0.0.1:6379> LPUSH list three
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1 #查看list的全部数据
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> RPUSH list2 one
(integer) 1
127.0.0.1:6379> RPUSH list2 two
(integer) 2
127.0.0.1:6379> RPUSH list2 three
(integer) 3
127.0.0.1:6379> LRANGE list2 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> LPUSH list3 1 2 3 4 #批量push
(integer) 4
127.0.0.1:6379> LRANGE list3 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
LRANGE key start end
获取list[start,end]的元素LINSERT key BEFORE|AFTER pivot value
在指定元素的前面或者后面插入元素
127.0.0.1:6379> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> LINSERT list before one xxx
(integer) 5
127.0.0.1:6379> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
4) "xxx"
5) "one"
127.0.0.1:6379> LINSERT list after four cccc
(integer) 6
127.0.0.1:6379> LRANGE list 0 -1
1) "four"
2) "cccc"
3) "three"
4) "two"
5) "xxx"
6) "one"
LLEN key
查看list的长度LINDEX key index
通过索引获取list的元素
127.0.0.1:6379> LINDEX list 0
"four"
LSET key index value
根据索引更新元素的值
127.0.0.1:6379> Lrange list 0 -1
1) "four"
2) "cccc"
3) "three"
4) "two"
5) "xxx"
6) "one"
127.0.0.1:6379> LSET list 0 vvv
OK
127.0.0.1:6379> Lrange list 0 -1
1) "vvv"
2) "cccc"
3) "three"
4) "two"
5) "xxx"
6) "one"
LPOP/RPOP key
移除list左边或者右边的元素RPOPLPUSH source destination
移除source列表的右边的元素并添加到到destination列表的第一个元素
127.0.0.1:6379> RPOPLPUSH list list2
"one"
127.0.0.1:6379> LRANGE list 0 -1
1) "vvv"
2) "cccc"
3) "three"
4) "two"
5) "xxx"
127.0.0.1:6379> LRANGE list2 0 -1
1) "one"
LTRIM key start end
通过list的下标截取元素并改变原来的list
127.0.0.1:6379> LRANGE list 0 -1
1) "xxx"
2) "vvv"
3) "cccc"
4) "three"
5) "two"
127.0.0.1:6379> LTRIM list 1 3
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "vvv"
2) "cccc"
3) "three"
LREM key count value
移除指定数量的元素,因为list的元素是可以重复的,所以count有3种情况:- count > 0 从左边开始扫描指定count个value
- count < 0 从右边开始扫描指定count个value
- count = 0 删除全部的value
127.0.0.1:6379> LRANGE list 0 -1
1) "vvv"
2) "ddd"
3) "ccc"
4) "vvv"
5) "bbb"
6) "aaa"
7) "vvv"
127.0.0.1:6379> LREM list 1 vvv
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "ddd"
2) "ccc"
3) "vvv"
4) "bbb"
5) "aaa"
6) "vvv"
127.0.0.1:6379> LREM list -1 vvv
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "ddd"
2) "ccc"
3) "vvv"
4) "bbb"
5) "aaa"
127.0.0.1:6379> LREM list 0 vvv
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "ddd"
2) "ccc"
3) "bbb"
4) "aaa"
Set(集合)
Redis Set 是 String 的无序排列
SADD key member1[member2..]
向集合set中添加一个或多个不重复的元素
127.0.0.1:6379> sadd set1 1
(integer) 1
127.0.0.1:6379> sadd set1 2 3 4
(integer) 3
127.0.0.1:6379> sadd set1 4 5 6
(integer) 2
SCARD key
获取set集合中元素的个数
127.0.0.1:6379> scard set1
(integer) 6
SMEMBERS key
返回set集合中的所有元素
127.0.0.1:6379> smembers set1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
SISMEMBER key member
判断某个元素是否是set集合中的元素
127.0.0.1:6379> SISMEMBER set1 1
(integer) 1
127.0.0.1:6379> SISMEMBER set1 8
(integer) 0
SRANDMEMBER key [count]
随机返回set集合中的count个元素,默认值为1
127.0.0.1:6379> SMEMBERS set1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> SRANDMEMBER set1
"4"
127.0.0.1:6379> SRANDMEMBER set1
"4"
127.0.0.1:6379> SRANDMEMBER set1
"3"
127.0.0.1:6379> SRANDMEMBER set1 3
1) "5"
2) "6"
3) "3"
SPOP key [count]
随机弹出并删除set集合中的count个元素,count的默认值为1
127.0.0.1:6379> spop set1
"6"
127.0.0.1:6379> spop set1 2
1) "1"
2) "3"
127.0.0.1:6379> SMEMBERS set1
1) "2"
2) "4"
3) "5"
SMOVE source destination member
将source集合的元素member移动到destination集和中
127.0.0.1:6379> SMEMBERS set1
1) "2"
2) "4"
3) "5"
127.0.0.1:6379> SMOVE set1 set2 2
(integer) 1
127.0.0.1:6379> SMEMBERS set2
1) "2"
SREM key member1[member2..]
移除指定的一个或多个元素
127.0.0.1:6379> sadd set1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> srem set1 1
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "2"
2) "3"
3) "4"
4) "5"
SDIFF key1[key2..]
获得两个集合的差集
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> sadd set1 a b c d
(integer) 4
127.0.0.1:6379> sadd set2 b c e f
(integer) 4
127.0.0.1:6379> sdiff set1 set2
1) "a"
2) "d"
SDIFFSTORE destination key1[key2..]
将key1和key2…的差集保存在destination集合中,destination原有的数据会被删除,只保留差集的结果
127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "a"
3) "d"
4) "b"
127.0.0.1:6379> SMEMBERS set2
1) "f"
2) "c"
3) "e"
4) "b"
127.0.0.1:6379> sadd set3 g
(integer) 1
127.0.0.1:6379> SDIFFSTORE set3 set1 set2
(integer) 2
127.0.0.1:6379> SMEMBERS set3
1) "a"
2) "d"
SINTER key1 [key2..]
交集
127.0.0.1:6379> SINTER set1 set2
1) "c"
2) "b"
SINTERSTORE destination key1[key2..]
和SDIFFSTORE一样,返回的交集的结果覆盖到集合destination里面去SUNION key1 [key2..]
并集
127.0.0.1:6379> sunion set1 set2
1) "c"
2) "f"
3) "a"
4) "d"
5) "b"
6) "e"
SUNIONSTORE destination key1 [key2..]
取得多个集合并集的结果覆盖到destination集合中
Hash(哈希)
Hash与String的命令大多相似
Hash的存储结构为:key-map
HSET key field value
将哈希表 key 中的字段 field 的值设为 value 。重复设置同一个field会覆盖,返回0
127.0.0.1:6379> hset myhash name zhangsan
(integer) 1
127.0.0.1:6379> hset myhash name zhangsan
(integer) 0
HMSET key field1 value1 [field2 value2..]
和String一样,同时设置多个字段的值
127.0.0.1:6379> hmset myhash age 3 sex 1
OK
HSETNX key field value
当field不存在的时候才会添加成功
127.0.0.1:6379> hsetnx myhash name lishi #name已经存在了
(integer) 0
HEXISTS key field
查看哈希表 key 中,指定的字段是否存在。
127.0.0.1:6379> hexists myhash name
(integer) 1
HGET key field value
获取存储在哈希表中指定字段的值
127.0.0.1:6379> hget myhash name
"zhangsan"
HMGET key field1 [field2..]
获取存储在哈希表中多个指定字段的值HGETALL key
获取在哈希表key 的所有字段和值
127.0.0.1:6379> hgetall myhash
1) "name"
2) "zhangsan"
3) "age"
4) "3"
5) "sex"
6) "1"
HKEYS key
获取哈希表key中所有的字段HVALS key
获取哈希表中所有值HLEN key
获取哈希表中字段的数量HDEL key field1 [field2..]
删除哈希表key中一个/多个field字段
127.0.0.1:6379> hdel myhash age sex
(integer) 2
HINCRBY key field n
和String一样这个数值加n
127.0.0.1:6379> hset myhash num 5
(integer) 1
127.0.0.1:6379> hincrby myhash num 5
(integer) 10
127.0.0.1:6379> hincrby myhash num -5
(integer) 5
ZSet(有序集合)
ZSet 和Set差不多,不同的是每个元素都会关联一个double类型的分数(score)。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
ZADD key score member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的值
127.0.0.1:6379> Zadd myset 2000 zhangsan 500 lishi 1000 wangwu
(integer) 3
ZCARD key
查看有序集合中的元素数量
127.0.0.1:6379> zcard myset
(integer) 3
ZCOUNT key min max
返回有序集合中指定区间score的成员数
127.0.0.1:6379> zcount myset 500 1000
(integer) 2
ZINCRBY key n member
有序集合中对指定成员的分数加上增量 n
127.0.0.1:6379> ZINCRBY myset 100 lishi
"600"
ZSCORE key member
返回有序集中,指定元素的分数值
127.0.0.1:6379> ZSCORE myset lishi
"600"
ZRANK key member
返回有序集合中指定成员的索引
127.0.0.1:6379> ZRANK myset zhangsan
(integer) 2
ZRANGE key start end
根据索引区间查看元素
127.0.0.1:6379> ZRANGE myset 0 -1 withscores #返回全部的元素并带上他们的数值
1) "lishi"
2) "600"
3) "wangwu"
4) "1000"
5) "zhangsan"
6) "2000"
ZRANGEBYLEX key min max
返回指定成员区间内的成员,按成员字典正序排序, 分数必须相同
127.0.0.1:6379> ZRANGEBYLEX myset - +
1) "lishi"
2) "wangwu"
3) "zhangsan
ZRANGEBYSCORE key min max
通过分数返回有序集合指定区间内的成员 -inf 和 +inf分别表示最小最大值
127.0.0.1:6379> ZRANGEBYSCORE myset 500 2000 #返回500-2000的成员,升序
1) "lishi"
2) "wangwu"
3) "zhangsan"
127.0.0.1:6379> ZRANGEBYSCORE myset 500 2000 withscores #带上他们的分数
1) "lishi"
2) "600"
3) "wangwu"
4) "1000"
5) "zhangsan"
6) "2000"
127.0.0.1:6379> ZRANGEBYSCORE myset -inf +inf #升序的另外一种写法
1) "lishi"
2) "wangwu"
3) "zhangsan"
ZREM key member1 [member2..]
移除一个或多个成员
127.0.0.1:6379> ZREM myset zhangsan
(integer) 1
127.0.0.1:6379> ZRANGE myset 0 -1
1) "lishi"
2) "wangwu"
ZREMRANGEBYLEX key - +
删除所有的成员ZREMRANGEBYRANK key start stop
在升序好了的数据根据下标的索引区间删除数据ZREMRANGEBYSCORE key min max
移除有序集合中给定的分数区间的所有成员ZREVRANGE key start end
返回有序集中指定区间内的成员,通过索引,分数从高到底
127.0.0.1:6379> ZREVRANGE myset 0 -1
1) "wangwu"
2) "zhangsan"
3) "lishi"
4) "xiaohong"
5) "jon"
127.0.0.1:6379> ZREVRANGE myset 0 -1 withscores
1) "wangwu"
2) "6000"
3) "zhangsan"
4) "1500"
5) "lishi"
6) "1000"
7) "xiaohong"
8) "500"
9) "jon"
10) "300"
ZREVRANGEBYSCORRE key max min
根据给定的scores的区间的值按照降序排序
127.0.0.1:6379> ZREVRANGEBYSCORE myset 6000 500 withscores
1) "wangwu"
2) "6000"
3) "zhangsan"
4) "1500"
5) "lishi"
6) "1000"
7) "xiaohong"
8) "500"
ZREVRANK key member
返回降序后的指定成员的下标索引
小结
String的基本命令:
set key value
set一个key-valueget key
get一个keyMSET key1 value1 [key2 value2..]
批量set多个key-valueMGET key1 [key2..]
批量获得多个key的valueDEL key
删除key
List的基本命令
LPUSH/RPUSH key value1[value2..]
在左边/右边push一个值LRANGE key start end
LRANGE key 0 -1 根据索引获取所有的值LPOP/RPOP key
从最左边/最右边移除值 并返回
Set的基本命令
SADD key member1[member2..]
向集合中无序增加一个/多个成员SCARD key
获取集合的成员数SMEMBERS key
返回集合中所有的成员SREM key member1[member2..]
移除集合中一个/多个成员SDIFF key1[key2..]
差集SINTER key1 [key2..]
交集SUNION key1 [key2..]
并集
Hash的基本命令
HSET key field value
将哈希表 key 中的字段 field 的值设为 valueHMSET key field1 value1 [field2 value2..]
同时将多个 field-value (域-值)对设置到哈希表 key 中HGET key field value
获取存储在哈希表中指定字段的值HMGET key field1 [field2..]
获取所有给定字段的值HDEL key field1 [field2..]
删除哈希表key中一个/多个field字段
ZSet的基本命令
ZADD key score member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数ZCOUNT key min max
计算在有序集合中指定区间score的成员数ZSCORE key member
返回有序集中,指定成员的分数值ZRANGE key start end
通过索引区间返回有序集合成指定区间内的成员,升序ZRANGEBYSCORE key min max
通过分数返回有序集合指定区间内的成员,升序ZREVRANGE key start end
返回有序集中指定区间内的成员,通过索引,分数从高到底ZREM key member1 [member2..]
移除有序集合中一个/多个成员ZREMRANGEBYSCORE key min max
移除有序集合中给定的分数区间的所有成员