redis缓存

2019-10-23  本文已影响0人  o9_wp

常用命令:
常用数据类型redis:

Redis 与其他 key - value 缓存产品有以下三个特点:
支持数据持久化,可以将内存重的数据保存到磁盘中,重启时候可以再次进行加载使用
支持类型丰富,string - list - hash - set - Ordered Sets 二进制案例
原子性-redis所有的操作都是原子性的,要么成功执行要么完全失败,单个操作是原子性的,多个操作也支持事务,用multi和exec指令包起来

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。

key 相关命令:

set test bb // 生成 key:test  val:bb 的值

127.0.0.1:6379[5]> dump test
"\x00\x02bb\x06\x00\x8aa\xb7\xdaa\xe7\xa18" //返回序列化的值
--------------------------------------------
127.0.0.1:6379[5]> exists teset
(integer) 0
127.0.0.1:6379[5]> exists test //判断key是否存在,存在为1否则为0
(integer) 1
--------------------------------------------
127.0.0.1:6379[5]> expire test 10 //为给定 key 设置过期时间,以秒计
(integer) 1
127.0.0.1:6379[5]> get test
"bb"
127.0.0.1:6379[5]> get test
--------------------------------------------
127.0.0.1:6379[5]> expireat test 1999999999 //为给定 key 设置过期时间,用unix时间戳
--------------------------------------------
PEXPIRE key milliseconds
127.0.0.1:6379[5]> pexpire test 10000 //设置 key 的过期时间以毫秒计
(integer) 1
--------------------------------------------
keys pattern
127.0.0.1:6379[5]> keys *a*
1) "aa"
--------------------------------------------
ttl 返回key的生序时间以秒计 pttl为毫秒
127.0.0.1:6379[5]> ttl aa //key存在并且有设置有效期返回剩余时间
(integer) 432851313
127.0.0.1:6379[5]> ttl bb//key不存在返回-2
(integer) -2
127.0.0.1:6379[5]> ttl cc//key 存在并且永久有效返回-1
(integer) -1
--------------------------------------------
RANDOMKEY 返回随机key,当数据库为空的时候返回nil
--------------------------------------------
rename 改名,改名成功返回ok, 名字相同或者old_key_name 不存在返回error,如果new_key_name已经存在会覆盖
renamenx 改名成功返回1, 名字已经存在返回0 不会修改成功
--------------------------------------------
type key //返回key的数据类型
127.0.0.1:6379[5]> lpush tt hello
(integer) 1
127.0.0.1:6379[5]> type tt
list

字符串string相关操作:

SET key value  //存储键值对aa=>bb
GET key //返回 key 的值,如果 key 不存在时,返回 nil。 如果 key 不是字符串类型,那么返回一个错误
--------------------------------------------
GETRANGE KEY 0 3//命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)
127.0.0.1:6379[5]> set kk 123456789
OK
127.0.0.1:6379[5]> getrange kk 0 3
"1234"
--------------------------------------------
GETSET KEY //返回给定 key 的旧值。 当 key 没有旧值时,即 key 不存在时,返回 nil 。
127.0.0.1:6379[5]> get aa
"2"
127.0.0.1:6379[5]> getset aa opop
"2"
127.0.0.1:6379[5]> get opop
(nil)
127.0.0.1:6379[5]> get aa
"opop"
127.0.0.1:6379[5]> getset gg oop
(nil)
--------------------------------------------
SETEX  Redis Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
127.0.0.1:6379[5]> setex testaa 20 valueB
OK
127.0.0.1:6379[5]> ttl testaa
(integer) 10
127.0.0.1:6379[5]> ttl testaa
(integer) 8
127.0.0.1:6379[5]> setex testaa 20 valueh
OK
127.0.0.1:6379[5]> ttl testaa
(integer) 18
--------------------------------------------
SETNX 命令在指定的 key 不存在时,为 key 设置指定的值。成功返回1 失败返回0
127.0.0.1:6379[5]> get aa
"opop"
127.0.0.1:6379[5]> setnx aa oop
(integer) 0
127.0.0.1:6379[5]> setnx aab oop
(integer) 1
127.0.0.1:6379[5]> get aa
"opop"
127.0.0.1:6379[5]> get aab
"oop"
--------------------------------------------
SETRANGE KEY 0 VALUE //命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始,返回被修改后的字符串长度

