Redis主要有五种数据类型:string
(字符串),hash
(哈希),list
(列表),set
(集合)及zset
(sorted set:有序集合).
1.String(字符串)
- 设置指定的值
语法: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(哈希)
- 设置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(列表)
列表中插入数据是后进先出的原则
- 插入元素
头部插入
语法: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"
- 阻塞获取列表元素
语法: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 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据
- 集合中插入元素
语法: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)却可以重复。
- 有序集合中插入元素
语法: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