Redis主要有五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合).

1.String(字符串)

  1. 设置指定的值

语法:set key value

示例:

127.0.0.1:6379> set name vilay
OK

2.获取指定的key值

语法:get key

示例:

127.0.0.1:6379> get name
"vilay"

3.给key值设置为value,并且返回key的旧值

语法:getset key value

示例:

127.0.0.1:6379> getset name vilays
"vilay"
127.0.0.1:6379> get name
"vilays"

4.获取多个key值

语法:mget key1 [key2]

示例:

127.0.0.1:6379> set sex 1
OK
127.0.0.1:6379> mget name sex
1) "vilays"
2) "1"

5.设置key值,并且设置过期时间

语法:setex key seconds value (以秒为单位)

示例:

127.0.0.1:6379> setex exname 60 vilay
OK
127.0.0.1:6379> ttl exname
(integer) 57
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> ttl exname
(integer) 46

ttl命令可以查看key值过期的剩余时间,以秒为单位,如果key是永久的返回-1

相似命令 psetex

语法:psetex key milliseconds value (以毫秒为单位)

示例:

127.0.0.1:6379> psetex exnames 10000 vilays
OK
127.0.0.1:6379> pttl exnames
(integer) 5483
127.0.0.1:6379> ttl exnames
(integer) 2

pttl命令可以查看key值过期的剩余时间,以毫秒为单位,如果key是永久的返回-1

6.key值不存在时设置值

语法:setnx key value

示例:

127.0.0.1:6379> setnx age 19
(integer) 1
127.0.0.1:6379> setnx age 20
(integer) 0

同时设置多个不存在的值

语法:msetnx key value [key value]

7.获取字符串值的长度

语法:strlen key

示例:

127.0.0.1:6379> set name vilay
OK
127.0.0.1:6379> strlen name
(integer) 5

8.key 中储存的数字值增一

语法:incr key

示例:

127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"

9.key 中储存的数字值减一

语法:decr key

示例:

127.0.0.1:6379> decr num
(integer) 1
127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> decr num
(integer) 9

10.append

语法:append key value

示例:

127.0.0.1:6379> get name
"vilay"
127.0.0.1:6379> append name age:19
(integer) 11
127.0.0.1:6379> get name
"vilayage:19"

2.Hash(哈希)

  1. 设置hash表key中的字段值

语法:hset key field value

示例:

127.0.0.1:6379> hset article title hello
OK

设置hash表多个值

语法:hmset key field1 value1 [field2 value2]

示例:

127.0.0.1:6379> hmset article author vilay time 2019-05-03
OK

2.获取hash表key中的字段值

语法:hget key field

示例:

127.0.0.1:6379> hget article title
"hello"

获取hash表多个值

语法:hmget key field1 [field2]

示例:

127.0.0.1:6379> hmget article author time
1) "vilay"
2) "2019-05-03"

3.hash表字段不存在时设置值

语法:hsetnx key field value

示例:

127.0.0.1:6379> hsetnx article title helloworld
(integer) 0
127.0.0.1:6379> hsetnx article views 100
(integer) 1

4.获取hash表所有字段和值

语法:hgetall key

示例:

127.0.0.1:6379> hgetall article
1) "title"
2) "hello"
3) "author"
4) "vilay"
5) "time"
6) "2019-05-03"
7) "views"
8) "100"

5.查询表中字段是否存在

语法:hexists key field

示例:

127.0.0.1:6379> hexists article title
(integer) 1
127.0.0.1:6379> hexists article comment
(integer) 0

6.获取hash表所有字段

语法:hkeys key

示例:

127.0.0.1:6379> hkeys article
1) "title"
2) "author"
3) "time"
4) "views"

7.获取hash表所有值

语法:hvals key

示例:

127.0.0.1:6379> hvals article
1) "hello"
2) "vilay"
3) "2019-05-03"
4) "100"

8.获取hash表中的字段数量

语法:hlen key

示例:

127.0.0.1:6379> hlen article
(integer) 4

9.删除hash表中的一个或多个字段

语法:hdel key field1 [field2]

示例:

127.0.0.1:6379> hdel article views time
(integer) 2
127.0.0.1:6379> hgetall article
1) "title"
2) "hello"
3) "author"
4) "vilay"

也可以直接整个删除

语法:del key

示例

127.0.0.1:6379> del article
(integer) 1
127.0.0.1:6379> hgetall article
(empty list or set)

3. List(列表)

列表中插入数据是后进先出的原则

  1. 插入元素

头部插入

语法:lpush key value1 [value2]

示例:

127.0.0.1:6379> lpush items vilay1 vilay2 vilay3
(integer) 3

尾部插入

语法:rpush key value1 [value2]

示例:

127.0.0.1:6379> rpush items vilay4
(integer) 4

2.获取列表中的元素

获取最后个元素(会移出数据)

语法:rpop key

示例:

127.0.0.1:6379> rpop items
"vilay4"