127.0.0.1:6379[5]> get kk
"123456789"
127.0.0.1:6379[5]> setrange kk 0 abc
(integer) 9
127.0.0.1:6379[5]> get kk
"abc456789"
--------------------------------------------
STRLEN 判断字符串长度, 当 key 不存在时,返回 0。
127.0.0.1:6379[5]> strlen kk
(integer) 9
--------------------------------------------
Msetnx  当所有 key 都成功设置,返回 1 。 如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。
127.0.0.1:6379[5]> msetnx ah 1 bh 1 ch 1
(integer) 1
127.0.0.1:6379[5]> msetnx ah 2 dh 2 fh 2
(integer) 0
--------------------------------------------
Incr 在指定key上+1,返回值为+1完成后的值
Incrby 在指定key上+上指定的值
127.0.0.1:6379[5]> get aa
"211"
127.0.0.1:6379[5]> incrby aa 1000
(integer) 1211
Incrbyfloat  在指定key上+上指定的浮点型值,如果够整数会自动把0去掉
127.0.0.1:6379[5]> set aa 10.5
OK
127.0.0.1:6379[5]> get aa
"10.5"
127.0.0.1:6379[5]> incrbyfloat aa 0.21
"10.71"
127.0.0.1:6379[5]> incrbyfloat aa 0.29000000000
"11"
decr 减1,decrby 100 减少100,返回都是计算完成之后的数
127.0.0.1:6379[5]> decr aa
(integer) 10
127.0.0.1:6379[5]> decr aa
(integer) 9
127.0.0.1:6379[5]> decrby aa 5
(integer) 4
127.0.0.1:6379[5]> incr aa
(integer) 5
127.0.0.1:6379[5]> decr aa
(integer) 4
--------------------------------------------
Redis Append 命令用于为指定的 key 追加值。
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
127.0.0.1:6379[5]> decr aa
(integer) 4
127.0.0.1:6379[5]> apend aa uuy
127.0.0.1:6379[5]> append aa u
(integer) 2
127.0.0.1:6379[5]> get aa
"4u"

HASH的值

HDEL 删除一个或者多个hashkey ,返回删除key的数量
127.0.0.1:6379[5]> hset hash_test a 1
(integer) 1
127.0.0.1:6379[5]> hset hash_test b 2
(integer) 1
127.0.0.1:6379[5]> hset hash_test c 2
(integer) 1
127.0.0.1:6379[5]> hdel hash_test a b
(integer) 2
127.0.0.1:6379[5]> hkeys hash_test
1) "c"
------------------------------------------------------------------
HEXISTS 判断hash表的key存不存在,存在返回1不存在返回0
127.0.0.1:6379[5]> hexists hash_test a
(integer) 0
127.0.0.1:6379[5]> hexists hash_test c
(integer) 1
------------------------------------------------------------------
HGET 获取哈希表字段值,成功返回对应的value ,失败返回nil
127.0.0.1:6379[5]> hget hash_test c
"2"
127.0.0.1:6379[5]> hget hash_test ca
(nil)
------------------------------------------------------------------
HGETALL 以列表list 形式 返回哈希表所有数据,如果不存在返回一个空list
127.0.0.1:6379[5]> hgetall hash_test
1) "c"
2) "2"
3) "d"
4) "2000"
127.0.0.1:6379[5]> hgetall hash_test1
(empty list or set)

