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
posted @ 2020-06-06 19:22  方大大大  阅读(76)  评论(0编辑  收藏  举报