redis基础知识(一)
nosql
泛指所有的非关系型数据库。
特点:
1. 数据存储在内存中
2. 有着灵活的数据模型,不需要先定义好表
非关系型数据库产生的原因:
1. 高并发读写
2. 海量数据的存储和搜索
3. 高可扩展性和高可用性
redis是一种高级的key-value的存储系统,其中value支持五种数据类型:
# 字符串(String)
# 哈希(hash)
# 字符串列表(list)
# 字符串集合(set)
# 有序字符串集合(sorted set)
string基本操作
set
用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。
127.0.0.1:6379> SET KEY_NAME VALUE
# 对不存在的键进行设置
127.0.0.1:6379> set key "value"
OK
127.0.0.1:6379> get key
"value"
127.0.0.1:6379>
# 对已经存在的键进行设置
127.0.0.1:6379> set key "value222"
OK
127.0.0.1:6379> get key
"value222"
get
用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。
127.0.0.1:6379> GET KEY_NAME
#对不存在的key进行get操作,返回nil
127.0.0.1:6379> get hhhhh
(nil)
#已存在,返回值
127.0.0.1:6379> set hhhhh 6666
OK
127.0.0.1:6379> get hhhhh
"6666"
setnx
Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。
127.0.0.1:6379> SETNX KEY_NAME VALUE #可用于redis单机分布式锁
127.0.0.1:6379> exists work #work是否存在
(integer) 0
127.0.0.1:6379> setnx work "fangdada" #设置work成功,返回1
(integer) 1
127.0.0.1:6379> setnx work "fangdada2222" #覆盖work失败,返回0
(integer) 0
127.0.0.1:6379> get work #get work,值还是最初设置的值
"fangdada"
Getrange
用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
127.0.0.1:6379> GETRANGE KEY_NAME start end
127.0.0.1:6379> set test1 "hello world!"
OK
127.0.0.1:6379> getrange test1 0 4
"hello"
127.0.0.1:6379> getrange test1 0 -1 # -1 表示列表的最后一个元素, -2 表示列表的倒数第二
"hello world!"
Mset
Mset 命令用于同时设置一个或多个 key-value 对。
127.0.0.1:6379> MSET key1 value1 key2 value2 .. keyN valueN
127.0.0.1:6379> mset key1 "key1" key2 "key2"
OK
127.0.0.1:6379> get key1
"key1"
127.0.0.1:6379> get key2
"key2"
127.0.0.1:6379>
Mget
命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。
127.0.0.1:6379> MGET KEY1 KEY2 .. KEYN
127.0.0.1:6379> mget key1 key2 key3 key4
1) "hello Redis!"
2) "key2"
3) (nil)
4) (nil)
Setex
为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
127.0.0.1:6379> SETEX KEY_NAME TIMEOUT VALUE
127.0.0.1:6379> setex mykey 40 "nihao"
OK
127.0.0.1:6379> get mykey
"nihao"
127.0.0.1:6379> ttl mykey
(integer) 31
127.0.0.1:6379>
Psetex
命令以毫秒为单位设置 key 的生存时间。
127.0.0.1:6379>PSETEX key1 EXPIRY_IN_MILLISECONDS value1
127.0.0.1:6379> psetex mykey 10000 "Hello"
OK
127.0.0.1:6379> pttl mykey
(integer) 7244
127.0.0.1:6379> get mykey
"Hello"
127.0.0.1:6379> pttl mykey
(integer) -2
127.0.0.1:6379> get mykey
(nil)
Setbit
命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
127.0.0.1:6379> Setbit KEY_NAME OFFSET VALUE
127.0.0.1:6379> setbit bit 10086 1
(integer) 0
127.0.0.1:6379> getbit bit 10086
(integer) 1
127.0.0.1:6379> getbit bit 1000 #1000偏移量默认初始化为0
(integer) 0
incr
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
127.0.0.1:6379> INCR KEY_NAME
127.0.0.1:6379> incr count
(integer) 1
127.0.0.1:6379> get count
"1"
127.0.0.1:6379> set count 99
OK
127.0.0.1:6379> incr count
(integer) 100
Incrby
命令将 key 中储存的数字加上指定的增量值。
127.0.0.1:6379> INCRBY KEY_NAME INCR_AMOUNT
127.0.0.1:6379> set rank 10
OK
127.0.0.1:6379> incrby rank 5
(integer) 15
Incrbyfloat
命令为 key 中所储存的值加上指定的浮点数增量值。
127.0.0.1:6379> INCRBYFLOAT KEY_NAME INCR_AMOUNT
127.0.0.1:6379> incrby rank 5
(integer) 15
127.0.0.1:6379> set rank 12.33
OK
127.0.0.1:6379> incrbyfloat rank 0.22
"12.55000000000000071"
Setrange
命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。
127.0.0.1:6379> SETRANGE KEY_NAME OFFSET VALUE
127.0.0.1:6379> set key1 "hello world!"
OK
127.0.0.1:6379> setrange key1 6 "Redis"
(integer) 12
127.0.0.1:6379> get key1
"hello Redis!"
Append
命令用于为指定的 key 追加值。
127.0.0.1:6379> APPEND KEY_NAME NEW_VALUE
127.0.0.1:6379> set myphone "iphone"
OK
127.0.0.1:6379> append myphone "12"
(integer) 8
127.0.0.1:6379> get myphone
"iphone12"
Getset
命令用于设置指定 key 的值,并返回 key 旧的值。
127.0.0.1:6379> GETSET KEY_NAME VALUE
127.0.0.1:6379> getset mykey3 "I'm happy"
(nil)
127.0.0.1:6379> getset mykey3 "I'm very happy"
"I'm happy"
hash基本操作
Hset
命令用于为哈希表中的字段赋值 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被覆盖。
127.0.0.1:6379> HSET KEY_NAME FIELD VALUE
127.0.0.1:6379> hset myhash field1 "foo"
(integer) 1
127.0.0.1:6379> hget myhash field1
"foo"
127.0.0.1:6379> hset myhash field1 "goo"
(integer) 0
127.0.0.1:6379> hget myhash field1
"goo"
hget
命令用于返回哈希表中指定字段的值。
127.0.0.1:6379> HGET KEY_NAME FIELD_NAME
127.0.0.1:6379> hget myhash field1
"foo"
Hgetall
命令用于返回哈希表中,所有的字段和值。
127.0.0.1:6379> HGETALL KEY_NAME
127.0.0.1:6379> hset myhash field2 "kkk"
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "goo"
3) "field2"
4) "kkk"
Hmset
命令用于同时将多个 field-value (字段-值)对设置到哈希表中。
127.0.0.1:6379> HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN
127.0.0.1:6379> hmset myhash field1 "aaa" field2 "bbb"
OK
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "aaa"
3) "field2"
4) "bbb"
Hmget
命令用于返回哈希表中,一个或多个给定字段的值。
127.0.0.1:6379> HMGET KEY_NAME FIELD1...FIELDN
127.0.0.1:6379> hmget myhash field1 field2 field4444
1) "aaa"
2) "bbb"
3) (nil)
Hexists
命令用于查看哈希表的指定字段是否存在。
127.0.0.1:6379> HEXISTS KEY_NAME FIELD_NAME
127.0.0.1:6379> hexists myhash field1
(integer) 1
127.0.0.1:6379> hexists myhash field333
(integer) 0
Hincrby
命令用于为哈希表中的字段值加上指定增量值。
127.0.0.1:6379> HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER
127.0.0.1:6379> hset myhash field1 13
(integer) 0
127.0.0.1:6379> hincrby myhash field1 4
(integer) 17
127.0.0.1:6379> hincrby myhash field1 -3
(integer) 14
Hlen
命令用于获取哈希表中字段的数量。
127.0.0.1:6379> HLEN KEY_NAME
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "14"
3) "field2"
4) "bbb"
127.0.0.1:6379> hlen myhash
(integer) 2
Hdel
命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
127.0.0.1:6379> HDEL KEY_NAME FIELD1.. FIELDN
127.0.0.1:6379> hdel myhash field2
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "14"
Hvals
命令返回哈希表所有字段的值。
127.0.0.1:6379> HVALS KEY_NAME FIELD VALUE
127.0.0.1:6379> hset myhash field2 "6666"
(integer) 1
127.0.0.1:6379> hvals myhash
1) "14"
2) "6666"
Hincrbyfloat
命令用于为哈希表中的字段值加上指定浮点数增量值。
127.0.0.1:6379> HINCRBYFLOAT KEY_NAME FIELD_NAME INCR_BY_NUMBER
127.0.0.1:6379> hset myhash field3 20.50
(integer) 0
127.0.0.1:6379> hincrbyfloat myhash field3 0.1
"20.60000000000000142"
Hkeys
命令用于获取哈希表中的所有字段名。
127.0.0.1:6379> HKEYS KEY_NAME FIELD_NAME INCR_BY_NUMBER
127.0.0.1:6379> hkeys myhash
1) "field1"
2) "field2"
3) "field3"
4) "field4"
Hsetnx
命令用于为哈希表中不存在的的字段赋值 。
127.0.0.1:6379> HSETNX KEY_NAME FIELD VALUE
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "14"
3) "field2"
4) "6666"
5) "field3"
6) "20.60000000000000142"
7) "field4"
8) "0.17999999999999999"
127.0.0.1:6379> hsetnx myhash field1 "15"
(integer) 0
127.0.0.1:6379> hget myhash field1
"14"
list基本操作
Lindex
命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二
127.0.0.1:6379> LINDEX KEY_NAME INDEX_POSITION
127.0.0.1:6379> lpush mylist "world"
(integer) 1
127.0.0.1:6379> lpush mylist "hello"
(integer) 2
127.0.0.1:6379> lindex mylist 0
"hello"
127.0.0.1:6379> lindex mylist 1
"world"
127.0.0.1:6379> lindex mylist -1
"world"
127.0.0.1:6379> lindex mylist -2
"hello"
127.0.0.1:6379> lindex mylist 3
(nil)
Rpush
命令用于将一个或多个值插入到列表的尾部(最右边)。如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。
127.0.0.1:6379> RPUSH KEY_NAME VALUE1..VALUEN
127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "world"
(integer) 2
127.0.0.1:6379> rpush mylist "foo"
(integer) 3
127.0.0.1:6379> rpush mylist "bar"
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
3) "foo"
4) "bar"
Lrange
返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。
127.0.0.1:6379> LRANGE KEY_NAME START END
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
3) "foo"
4) "bar"
Rpoplpush
命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
127.0.0.1:6379> RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME
127.0.0.1:6379> RPOPLPUSH mylist myotherlist
"bar"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
3) "foo"
127.0.0.1:6379> lrange myotherlist 0 -1
1) "bar"
Blpop
命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
127.0.0.1:6379> BLPOP LIST1 LIST2 .. LISTN TIMEOUT
127.0.0.1:6379> blpop mylist 5
1) "mylist"
2) "hello"
127.0.0.1:6379> blpop myotherlist 5
(nil)
(5.05s)
Brpop
命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
127.0.0.1:6379> BRPOP LIST1 LIST2 .. LISTN TIMEOUT
127.0.0.1:6379> brpop myotherlist 5
(nil)
(5.10s)
127.0.0.1:6379> rpush myotherlist "xixixi"
(integer) 1
127.0.0.1:6379> brpop myotherlist 5
1) "myotherlist"
2) "xixixi"
Brpoplpush
命令从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
127.0.0.1:6379> BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT
127.0.0.1:6379> brpoplpush mylist myotherlist 5
"foo"
127.0.0.1:6379> brpoplpush mylist myotherlist 5
(nil)
(5.03s)
Lrem
根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。
127.0.0.1:6379>LREM KEY_NAME COUNT VALUE
127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "hello"
(integer) 2
127.0.0.1:6379> rpush mylist "foo"
(integer) 3
127.0.0.1:6379> rpush mylist "hello"
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello"
3) "foo"
4) "hello"
127.0.0.1:6379> lrem mylist 2 "hello"
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "foo"
2) "hello"
Llen
Redis Llen 命令用于返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。
127.0.0.1:6379> LLEN KEY_NAME
127.0.0.1:6379> lrange mylist 0 -1
1) "foo"
2) "hello"
127.0.0.1:6379> rpush mylist "123"
(integer) 3
127.0.0.1:6379> llen mylist
(integer) 3
Ltrim
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
127.0.0.1:6379> LTRIM KEY_NAME START STOP
127.0.0.1:6379> lrange mylist 0 -1
1) "foo"
2) "hello"
3) "123"
4) "4444"
127.0.0.1:6379> ltrim mylist 1 -1
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "123"
3) "4444"
Lpop
命令用于移除并返回列表的第一个元素。
127.0.0.1:6379> LLEN KEY_NAME
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "123"
3) "4444"
127.0.0.1:6379> lpop mylist
"hello"
Lpushx
将一个或多个值插入到已存在的列表头部,列表不存在时操作无效。
127.0.0.1:6379> LPUSHX KEY_NAME VALUE1.. VALUEN
127.0.0.1:6379> lpushx mylist "123" "456"
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "456"
2) "123"
3) "123"
4) "4444"
Linsert
127.0.0.1:6379> LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE
命令用于在列表的元素前或者后插入元素。 当指定元素不存在于列表中时,不执行任何操作。 当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误。
127.0.0.1:6379> lrange mylist 0 -1
1) "456"
2) "123"
3) "123"
4) "4444"
127.0.0.1:6379> linsert mylist before "4444" "55555555"
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "456"
2) "123"
3) "123"
4) "55555555"
5) "4444"
Rpop
命令用于移除并返回列表的最后一个元素。
127.0.0.1:6379> RPOP KEY_NAME
127.0.0.1:6379> lrange mylist 0 -1
1) "456"
2) "123"
3) "123"
4) "55555555"
5) "4444"
127.0.0.1:6379> rpop mylist
"4444"
Lset
通过索引来设置元素的值。
127.0.0.1:6379> LSET KEY_NAME INDEX VALUE
127.0.0.1:6379> lset mylist 0 "hgeiwhguiewhige"
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hgeiwhguiewhige"
2) "123"
3) "123"
4) "55555555"
Lpush
命令将一个或多个值插入到列表头部
127.0.0.1:6379> LPUSH KEY_NAME VALUE1.. VALUEN
127.0.0.1:6379> lpush mylist "1" "2"
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1
1) "2"
2) "1"
3) "hgeiwhguiewhige"
4) "123"
5) "123"
6) "55555555"
Rpushx
命令用于将一个或多个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。
127.0.0.1:6379> RPUSHX KEY_NAME VALUE1..VALUEN
127.0.0.1:6379> rpushx mylist "333333"
(integer) 8
127.0.0.1:6379> rpushx mylist4 "333333"
(integer) 0
127.0.0.1:6379> lrange mylist 0 -1
1) "2"
2) "1"
3) "hgeiwhguiewhige"
4) "123"
5) "123"
6) "55555555"
7) "333333"
8) "333333"
127.0.0.1:6379> lrange mylist4 0 -1
(empty list or set)
set基本操作
Sadd
命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
127.0.0.1:6379> SADD KEY_NAME VALUE1..VALUEN
127.0.0.1:6379> sadd myset "hello"
(integer) 1
127.0.0.1:6379> sadd myset "world"
(integer) 1
127.0.0.1:6379> sadd myset "hello"
(integer) 0
127.0.0.1:6379> smembers myset
1) "world"
2) "hello"
Smembers
命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。
127.0.0.1:6379> SMEMBERS KEY VALUE
127.0.0.1:6379> smembers myset
1) "world"
2) "hello"
Srem
命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。
127.0.0.1:6379> SREM KEY MEMBER1..MEMBERN
127.0.0.1:6379> srem myset "hello"
(integer) 1
127.0.0.1:6379> smembers myset
1) "world"
127.0.0.1:6379>
Sunion
命令返回给定集合的并集。不存在的集合 key 被视为空集。
127.0.0.1:6379> SUNION KEY KEY1..KEYN
127.0.0.1:6379> sadd myset2 "111"
(integer) 1
127.0.0.1:6379> sadd myset2 "222"
(integer) 1
127.0.0.1:6379> sunion myset myset2
1) "world"
2) "222"
3) "111"
Sunionstore
命令将给定集合的并集存储在指定的集合 destination 中。
127.0.0.1:6379> SUNIONSTORE DESTINATION KEY KEY1..KEYN
127.0.0.1:6379> sunionstore myset6 myset myset2
(integer) 4
127.0.0.1:6379> smembers myset6
1) "123"
2) "222"
3) "111"
4) "world"
Scard
命令返回集合中元素的数量。
127.0.0.1:6379> SCARD KEY_NAME
127.0.0.1:6379> scard myset
(integer) 1
127.0.0.1:6379> scard myset2
(integer) 2
Srandmember
命令用于返回集合中的一个随机元素。如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
127.0.0.1:6379> SRANDMEMBER KEY [count]
127.0.0.1:6379> srandmember myset2 1
1) "222"
127.0.0.1:6379> srandmember myset2 2
1) "111"
2) "222"
Sinter
命令返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
127.0.0.1:6379> SINTER KEY KEY1..KEYN
127.0.0.1:6379> smembers myset
1) "world"
2) "456"
3) "123"
4) "111"
5) "222"
127.0.0.1:6379> smembers myset2
1) "111"
2) "222"
127.0.0.1:6379> sinter myset myset2
1) "111"
2) "222"
Sinterstore
命令将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖。
127.0.0.1:6379> SINTERSTORE DESTINATION_KEY KEY KEY1..KEYN
127.0.0.1:6379> sinterstore myset5 myset myset2
(integer) 2
127.0.0.1:6379> smembers myset5
1) "111"
2) "222"
Smove
将指定成员 member 元素从 source 集合移动到 destination 集合。source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。
127.0.0.1:6379> SMOVE SOURCE DESTINATION MEMBER
127.0.0.1:6379> smembers myset
1) "world"
2) "123"
3) "111"
4) "222"
127.0.0.1:6379> smove myset myset2 "world"
(integer) 1
127.0.0.1:6379> smembers myset2
1) "world"
2) "222"
3) "111"
127.0.0.1:6379> smembers myset
1) "123"
2) "111"
3) "222"
Sismember
命令判断成员元素是否是集合的成员。
127.0.0.1:6379> SISMEMBER KEY VALUE
127.0.0.1:6379> smembers myset
1) "123"
2) "111"
3) "222"
127.0.0.1:6379> sismember myset "123"
(integer) 1
127.0.0.1:6379> sismember myset "122"
(integer) 0
Sdiff
命令返回给定集合之间的差集。不存在的集合 key 将视为空集。
127.0.0.1:6379> SDIFF FIRST_KEY OTHER_KEY1..OTHER_KEYN
127.0.0.1:6379> smembers myset
1) "123"
2) "111"
3) "222"
127.0.0.1:6379> smembers myset2
1) "world"
2) "222"
3) "111"
127.0.0.1:6379> sdiff myset myset2
1) "123"
Sdiffstore
命令将给定集合之间的差集存储在指定的集合中。如果指定的集合 key 已存在,则会被覆盖。
127.0.0.1:6379> SDIFFSTORE DESTINATION_KEY KEY1..KEYN
127.0.0.1:6379> smembers myset
1) "123"
2) "111"
3) "222"
127.0.0.1:6379> smembers myset2
1) "world"
2) "222"
3) "111"
127.0.0.1:6379> sdiffstore myset3 myset myset2
(integer) 1
127.0.0.1:6379> smembers myset3
1) "123"
Sscan
命令用于迭代集合键中的元素。
127.0.0.1:6379> SSCAN KEY CURSOR [MATCH pattern] [COUNT count]
127.0.0.1:6379> sadd myset4 "fangdada" "fangqq" "00"
(integer) 3
127.0.0.1:6379> sscan myset4 0 match f*
1) "0"
2) 1) "fangqq"
2) "fangdada"
#cursor参数。sscan命令每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为sscan 命令的游标参数,以此来延续之前的迭代过程。需要注意的是:当sscan命令的游标参数被设置为 0 时,服务器将开始一次新的迭代,而当服务器向用户返回值为 0 的游标时,表示迭代已结束
Spop
命令用于移除并返回集合中的一个随机元素。
127.0.0.1:6379> SPOP KEY
127.0.0.1:6379> smembers myset6
1) "123"
2) "222"
3) "111"
4) "world"
127.0.0.1:6379> spop myset6 2
1) "123"
2) "world"
127.0.0.1:6379> smembers myset6
1) "111"
2) "222"
zset(Sorted Set)基本操作
zadd
命令用于将一个或多个成员元素及其分数值加入到有序集当中。
127.0.0.1:6379> ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
127.0.0.1:6379> zadd myzset 4.00 "orange" 3.50 "banana" 9.80 "apple"
(integer) 3
Zrank
返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。
127.0.0.1:6379> ZRANK key member
127.0.0.1:6379> zadd myzset 4.00 "orange" 3.50 "banana" 9.80 "apple"
(integer) 3
127.0.0.1:6379> zrank myzset "apple"
(integer) 2
Zrevrank
命令返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。排名以 0 为底,也就是说, 分数值最大的成员排名为 0 。
127.0.0.1:6379> ZREVRANK key member
127.0.0.1:6379> zrevrank myzset "apple"
(integer) 0
Zrange
返回有序集中,指定区间内的成员。
127.0.0.1:6379> ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "banana"
2) "3.5"
3) "orange"
4) "4"
5) "apple"
6) "9.8000000000000007"
Zcount
命令用于计算有序集合中指定分数区间的成员数量。
127.0.0.1:6379> ZCOUNT key min max
127.0.0.1:6379> zcount myzset 2 5
(integer) 2
Zlexcount
命令在计算有序集合中指定字典区间内成员数量。
127.0.0.1:6379> ZLEXCOUNT KEY MIN MAX
127.0.0.1:6379> zadd myzset2 0 a 0 b 0 c 0 d 0 e 0 f 0 g
(integer) 7
127.0.0.1:6379> zlexcount myzset2 [b [f
(integer) 5
127.0.0.1:6379> ZLEXCOUNT myzset2 - +
(integer) 7
[ 符号,[min 表示返回的结果中包含 min 值,[max 表示返回的结果中包含 max 值
( 符号,(min 表示返回的结果中不包含 min 值,(max 表示返回的结果中不包含 max 值
[MIN,[MAX 可以用 -,+ 代替,- 表示得分最小值的成员,+ 表示得分最大值的成员
Zunionstore
命令计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。
127.0.0.1:6379> ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
redis 127.0.0.1:6379> ZRANGE programmer 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
redis 127.0.0.1:6379> ZRANGE manager 0 -1 WITHSCORES
1) "herry"
2) "2000"
3) "mary"
4) "3500"
5) "bob"
6) "4000"
redis 127.0.0.1:6379> ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3 # 公司决定加薪。。。除了程序员。。。
(integer) 6
redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
7) "herry"
8) "6000"
9) "mary"
10) "10500"
11) "bob"
12) "12000"
Zremrangebyrank
命令用于移除有序集中,指定排名(rank)区间内的所有成员。
127.0.0.1:6379> ZREMRANGEBYRANK key start stop
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "a"
2) "0"
3) "b"
4) "0"
5) "c"
6) "0"
7) "d"
8) "0"
9) "e"
10) "0"
11) "f"
12) "0"
13) "g"
14) "0"
15) "banana"
16) "3.5"
17) "orange"
18) "4"
19) "apple"
20) "9.8000000000000007"
127.0.0.1:6379> zremrangebyrank myzset 0 1
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "c"
2) "0"
3) "d"
4) "0"
5) "e"
6) "0"
7) "f"
8) "0"
9) "g"
10) "0"
11) "banana"
12) "3.5"
13) "orange"
14) "4"
15) "apple"
16) "9.8000000000000007"
Zcard
命令用于计算集合中元素的数量。
127.0.0.1:6379> ZCARD KEY_NAME
127.0.0.1:6379> zcard myzset
(integer) 8
Zrem
命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。
127.0.0.1:6379> ZRANK key member
127.0.0.1:6379> zrem myzset "c" "d"
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "e"
2) "0"
3) "f"
4) "0"
5) "g"
6) "0"
7) "banana"
8) "3.5"
9) "orange"
10) "4"
11) "apple"
12) "9.8000000000000007"
Zinterstore
命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。
127.0.0.1:6379> ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
127.0.0.1:6379> zadd mid_test 20 "li lei" 100 "han meimei" 99.5 "tom"
(integer) 0
127.0.0.1:6379> zadd mid_test2 20 "li lei" 100 "han meimei" 99.5 "tom"
(integer) 3
127.0.0.1:6379> zinterstore sum_test 2 mid_test mid_test2
(integer) 3
127.0.0.1:6379> zrange sum_test 0 -1 withscores
1) "li lei"
2) "40"
3) "tom"
4) "199"
5) "han meimei"
6) "200"
Zincrby
命令对有序集合中指定成员的分数加上增量 increment
127.0.0.1:6379> ZINCRBY key increment member
127.0.0.1:6379> zadd kk 1 "hello"
(integer) 1
127.0.0.1:6379> zadd kk 2 "world"
(integer) 1
127.0.0.1:6379> zincrby kk 2 "hello"
"3"
127.0.0.1:6379> zrange kk 0 -1 withscores
1) "world"
2) "2"
3) "hello"
4) "3"
Zrangebyscore
返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。
127.0.0.1:6379>ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> zrange kk 0 -1 withscores
1) "world"
2) "2"
3) "hello"
4) "3"
5) "nihao"
6) "9"
127.0.0.1:6379> zrangebyscore kk 3 9
1) "hello"
2) "nihao"
Zrangebylex
通过字典区间返回有序集合的成员。
127.0.0.1:6379> ZRANGEBYLEX key min max [LIMIT offset count]
127.0.0.1:6379> ZADD myzset4 0 a 0 b 0 c 0 d 0 e 0 f 0 g
(integer) 7
127.0.0.1:6379> zrangebylex myzset4 - [c
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> zrangebylex myzset4 - (c
1) "a"
2) "b"
127.0.0.1:6379> zrangebylex myzset4 [aaa (g
1) "b"
2) "c"
3) "d"
4) "e"
5) "f"
Zscore
命令返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。
127.0.0.1:6379> ZSCORE key member
127.0.0.1:6379> zscore myzset4 "f"
"0"
Zremrangebyscore
命令用于移除有序集中,指定分数(score)区间内的所有成员。
127.0.0.1:6379> ZREMRANGEBYSCORE key min max
127.0.0.1:6379> zremrangebyscore myzset4 0 1
(integer) 7
127.0.0.1:6379> zrange myzset4 1 -1 withscores
(empty list or set)
Zscan
命令用于迭代有序集合中的元素(包括元素成员和元素分值)
127.0.0.1:6379> ZSCAN key cursor [MATCH pattern] [COUNT count]
127.0.0.1:6379> ZADD myzset4 0 a 1 b 2 c 3 d 4 e 5 f 6 g
(integer) 7
127.0.0.1:6379> zrange myzset4 1 -1 withscores
1) "b"
2) "1"
3) "c"
4) "2"
5) "d"
6) "3"
7) "e"
8) "4"
9) "f"
10) "5"
11) "g"
12) "6"
127.0.0.1:6379> zscan myzset4 0 match b*
1) "0"
2) 1) "b"
2) "1"
Zrevrangebyscore
返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。
127.0.0.1:6379> ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> zrange myzset4 1 -1 withscores
1) "b"
2) "1"
3) "c"
4) "2"
5) "d"
6) "3"
7) "e"
8) "4"
9) "f"
10) "5"
11) "g"
12) "6"
127.0.0.1:6379> zrevrangebyscore myzset4 +inf -inf
1) "g"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"
127.0.0.1:6379> zrevrangebyscore myzset4 0 100
(empty list or set)
127.0.0.1:6379> zrevrangebyscore myzset4 100 0
1) "g"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"
Zremrangebylex
命令用于移除有序集合中给定的字典区间的所有成员。
127.0.0.1:6379> ZREMRANGEBYLEX key min max
127.0.0.1:6379> zremrangebylex myzset4 [a [c
(integer) 3
127.0.0.1:6379> zrange myzset4 0 -1 withscores
1) "d"
2) "3"
3) "e"
4) "4"
5) "f"
6) "5"
7) "g"
8) "6"
Zrevrange
命令返回有序集中,指定区间内的成员。其中成员的位置按分数值递减(从大到小)来排列。
127.0.0.1:6379> ZREVRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrevrange myzset4 0 -1 withscores
1) "g"
2) "6"
3) "f"
4) "5"
5) "e"
6) "4"
7) "d"
8) "3"
key的操作
Type
命令用于返回 key 所储存的值的类型。
127.0.0.1:6379> TYPE KEY_NAME
127.0.0.1:6379> type fangdada
string
127.0.0.1:6379> type myzset
zset
127.0.0.1:6379> type myhash
hash
127.0.0.1:6379> type mylist
list
127.0.0.1:6379> type myset
set
Expire
命令用于设置 key 的过期时间。key 过期后将不再可用。
127.0.0.1:6379> Expire KEY_NAME TIME_IN_SECONDS
127.0.0.1:6379> expire fangdada 10
(integer) 1
Expireat
以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。
127.0.0.1:6379> Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP
127.0.0.1:6379> expireat fangdada 1293840000
(integer) 1
PEXPIRE
命令和 EXPIRE 命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位。
127.0.0.1:6379> PEXPIRE key milliseconds
127.0.0.1:6379> pexpire fangdada 9000
(integer) 1
PEXPIREAT
命令用于设置 key 的过期时间,以毫秒计。key 过期后将不再可用。
127.0.0.1:6379> PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP
127.0.0.1:6379> set fangdada 555
OK
127.0.0.1:6379> pexpireat fangdada 1293840000
(integer) 1
Rename
命令用于修改 key 的名称 。
127.0.0.1:6379> RENAME OLD_KEY_NAME NEW_KEY_NAME
127.0.0.1:6379> set fangdada 5555
OK
127.0.0.1:6379> rename fangdada fangdada222
OK
127.0.0.1:6379> get fangdada222
"5555"
127.0.0.1:6379> get fangdada
(nil)
PERSIST
用于移除给定 key 的过期时间,使得 key 永不过期。
127.0.0.1:6379> PERSIST KEY_NAME
127.0.0.1:6379> set fangdada222 555 ex 60
OK
127.0.0.1:6379> ttl fangdada222
(integer) 53
127.0.0.1:6379> persist fangdada222
(integer) 1
127.0.0.1:6379> ttl fangdada222
(integer) -1
MOVE
用于将当前数据库的 key 移动到给定的数据库 db 当中。
127.0.0.1:6379> MOVE KEY_NAME DESTINATION_DATABASE
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> get fangdada222
"555"
127.0.0.1:6379> move fangdada222 1
(integer) 1
127.0.0.1:6379> exists fagndada222
(integer) 0
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get fangdada222
"555"
RANDOMKEY
命令从当前数据库中随机返回一个 key 。
127.0.0.1:6379> RANDOMKEY
127.0.0.1:6379[1]> randomkey
"fangdada222"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> randomkey
"myset5"
DUMP
用于序列化给定 key ,并返回被序列化的值。
127.0.0.1:6379> DUMP KEY_NAME
127.0.0.1:6379> dump myset5
"\x0b\x0c\x02\x00\x00\x00\x02\x00\x00\x00o\x00\xde\x00\t\x00o\xf9\xcf\xb8\x16\xd2<Z"
TTL(time to live)
以秒为单位返回 key 的剩余过期时间。
127.0.0.1:6379> TTL KEY_NAME
127.0.0.1:6379> set fangdada 999 ex 50
OK
127.0.0.1:6379> ttl fangdada
(integer) 46
DEL
命令用于删除已存在的键。不存在的 key 会被忽略。
127.0.0.1:6379> DEL KEY_NAME
127.0.0.1:6379> set fangdada 999
OK
127.0.0.1:6379> del fangdada
(integer) 1
127.0.0.1:6379> del fagndada
(integer) 0
Pttl
命令以毫秒为单位返回 key 的剩余过期时间。
127.0.0.1:6379> PTTL KEY_NAME
127.0.0.1:6379> set fangdada "6666" px 738924
OK
127.0.0.1:6379> pttl fangdada
(integer) 734021
127.0.0.1:6379> pttl fangdada
(integer) 732485
Renamenx
命令用于在新的 key 不存在时修改 key 的名称 。
127.0.0.1:6379> RENAMENX OLD_KEY_NAME NEW_KEY_NAME
127.0.0.1:6379> renamenx fangdada fangdada1
(integer) 1
EXISTS
用于检查给定 key 是否存在。
127.0.0.1:6379> EXISTS KEY_NAME
127.0.0.1:6379> get fangdada2
"6666"
127.0.0.1:6379> get fangdada1
(nil)
127.0.0.1:6379> exists fangdada1
(integer) 0
127.0.0.1:6379> exists fangdada2
(integer) 1
Keys
用于查找所有符合给定模式 pattern 的 key 。。
127.0.0.1:6379> KEYS PATTERN
127.0.0.1:6379> keys f*
1) "fangdada2"
redis持久化
RDB(默认支持,无需配置):
该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。
特点:
#定期持久化
#只会记录进行持久化那一刻的数据库信息
#持久化文件体积小
#安全性不高,容易发生数据丢失
AOF:
该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。
特点:
#持久化记录的是操作,而不是结果
#不会覆盖之前持久化的内容,而是在文件后面追加
#持久化文件较大
#安全性高,有利于重新构建数据库
开启AOF:
编辑redis.windows.conf,将appendonly修改为yes,开启aof持久化机制,默认会在目录下产生一个appendonly.aof文件,使用./redis-server redis.windows.conf开启redis服务器
redis可以同时使用RDB和AOF
jedispool连接池,获取连接,就可以操作redis了
API:
方法 | 解释 |
---|---|
new Jedis(host, port) | 创建jedis对象,参数host是redis服务器地址,参数port是redis服务端口 |
set(key,value) | 设置字符串类型的数据 |
get(key) | 获得字符串类型的数据 |
hset(key,field,value) | 设置哈希类型的数据 |
hget(key,field) | 获得哈希类型的数据 |
lpush(key,values) | 从列表的左边添加数据 |
rpush(keymvalues) | 从列表的右边添加数据 |
lpop(key) | 列表左面弹栈 |
rpop(key) | 列表右面弹栈 |
del(key) | 删除指定的key |