------------------------------------------------------------------
HINCRBY 在指定key上自增 value ,value可以为负数 ,如若key不存在,会创建key,并且赋值为value 范围为64位
127.0.0.1:6379[5]> hincrby hash_test c 1
(integer) 3
127.0.0.1:6379[5]> hincrby hash_test c 10
(integer) 13
127.0.0.1:6379[5]> hincrby hash_test ca 10
(integer) 10
127.0.0.1:6379[5]> hincrby hash_test cii 10
(integer) 10
127.0.0.1:6379[5]> hincrby hash_test cii -3
(integer) 7
------------------------------------------------------------------
HINCRBYFLOAT 在指定key上自增 value ,value可以为负数 ,如若key不存在,会创建key
127.0.0.1:6379[5]> hincrbyfloat hash_test cii -6.09
"0.91"
127.0.0.1:6379[5]> hincrbyfloat hash_test ciio -6.09
"-6.09"
------------------------------------------------------------------
HKEYS 获取哈希列表中所有的key 成功返回list,不存在返回空list
127.0.0.1:6379[5]> hkeys hash_test
1) "c"
2) "d"
3) "ca"
4) "cii"
5) "ciio"
127.0.0.1:6379[5]> hkeys hash_test1
(empty list or set)
------------------------------------------------------------------
HLEN 返回哈希表中的字段数量,成功返回数量,失败返回0 
127.0.0.1:6379[5]> hlen hash_test
(integer) 5
127.0.0.1:6379[5]> hlen hash_test1
(integer) 0
------------------------------------------------------------------
HMGET 反对hash表中的多个key,如果key不存在返回nil
127.0.0.1:6379[5]> hmget hash_test c d ca
1) "13"
2) "2000"
3) "10"
127.0.0.1:6379[5]> hmget hash_test c d caa
1) "13"
2) "2000"
3) (nil)
------------------------------------------------------------------
HMSET 给hash表中多个字段赋值,会覆盖原来的value
127.0.0.1:6379[5]> hmget hash_test c d caa
1) "13"
2) "2000"
3) (nil)
127.0.0.1:6379[5]> hmset hash_test c 1 d 100 caa 101
OK
127.0.0.1:6379[5]> hmget hash_test c d caa
1) "1"
2) "100"
3) "101"
------------------------------------------------------------------
HSET 当hash表中,key不存在返回为1 ,key已经存在会覆盖原值然后返回0
127.0.0.1:6379[5]> hget hash_test c
"100100"
127.0.0.1:6379[5]> hset hash_test c 1
(integer) 0
127.0.0.1:6379[5]> hset hash_test c1 1
(integer) 1
------------------------------------------------------------------
HSETNX 只有当hash表中的key不存在时,才会发生赋值操作,成功返回1 失败返回0 
127.0.0.1:6379[5]> hset hash_test c1 1
(integer) 1
127.0.0.1:6379[5]>
127.0.0.1:6379[5]> hsetnx hash_test c1 2
(integer) 0
127.0.0.1:6379[5]> hsetnx hash_test c2 2
(integer) 1
------------------------------------------------------------------
HVALS  返回hash表中的所有的值,成功返回所有value的list,失败返回空list
127.0.0.1:6379[5]> hvals hash_test
1) "1"
2) "100"
3) "10"
4) "0.91"
5) "-6.09"
6) "101"
7) "1"
8) "2"
127.0.0.1:6379[5]> hvals hash_test1
(empty list or set)

LIST 列表命令

BLPOP 移除并且获取列表的第一个元素,如果没有列表没用值,等待n秒超时,成功时返回值为列表名称 和value ,失败时返回 nil和超时等待时间
127.0.0.1:6379[5]> lpush list_test first
(integer) 1
127.0.0.1:6379[5]> lpush list_test second
(integer) 2
127.0.0.1:6379[5]> lpush list_test three
(integer) 3
127.0.0.1:6379[5]> blpop list_test 10
1) "list_test"
2) "three"
127.0.0.1:6379[5]> blpop list_test 10
1) "list_test"
2) "second"
127.0.0.1:6379[5]> blpop list_test 10
1) "list_test"
2) "first"
127.0.0.1:6379[5]> blpop list_test 10
(nil)
(10.09s)
------------------------------------------------------------------
BRPOP 移除并且返回列表的最后一个元素,如果没有值,会阻塞列表,直到等待n秒超时为止
127.0.0.1:6379[5]> lpush list_test first second three
(integer) 3
127.0.0.1:6379[5]> brpop list_test 10
1) "list_test"
2) "first"
127.0.0.1:6379[5]> brpop list_test 10
1) "list_test"
2) "second"
127.0.0.1:6379[5]> brpop list_test 10
1) "list_test"
2) "three"
127.0.0.1:6379[5]> brpop list_test 10
(nil)
(10.10s)