获取第一个元素(会移出数据)

语法:lpop key

示例:

127.0.0.1:6379> lpop items
"vilay3"

通过索引获取元素

语法:lpop key index

示例:

127.0.0.1:6379> lindex items 0
"vilay2"

获取列表指定范围内的元素

语法:lrange key start stop

示例:

127.0.0.1:6379> lpush items vilay5 vilay6
(integer) 3
127.0.0.1:6379> lrange items 0 2
1) "vilay6"
2) "vilay5"
3) "vilay2"
127.0.0.1:6379> lrange items 0 1
1) "vilay6"
2) "vilay5"
  1. 阻塞获取列表元素

语法:blpop key1 [key2] timeout

移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

示例:

127.0.0.1:6379> blpop items 10
1) "items"
2) "vilay6"
127.0.0.1:6379> blpop items 10
1) "items"
2) "vilay5"
127.0.0.1:6379> blpop items 10
1) "items"
2) "vilay2"
127.0.0.1:6379> blpop items 10
(nil)
(10.06s)

语法:brpop key1 [key2] timeout

移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

4.获取列表长度

语法:llen key

示例:

127.0.0.1:6379> lpush items vilay1 vilay2
(integer) 2
127.0.0.1:6379> llen items
(integer) 2

5.通过索引设置某个元素的值

语法:lset key index value

示例:

127.0.0.1:6379> lset items 1 vilay6
OK
127.0.0.1:6379> lindex items 1
"vilay6"

6.移除列表元素

语法:lrem key count value

根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素

count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。

示例:

127.0.0.1:6379> lrem items 0 vilay6
(integer) 1
127.0.0.1:6379> llen items
(integer) 1

7.列表进行修剪(trim)

语法:ltrim key start stop

让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

4.Set(集合)

Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据

  1. 集合中插入元素

语法:sadd key member1 [member2]

示例:

127.0.0.1:6379> sadd animals cat bird
(integer) 1

2.获取集合的成员数量

语法:scard key

示例:

127.0.0.1:6379> scard animals
(integer) 2

3.获取集合的所有成员

语法:smembers key

示例:

127.0.0.1:6379> smembers animals
1) "bird"
2) "cat"

4.移除并返回集合中的随机一个元素

语法:srem key member1 [member2]

示例:

127.0.0.1:6379> spop animals
"cat"

5.移除集合中的一个或多个成员

语法:srem key member1 [member2]

示例:

127.0.0.1:6379> srem animals fish cat
(integer) 2

6.判断元素是否集合的成员

语法:sismember key member

示例:

127.0.0.1:6379> sismember animals fish
(integer) 1

7.获取给定集合的差集

语法:sdiff key1 [key2]

示例:

127.0.0.1:6379> sdiff animals foods
1) "bird"

7.获取给定集合的交集

语法:sinter key [key1]

示例:

127.0.0.1:6379> sinter animals foods
1) "fish"

8.获取给定集合的并集

语法:sunion key [key1]

示例:

127.0.0.1:6379> sunion animals foods
1) "bird"
2) "apple"
3) "fish"

5.Sorted Set(有序集合)

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

  1. 有序集合中插入元素

语法:zadd key score1 member1 [score2 member2]

示例:

127.0.0.1:6379> zadd recomend 1 hello2 2 hello3
(integer) 2

2.获取集合的成员数量

语法:zcard key

示例:

127.0.0.1:6379> zcard recomend
(integer) 3

3.获取有序集合中指定区间分数的成员数

语法:zcount key min max

示例:

127.0.0.1:6379> zcount recomend 1 1
(integer) 2

4.有序集合中指定成员分数增加

语法:zincrby key increment member

示例:

127.0.0.1:6379> zincrby recomend 2 hello2
"3"

5.通过分数返回指定区间的成员

语法:zrangebyscore key min max

示例:

127.0.0.1:6379> zrangebyscore recomend 1 2
1) "hello1"
2) "hello3"

6.获取指定成员的索引

语法:zrank key member

示例:

127.0.0.1:6379> zrank recomend hello3
(integer) 1

7.移除有序集合中的一个或者多个元素

语法:zrem key member [member1]

示例:

127.0.0.1:6379> zrem recomend hello1
(integer) 1

7.返回指定成员的分值

语法:zscore key member

示例:

127.0.0.1:6379> zscore recomend hello3
"2"

8.获取有序集中指定区间内的成员,通过索引,分数从高到底

语法:zrevrange key start stop

示例:

127.0.0.1:6379> zrevrange recomend 0 1
1) "hello2"
2) "hello3"

9.移除有序集合中给定的分数区间的所有成员

语法:zremrangebyscore key start stop

示例:

127.0.0.1:6379> zremrangebyscore recomend 0 2
(integer) 0

10.移除有序集合中给定的排名区间的所有成员

语法:zremrangebyrank key start stop

示例:

127.0.0.1:6379> zremrangebyrank recomend 0 0
(integer) 1