安装直接用brew搞定,现在还没有遇到问题,有问题再删这句话。😂
1.Redis中的数据结构
Redis中有五种数据结构:
结构类型 | 结构存储的值 | 结构的读写能力 |
---|---|---|
STRING | 可以是字符串,整数,浮点数 | 对整个字符串或者字符串中的一部分执行操作; 对整数和浮点数执行自增减操作。 |
LIST | 链表,每个节点都包含了一个STRING | 从链表两端推入或者弹出元素; 根据偏移量对链表进行裁剪(trim); 读取单个或多个元素; 根据值查找或者移除元素 |
SET | 包含STRING的无需收集器(unordered collection),并且被包含的每个STRING都是唯一的 | 添加,获取,移除单个元素; 检查一个元素是否存在; 计算交集、并集、差集; 从集合里面随机获取元素 |
HASH | 包含键值对的无序散列表 | 添加、获取、移除单个键值对;获取所有键值对 |
ZSET | 字符串成员(member)与浮点数分值(score)之间的有序映射,元属的排列顺序由分值大小决定 | 添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素 |
2. 字符串
Redis是一个字节组成的序列,可以存储三种类型的值:
- 字符串(byte string)
- 整数(和系统长整型范围相同)
- 浮点数(IEEE 754标准浮点数,double)
常用命令:
命令 | 用例——描述 |
---|---|
GET | get key ——获取键的值 |
SET | set key value——设置键的值 |
DEL | del key——删除键的值 |
例子:
pengjunzhe: ~$redis-cli
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)
自增自减命令
自增自减命令只能作用于整数,如果对不存在的键或者保存了空串的键执行自增/自减操作,那么会将这个键的值当作0处理,如果对无法解释为整数或者浮点数的字符串值性自增/自减操作,把额会返回一个错误。
命令 | 用例和描述 |
---|---|
INCR | INCR key——将键存储的值加1 |
DECR | DECR key——将键存储的值减1 |
INCRBY | INCRBY key amount——将键存储的值加上整数amount |
DECRBY | DECRBY key amount——将键存储的值减去整数amount |
INCRBYFLOAT | INCRBYFLOAT key amount——将键存储的值加上浮点数amount |
例子(python):
import redis
conn = redis.Redis()
conn.get('key')
conn.incr('key')
1
conn .incr('key', 15)
16
conn.decr('key',5)
11
conn.set('key', '13')
True
conn.incr('key')
14
子串和二进制位命令
命令 | 用例和描述 |
---|---|
APPEND | APPEND key value——将value追加到给定键当前存储值的末尾 |
GETRANGE | GETRANGE key start end——获取一个由偏移量start至偏移量end范围内所有字符组成的子串,包括start和end |
SETRANGE | SETRANGE key offset value——将start偏移量开始的子串设置为给定制 |
GETBIT | GETBIT key offset——将字符串看作是二进制位串(bit string)并返回串中偏移量为offset的二进制位的值 |
SETBIT | SETBIT key offset value——将字节串看作是二进制串,并将位串中偏移量为offset的值设置为value |
BITCOUNT | BITCOUNT key [start end]——统计二进制位串中值为1的二进制位的数量,如果给定了可选的start偏移量和end偏移量,那么只对偏移量指定范围内的二进制位进行统计 |
BITOP | BITOP operation dest-key key-name对一个或多个二进制串值性包括并(AND),或(OR),异或(XOR),非(NOT)在内的任何一个位运算操作。并将计算出来的结果保存在dest-key键里面 |
例子:
conn = redis.Redis()
conn.append("new-string-key", "hello ")
6
conn.append("new-string-key", "world!")
12
conn.substr("new-string-key", 3, 7)
b'lo wo'
conn.setrange("new-string-key", 0, "H")
12
conn.get("new-string-key")
b'Hello world!'
conn.setrange('new-string-key', 11, ' how re you?')
23
conn.get('new-string-key')
b'Hello world how re you?'
conn.setbit('another-key', 2, 1)
0
conn.setbit('another-key', 7, 1)
0
conn.get('another-key')
b'!'
3. 列表(list)简介
Redis的一个列表可以有序的存储多个字符串。
列表命令:
命令 | 行为 |
---|---|
LPUSH | 将给定的值推入列表的左端 |
RPUSH | 将给定的值推入列表的右端 |
LPOP | 从列表的左侧弹出一个元素,并范围被弹出的值 |
RPOP | 从列表的右侧弹出一个元素,并范围被弹出的值 |
LRANGE | 获取列表在给定范围上的所有值 |
LINDEX | 获取列表在给定位置上的单个元素 |
LTRIM | 对列表进行修剪,只保留start偏移量到 end偏移量范围内的元素,其中偏移量为start和end的元素会被保留 |
例子:
127.0.0.1:6379> rpush list-key item
(integer) 1
127.0.0.1:6379> rpush list-key item2
(integer) 2
127.0.0.1:6379> rpush list-key item
(integer) 3
127.0.0.1:6379> lrange list-key 0 -1
1) "item"
2) "item2"
3) "item"
127.0.0.1:6379> lindex list-key 1
"item2"
127.0.0.1:6379> lpop list-key
"item"
127.0.0.1:6379> lrange list-key 0 -1
1) "item2"
2) "item"
阻塞式的在列表单出命令以及在列表之间移动元素的命令
命令 | 描述 |
---|---|
BLPOP | blpop key-name timeout:在从第一个非空列表中单出位于最左端的元素,或者在timeout秒内阻塞并等待可弹出的元素出现 |
BRPOP | brpop key-name timeout:在从第一个非空列表中单出位于最右端的元素,或者在timeout秒内阻塞并等待可弹出的元素出现 |
RPOPLPUSH | rpoplpush source-key dest-key:从source-key列表中弹出最右端的元素,然后吧这个元素推入dest-key列表的最左端,并向用户返回这个元素 |
BRPOPLPUSH | brpoplpush source-key dest-key timeout:从source-key列表中弹出最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这个元素;如果使用source-key为空,那么在timeout秒之内阻塞并等待可弹出的元素出现 |
4. 集合简介
集合也可以存储多个字符串,但是集合通过使用散列表来保证存储的字符串是个不相同的。
集合常用命令:
命令 | 行为 |
---|---|
SADD | sadd key-name item:将一个或多个元素添加到集合中,并返回添加元素中原本不存在于集合里面的元素数量 |
SREM | srem key-name item:从集合里面移除一个或多个元素,并返回被移除的元素的数量 |
SISMEMBER | sismember key-name item:检查元素item是否存在于集合中 |
SMEMBERS | 获取集合的包含的所有元素 |
SRANDMEMBER | srandmember key-name [count]:从集合里面随机随机返回一个或者多个元素,当count为正数时,命令返回的随机元素不会重复,当count为负数时,命令返回的随机元素可能会出现重复 |
SPOP | spop key-name:随机的移除集合中的元素,并返回被移除的元素 |
SMOVE | SMOVE source-key dest-key item:如果集合source-key包函元素item,则从集合source-key中移除元素item,并将元素item添加到集合dest-key中,如果item被成功移除,那么返回1,否则返回0 |
例子:
127.0.0.1:6379> sadd set-key item
(integer) 1
127.0.0.1:6379> sadd set-key item1
(integer) 1
127.0.0.1:6379> sadd set-key item2
(integer) 1
127.0.0.1:6379> sadd set-key item
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item"
2) "item1"
3) "item2"
127.0.0.1:6379> sismember set-key item3
(integer) 0
127.0.0.1:6379> srem set-key item2
(integer) 1
127.0.0.1:6379> srem set-key item2
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item"
2) "item3"
组合和处理多个集合的Redis命令
命令 | 描述 |
---|---|
SDIFF | sdiff key-name [key-name ...]:返回存在于一个集合,但是不存在于其他集合中的元素(差集运算) |
SDIFFSTORE | sdiffstore dest-key key-name [key-name ... ]:将存在于一个集合但是并不存在于其他集合中的元素存储到dest-key中 |
SINTER | sinter key-name [key-name ... ]:返回同时存在于所有集合的元素(交集运算) |
SINTERSTORE | sinterstore dest-key key-name [ key-name ... ]:将那些同时存在于所有集合的元素存储到dest-key里面 |
SUNION | sunion key-name [key-name ... ]:返回那些存在于至少一个集合的元素(并集运算) |
SUNIONSTORE | sunionsotre dest-key keyname [key-name ... ]将那些至少存在于一个集合的元素存储到dest-key键里面 |
例子:
conn.sadd('skey', 'a', 'b', 'c', 'd')
4
conn.sadd('skey2', 'c', 'd', 'e', 'f')
4
conn.sdiff('skey', 'skey2')
{b'b', b'a'}
conn.sinter('skey', 'skey2')
{b'd', b'c'}
conn.sunion('skey', 'skey2')
{b'f', b'b', b'c', b'a', b'd', b'e'}
5.散列简介
散列存储多个键值对。散列存储的值可以是字符串或数字值,可以对散列存储的数执行自增自减操作。
散列常用命令
命令 | 行为 |
---|---|
HSET | 在散列里面关联起给定的键值对 |
HGET | 获取指定散列键的值 |
HGETALL | 获取散列包含的所有键值对 |
HDEL | 如果给定的键存在于散列,移除这个键 |
HLEN | HLEN key-name:返回散列包含的键值对数量 |
HMGET | HMGET key-name key [key ...]:从散列中获取一个或者多个键的值 |
HMSET | HMSET key value [key value ...]:为散列里面一个或者多个键设置值 |
例子:
127.0.0.1:6379> hset hash-set sub-key1 value1
(integer) 1
127.0.0.1:6379> hset hash-set sub-key2 value2
(integer) 1
127.0.0.1:6379> hset hash-set sub-key1 value
(integer) 0
127.0.0.1:6379> hgetall hash-set
1) "sub-key1"
2) "value"
3) "sub-key2"
4) "value2"
127.0.0.1:6379> hdel hash-set sub-key2
(integer) 1
127.0.0.1:6379> hdel hash-set sub-key2
(integer) 0
127.0.0.1:6379> hgetall hash-set
1) "sub-key1"
2) "value"
127.0.0.1:6379> hlen hash-set
(integer) 1
Redis散列高级特性
命令 | 描述 |
---|---|
HEXISTS | HEXISTS key-name key:检查给定键是否存在于散列中 |
HKEYS | HKEYS key-name:获取散列包含的所有键 |
HVALS | HVALS key-name:获取散列包含的所有值 |
HINCRBY | HINCRBY key-name key increment:将键key存储的值加上整数increment |
HINCRBYFLOAT | HINCRBYFLOAT key-name key increment:将键key存储的值加上浮点数increment |
例子:
conn.hmset('hash-key2', {'short':'hello', 'long': 1000 * '1'})
True
conn.exists('hash-key2')
True
conn.hexists('hash-key2', 'num')
False
conn.hincrby('hash-key2', 'num')
1
conn.hexists('hash-key2', 'num')
True
6.有序集合简介
有序集合也用来存储键值对,但是键值对的键被称为成员(member),每个成员的都是各不相同的;有序集合的值被称为分值(score),分值必须为浮点数。
有序集合时候Rediscover中唯一一个既可以根据成员访问元素,也可以根据分值以及分值的排列顺序访问的元素的结构。
有序集合常见方法:
命令 | 行为 |
---|---|
ZADD | ZADD key-name score member [score meter ...]:将带有给定分值的成员添加到有序集合里面 |
ZREM | ZREM key-name member [member ...]:从有序集合中移除给定的成员,并返回被移除的成员的数量 |
ZCARD | ZCARD key-name:返回有序集合包含的成员的数量 |
ZINCRBY | ZINCRBY key-name increment member:将member成员的分值加上increment |
ZCOUNT | ZCOUNT key-name min max:返回分值介于min和ma之间的成员数量 |
ZRANK | ZRANK key-name member:返回成员member在有序集合中的排名 |
ZSCORE | ZSCORE key-name member:返回成员member的分值 |
ZRANGE | ZRANGE key-name start stop [WITHSCORES]:格局有序集合中排名在start和stop之间的成员,如果给定了withscore选项,那么分值也一起返回 |
例子:
127.0.0.1:6379> zadd zset-key 728 member1
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1
1) "member1"
2) "member0"
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member1"
2) "728"
3) "member0"
4) "982"
127.0.0.1:6379> zrangebyscore zset-key 0 800
1) "member1"
127.0.0.1:6379> zrangebyscore zset-key 0 800 withscores
1) "member1"
2) "728"
127.0.0.1:6379> zrem zset-key member1
(integer) 1
127.0.0.1:6379> zrem zset-key member1
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"
有序集合中的其他命令
命令 | 描述 |
---|---|
ZREVRANK | ZREVRANK key-name member:返回有序集合中成员member的排名,成员按照分值由由大到小排列 |
ZREVRANGE | ZREVRANGE key-name start stop:返回有序集合中给定排名范围内的成员,成员按照分值从大到小排列 |
ZRANGEBYSCORE | ZRANGEBYSCORE key max min :获取有序元素在给定分值范围内的所有元素 |
ZREVRANGEBYSCORE | ZREVRANGEBYSCORE key max min :获取有序元素在给定分值范围内的所有元素,并按照分值从大到小来排列 |
ZREMRANGEBYRANK | ZREMRANGEBYRANK key-name start stop:移除有序集合中排名介于start和stop之间的所有成员 |
ZREMRANGEBYSCORE | ZREMRANGEBYSCORE key-name min max:移除有序集合中分值介于min和max之间的所有成员 |
ZINTERSTORE | ZINTERSTORE dest-key key-count key [key ...] [WEIGHT weight] [weight ...] [AGGREGATE SUM|MIN|MAX]:对于给定的有序集合执行类似集合的交集运算 |
ZUNIONSTORE | ZUNIONSTORE dest-key key-count key [key ...] [WRIGHT weight] [weight ...] [AGGREGATE SUM|MIN|MAX]:对于给定的有序集合执行类似集合的并集运算 |
例子:
conn.zadd('zset-1', 'a', 1, 'b', 2, 'c', 3)
3
conn.zadd('zset-2', 'b', 4, 'c', 1, 'd', 0)
3
conn.zinterstore('zset-i', ['zset-1', 'zset-2'])
2
conn.zrange('zset-i', 0, -1, withscores=True)
[(b'c', 4.0), (b'b', 6.0)]
conn.zunionstore('zset-u', ['zset-1', 'zset-2'], aggregate='min')
4
conn.zrange('zset-u', 0, -1, withscores=True)
[(b'd', 0.0), (b'a', 1.0), (b'c', 1.0), (b'b', 2.0)]