------------------------------------------------------------------
BRPOPLPUSH 返回列表的最后一个元素,插入到另外一个列表的头部,如果没有值,会阻塞列表,直到等待n秒超时为止 ,成功返回获取的元素值,失败返回nil和等待超时时间
127.0.0.1:6379[5]> lpush list_test aa
(integer) 1
127.0.0.1:6379[5]> brpoplpush list_test list_test1 4
"aa"
127.0.0.1:6379[5]> brpoplpush list_test list_test1 4
(nil)
(4.07s)
------------------------------------------------------------------
LINDEX 按照索引返回列表中的数据,也使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 不移除值
127.0.0.1:6379[5]> lpush list_test first second three four five six seven eight nine ten
(integer) 10
127.0.0.1:6379[5]> lindex list_test 0
"ten"
127.0.0.1:6379[5]> lindex list_test -2 -4
(error) ERR wrong number of arguments for 'lindex' command
127.0.0.1:6379[5]> lindex list_test -2
"second"
127.0.0.1:6379[5]> lindex list_test -3
"three"
127.0.0.1:6379[5]> lindex list_test 3
"seven"
------------------------------------------------------------------
LINSERT LIST BEFORE|AFTER  KEY VALUE  插入
redis> RPUSH mylist "Hello"
(integer) 1
redis> RPUSH mylist "World"
(integer) 2
redis> LINSERT mylist BEFORE "World" "There"
(integer) 3
redis> LRANGE mylist 0 -1
1) "Hello"
2) "There"
3) "World"
redis>
------------------------------------------------------------------
LPOP 从头部获取元素 ,
LPUSH从头部插入一个或者多个元素, 插入成功时候返回列表长度
LPUSHX在一个已经存在的头部插入一个或者多个元素 ,插入成功时返回列表长度
LRANGE 返回列表数据范围,0从头开始,-1为从尾部开始第一个元素
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "a"
2) "a"
3) "a"
4) "nine"
5) "eight"
6) "seven"
7) "six"
8) "five"
9) "four"
127.0.0.1:6379[5]> lrange list_test3 0 -1
------------------------------------------------------------------
LREM  NAME  COUNT VALUE 从列表中移除指定value的count 个元素,成功返回移除元素的数量
127.0.0.1:6379[5]> lrange list_test 0 -1
 1) "b"
 2) "a"
 3) "b"
 4) "a"
 5) "b"
 6) "a"
 7) "nine"
 8) "eight"
 9) "seven"
10) "five"
11) "four"
127.0.0.1:6379[5]>
127.0.0.1:6379[5]>
127.0.0.1:6379[5]> lrem list_test 1 a
(integer) 1
127.0.0.1:6379[5]> lrange list_test 0 -1
 1) "b"
 2) "b"
 3) "a"
 4) "b"
 5) "a"
 6) "nine"
 7) "eight"
 8) "seven"
 9) "five"
10) "four"
127.0.0.1:6379[5]> lrem list_test -1 a
(integer) 1
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "b"
2) "b"
3) "a"
4) "b"
5) "nine"
6) "eight"
7) "seven"
8) "five"
9) "four"
------------------------------------------------------------------
LSET 通过索引来更改数据的值,成功返回ok,失败或者越界返回error
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "b"
2) "b"
3) "a"
4) "b"
5) "nine"
6) "eight"
7) "seven"
8) "five"
9) "four"
127.0.0.1:6379[5]> lset list_test 0 c
OK
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "c"
2) "b"
3) "a"
4) "b"
5) "nine"
6) "eight"
7) "seven"
8) "five"
9) "four"
127.0.0.1:6379[5]> lset list_test 10 c
(error) ERR index out of range
127.0.0.1:6379[5]> lset list_test5 0 c
(error) ERR no such key
------------------------------------------------------------------
LTRIM 删除list,只保留指定区间 ,包含指定区间两个临界点
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "c"
2) "b"
3) "a"
4) "b"
5) "nine"
6) "eight"
7) "seven"
8) "five"
9) "four"
127.0.0.1:6379[5]> ltrim list_test 3 -3
OK
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "b"
2) "nine"
3) "eight"
4) "seven"

