Redis 提供了七种数据类型:String、Hash、Set、Sorted Set、Pub/Sub、Transaction
Redis 内部封装了一个redisObject实例来表示所有的key 和 value。redisObject包含的最主要字段是 type和encoding。type代表value对象具体的数据类型,包括String、Hash、List、Set和Sorted set等,encoding表示在Redis内部的存储方式。
String相关命令
1、set和get 命令
set key value [ex 秒数] [px 毫秒数] [nx/xx]
ex:设置指定的到期时间,单位为秒
px:设置指定的到期时间,单位为毫秒,如果ex和px同时写,则以后面的有效期为准
nx:如果对应key不存在则创建
xx:如果对应key存在则修改其值
get key
2、mset 和 mget命令
mset key1 value1 key2 value2 ...
mget key1 key2
3、setrange和getrange命令
前者将字符串中偏移量为offset后的子串覆盖为指定的值,该命令返回修改后的字符串的长度。后者相当于截串(包含头尾)
setrange key offset value
getrange key start stop
127.0.0.1:6379> set word "Hello World"
OK
127.0.0.1:6379> setrange word 6 "Test1"
(integer) 11
127.0.0.1:6379> get word
"Hello Test1"
127.0.0.1:6379> setrange word 15 "Hei"
(integer) 18
127.0.0.1:6379> get word
"Hello Test1\x00\x00\x00\x00Hei"
127.0.0.1:6379> getrange word 1 3
"ell"
4、setex命令
设置指定键的值,并设置了该键值对的存活时间(单位秒)
setex key seconds value
5、setnx命令
设置指定的键值,当且仅当key值不存在时才生效
setnx key value
127.0.0.1:6379> setnx key "test2"
(integer) 1
127.0.0.1:6379> setnx key "RRRRR"
(integer) 0
127.0.0.1:6379> get key
"test2"
6、append命令
在指定的key对应的value上追加字符
append key value
127.0.0.1:6379> set key "Hello "
OK
127.0.0.1:6379> append key "World"
(integer) 11
127.0.0.1:6379> get key
"Hello World"
7、incr 、incrby命令和decr、decrby命令
递增、递减相关。 带上by的可指定增减量,不带的默认为1
incr key
incrby key k
decr key
decrby key k
8、strlen命令
返回字符串的长度
strlen key
Hash相关命令
1、hset 和 hget 命令
前者如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。
hset hash_name field value
hget hash_name field value
2、hmset 和 hmget 命令
同时操作多个key-value
HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN
HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN
redis 127.0.0.1:6379> HMSET myhash field1 "Hello" field2 "World"
OK
redis 127.0.0.1:6379> HGET myhash field1
"Hello"
redis 127.0.0.1:6379> HGET myhash field2
"World"
3、Hexists命令
查看哈希表的指定字段是否存在,如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。
HEXISTS KEY_NAME FIELD_NAME
redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HEXISTS myhash field1
(integer) 1
redis 127.0.0.1:6379> HEXISTS myhash field2
(integer) 0
4、Hlen命令
获取哈希表中字段的数量,当Key不存在时返回0
HLEN KEY_NAME
redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HLEN myhash
(integer) 2
5、Hdel命令
删除哈希表中的一个或多个字段,不存在的字段将被忽略
HDEL KEY_NAME FIELD1.. FIELDN
redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HDEL myhash field1
(integer) 1
redis 127.0.0.1:6379> HDEL myhash field2
(integer) 0
6、Hkeys 和 Hvals 命令
获取所有的key值和所有的value值
HKEYS key
HVALS key
redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HKEYS myhash
1) "field1"
2) "field2"
redis 127.0.0.1:6379> HVALS myhash
1) "foo"
2) "bar"
7、Hgetall命令
返回哈希表中,所有的字段和值
HGETALL KEY_NAME
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"
List相关命令
1、Lpush 和 Rpush 命令
Lpush 命令将一个或多个值插入到列表头部。Rpush命令将一个或多个值插入到列表尾部
LPUSH KEY_NAME VALUE1.. VALUEN
RPUSH KEY_NAME VALUE1..VALUEN
2、Lpop 和 Rpop 命令
Lpop移除并返回列表第一个元素,Rpop移除并返回列表最后一个元素
Lpop KEY_NAME
Rpop KEY_NAME
3、Lrange 命令
返回指定区间内的元素。0表示第一个元素,1表示第二个元素。-1表示倒数第一个元素,-2表示倒数第二个元素
LRANGE KEY_NAME START END
4、Lrem命令
根据参数count,移除列表中与value相等的元素
count > 0 从头开始搜索,移除列表中与value相等的元素,移除个数为 count
count < 0 从尾开始搜索,移除列表中与value相等的元素,移除个数为 count 的经验值
count = 0 移除列表中与value相等的所有值
LREM KEY_NAME COUNT VALUE
redis> RPUSH mylist "hello"
(integer) 1
redis> RPUSH mylist "hello"
(integer) 2
redis> RPUSH mylist "foo"
(integer) 3
redis> RPUSH mylist "hello"
(integer) 4
redis> LREM mylist -2 "hello"
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "foo"
5、Llen命令
返回列表长度
LLEN KEY_NAME
SET相关命令
1、Sadd 和 Srem 命令
添加和删除
SADD KEY_NAME VALUE1..VALUEN
SREM KEY_NAME MEMBER1..MEMBERN
redis 127.0.0.1:6379> SADD myset "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset "hello"
(integer) 0
redis 127.0.0.1:6379> SMEMBERS myset
1) "hello"
2) "foo"
redis 127.0.0.1:6379> SREM myset "hello"
(integer) 0
redis 127.0.0.1:6379> SMEMBERS myset
1) "foo"
2、Smembers 命令
返回集合中所有成员
SMEMBERS KEY_NAME
3、Scard命令
返回集合的成员数量
SCARD KEY_NAME
4、Sismember命令
判断是否是集合内的成员
SISMEMBER KEY_NAME VALUE
SORT SET 相关命令
1、Zadd 和 Zrem 命令
ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
ZREM key member [member ...]
2、Zrange
返回有序集合中,指定区间内的成员
ZRANGE key start stop [WITHSCORES]
3、Zcard
返回集合中,成员的数量
ZCARD KEY_NAME
Pub/Sub 发布订阅
常用的命令有PSUBSCRIBE、PUBSUB、PUBLISH、SUBSCRIBE。
PSUBSCRIBE pattern:订阅一个或多个符合给定模式的频道;
PUBSUB subcommand:查看订阅与发布系统状态;
PUBLISH channel message:将信息发送到指定的频道;
SUBSCRIBE channel:订阅给定的一个或多个频道的信息;
UNSUBSCRIBE [channel [channel …]]:指退订给定的频道。