------------------------------------------------------------------
RPOP 移除列表最后一个元素
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "b"
2) "nine"
3) "eight"
4) "seven"
127.0.0.1:6379[5]>
127.0.0.1:6379[5]>
127.0.0.1:6379[5]> rpop list_test
"seven"
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "b"
2) "nine"
3) "eight"
------------------------------------------------------------------
RPUSH 往列表最后追加元素 执行  成功后,返回列表的长度,列表不存在会被创建
rpushx 往列表最后追加元素 执行  成功后,返回列表的长度,列表不存在会返回0

set集合 特性:redis的set是一个string的无序集合。集合成员是唯一的,这就意味着集合中不能出现相同的元素 redis的集合是通过hash表来实现的,所以添加、删除、查找的复杂度都是O(1),结合最大的元素是2的32次方 -1

SADD 插入一个或者多个集合元素,成功返回插入新元素数量
127.0.0.1:6379[5]> sadd set_test a b c d a e f
(integer) 6
127.0.0.1:6379[5]> sadd set_test a
(integer) 0
------------------------------------------------------------------
SCARD 返回集合中的元素数量
127.0.0.1:6379[5]> scard set_test
(integer) 6
------------------------------------------------------------------
SDIFF 返回前一个集合 和后一个集合的差集,只返回前一个集合的差集key
127.0.0.1:6379[5]> sadd set_test2 a b c
(integer) 3
127.0.0.1:6379[5]> sdiff set_test set_test2
1) "e"
2) "d"
3) "f"
SINTER 返回前一个集合 和后一个集合的交集,只返回前一个集合的交集key
SDIFFSTRORE 生成一个新的集合 保存前一个集合 和后一个集合的差集
SINTERSTORE 生成一个新的集合 保存前一个集合 和后一个集合的交集
------------------------------------------------------------------
 SISMEMBER 判断一个元素是否在集合内 成功返回1 失败返回0
127.0.0.1:6379[5]> sismember set_test a
(integer) 1
127.0.0.1:6379[5]> sismember set_test ab
(integer) 0
------------------------------------------------------------------
SMEMBERS key 返回集合中的所有成员
127.0.0.1:6379[5]> smembers set_test
1) "f"
2) "e"
3) "c"
4) "d"
5) "a"
6) "b"
------------------------------------------------------------------
SMOVE 移动集合元素到另外一个集合中, 如果目标结合不存在会被创建,如果移动成功返回1 ,如果移动元素失败返回0 , 目标集合元素存不存在都不影响返回
127.0.0.1:6379[5]> smembers set_test
1) "e"
2) "c"
3) "d"
4) "a"
5) "b"
127.0.0.1:6379[5]> sadd test_xx d
(integer) 1
127.0.0.1:6379[5]> smove set_test  test_xx d
(integer) 1
127.0.0.1:6379[5]> smembers set_test
1) "e"
2) "c"
3) "a"
4) "b"
127.0.0.1:6379[5]> smembers test_xx
1) "d"
2) "f"
------------------------------------------------------------------
SPOP 随机移除并返回集合中的一个元素
127.0.0.1:6379[5]> spop set_test
"b"
------------------------------------------------------------------
SRANDMEMBER 返回一个或者多个元素,但是不移除
127.0.0.1:6379[5]> srandmember set_test 2
1) "e"
2) "a"
127.0.0.1:6379[5]> srandmember set_test 2
1) "e"
2) "c"
------------------------------------------------------------------
SREM 删除一个或者多个元素,返回成功删除元素数量
127.0.0.1:6379[5]> srem set_test e c
(integer) 0
127.0.0.1:6379[5]> smembers set_test
1) "a"
127.0.0.1:6379[5]> srem set_test a k l
(integer) 1
------------------------------------------------------------------

有序集合

上一篇 下一篇

猜你喜欢

热点阅读