[redis学习笔记Ⅱ]redis数据类型祥讲及windows图形界面客户端介绍

Table of Contents

 

1.图形界面客户端(客户端可自行下载[redis desktop manager])

2.解决连接超时

       2.1 第一步:编辑iptables  /etc/sysconfig/iptables

       2.2 第二步:重启防火墙

3.redis数据类型

3.1String 类型

3.1.1命令

3.1.1.1赋值

3.1.1.2取值

3.1.1.3设置/获取多个键值

3.1.1.4取值并赋值(当所取的key不存在时则自动创建一个,并赋值为value)

3.1.1.5删除

3.1.1.6数值增减

3.1.1.7其他命令(自学)

3.1.1.7.1 向尾部追加值

3.1.1.7.2获取字符长度

3.1.2应用

3.1.2.1自增主键

3.2Hash类型

3.2.1使用str的问题(整条数据即使有的数据没有改变也会跟着更新)

3.2.2redis hash介绍

3.2.3命令

3.2.3.1赋值

3.2.3.2取值

3.2.3.3删除字段

3.2.3.4增加数字

3.2.3.5其他命令(自学)

3.2.3.5.1 判断字段是否存在(1为存在,0为不存在)

3.2.3.5.2只获取字段名或字段值

3.2.3.5.3获取字段数量

3.2.4应用

3.2.4.1存储商品信息

3.3list类型

3.3.1ArrayList与LinkedList的区别

3.3.2redis list介绍

3.3.3命令

3.3.3.1项列表两端增加元素

3.3.3.2查看列表

3.3.3.3从列表两端弹出(删除)元素

3.3.3.4获取列表中元素的个数

3.3.3.5其他命令

3.3.3.5.1删除列表中指定的值

3.3.3.5.2获得/设置指定索引的元素值

3.3.3.5.3只保留列表指定片段

3.3.3.5.4 向列表插入元素

3.3.3.5.5 将元素从一个列表转移到另一个列表中

3.3.4 应用

3.3.4.1 商品评论功能

3.4 set类型

3.4.1 redis set 介绍

3.4.2 命令

3.4.2.1 增加/删除元素

3.4.2.3 判断元素是否在集合中

3.4.3 运算命令

3.4.3.1 集合的差集运算       A-B

3.4.3.2 集合的交集运算       A∩B

3.4.3.3 集合的并集运算       A∪B

3.4.4 其他命令

3.4.4.1 获得集合中元素的个数

3.4.4.2 从集合中弹出一个元素

3.5 sortedSet类型 zset

3.5.1 redis sorted set介绍

3.5.2 命令

3.5.2.1 增加元素

3.5.2.2 获取元素分数

3.5.2.3 删除元素

3.5.2.4 获取排名在某个范围的元素列表

3.5.2.5 其他命令

3.5.2.5.1 获得指定分数范围的元素(分页)

3.5.2.5.2 增加某个元素的分数

3.5.2.5.3 获得集合中元素的数量

3.5.2.5.4 获得指定分数返回内的元素

3.5.2.5.5 按照排名删除元素

3.5.2.5.6 按照分数返回删除元素

3.5.2.5.7 获取元素的排名

3.5.3 应用

3.5.3.1 商品销售排行

4 keys命令

4.1 设置key的生存时间

4.2其他命令

4.2.1 keys

4.2.2 exists

4.2.3 del

4.2.4 rename

4.2.5 type


1.图形界面客户端(客户端可自行下载[redis desktop manager])

             

             

2.解决连接超时

              远程连接redis服务,需要关闭或者修改防火墙配置。

       2.1 第一步:编辑iptables  /etc/sysconfig/iptables

                            vi /etc/sysconfig/iptables

       2.2 第二步:重启防火墙

                            service iptables restart

 

注意:

        默认一共是16个数据库,每个数据库之间是相互隔离。数据库的数量是在redis.conf中配置的。

 

3.redis数据类型

 

Redis中存储数据是通过key-value存储的,对于value的类型有以下几种:

  • 字符串
  • Hash类型
  • List
  • Set
  • SortedSet(zset)

 

PS:

        在redis中的命令语句中,命令是忽略大小写的,而key是不忽略大小写的。

 

3.1String 类型

3.1.1命令

3.1.1.1赋值

  语法:set key value

 

 

 

3.1.1.2取值

127.0.0.1:6379> get test

"123“

 

 

 

3.1.1.3设置/获取多个键值

语法:

         MSET key value [key value …]

         MGET key [key …]

127.0.0.1:6379> mset key1 value1 key2 value2
OK

127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> mget key1 key2
1) "value1"
2) "value2"
 

 

 

 

 

 

 

 

3.1.1.4取值并赋值(当所取的key不存在时则自动创建一个,并赋值为value)

语法:getset key value

127.0.0.1:6379> getset key1 value2
"value1"
127.0.0.1:6379> get key1
"value2"

 

 

 

 

3.1.1.5删除

语法:del key

127.0.0.1:6379> del test
(integer) 1--------->(返回值为受影响的行数)

 

 

 

3.1.1.6数值增减

  • 递增数字

       当存储的字符串是整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。

语法:incr  key  (记:increase  key)

127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> incr num
(integer) 4

 

 

 

 

 

 

 

  • 增加指定的整数

语法:incrby key increment

127.0.0.1:6379> incrby num 2
(integer) 6
127.0.0.1:6379> incrby num 2
(integer) 8
127.0.0.1:6379> incrby num 2
(integer) 10

 

 

 

 

 

  • 递减数值

语法:decr  key

127.0.0.1:6379> decr num
(integer) 9
127.0.0.1:6379> decr num
(integer) 8

 

 

 

 

  • 减少指定的整数

语法:decrby key decrement

127.0.0.1:6379> decrby num 2
(integer) 6
127.0.0.1:6379> decrby num 2
(integer) 4

 

 

 

 

3.1.1.7其他命令(自学)

3.1.1.7.1 向尾部追加值

         APPEND的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于 SET key value。返回值是追加后字符串的总长度。

语法:append  key  value

127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> append str " world!"
(integer) 12
127.0.0.1:6379> get str
"hello world!"

 

 

 

 

 

3.1.1.7.2获取字符长度

         STRLEN命令返回键值的长度,如果键不存在则返回0。

语法:strlen str

127.0.0.1:6379> get str
"hello world!"
127.0.0.1:6379> strlen str
(integer) 12

 

 

 

 

3.1.2应用

3.1.2.1自增主键

      商品编号、订单号采用string的递增数字特性生成。

定义商品编号key:items:id

127.0.0.1:6379> set item:id 1
OK
127.0.0.1:6379> incr item:id
(integer) 2
127.0.0.1:6379> incr item:id
(integer) 3

 

 

 

 

 

 

3.2Hash类型

3.2.1使用str的问题(整条数据即使有的数据没有改变也会跟着更新)

假设有User对象以JSON序列化的形式存储到Redis中,User对象有id,username、password、age、name等属性,存储的过程如下: 

保存、更新: 

User对象 --> json(string) --> redis

如果在业务上只是更新age属性,其他的属性并不做更新我应该怎么做呢? 如果仍然采用上边的方法在传输、处理时会造成资源浪费,下边讲的hash可以很好的解决这个问题。

User “{“username”:”gll”,”age”:”18”}”

 

3.2.2redis hash介绍

       hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。如下:

3.2.3命令

3.2.3.1赋值

         HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。

  • 一次只设置一个字段值

语法:hset  key  field  value

127.0.0.1:6379> hset user username gll
(integer) 1

 

 

 

  • 一次性设置多个字段值(如果key相同则执行更新操作)
127.0.0.1:6379> hset user username gll
(integer) 1
127.0.0.1:6379> hmset user age 20 username gll2
OK

 

 

 

 

  • 当字段不存在时赋值,类似HSET,区别在于如果字段存在,该命令不执行任何操作

语法HSETNX key field value

127.0.0.1:6379> hsetnx user age 18    如果user中没有age字段则设置age值为18,否则不做任何操作
(integer) 0
127.0.0.1:6379> hsetnx user gender male
(integer) 1

 

 

 

 

3.2.3.2取值

  • 一次只能获取一个字段值

语法:hget key field

127.0.0.1:6379> hget user username
"gll2"

 

 

 

  • 一次可以获取多个字段值

语法:hmget key field [field ...]

127.0.0.1:6379> hmget user username age gender
1) "gll2"
2) "20"
3) "male"

 

 

 

 

  • 获取所有字段值(疏忽内容以一个键一个值单独输出)

语法:hgetall  key

127.0.0.1:6379> hgetall user
1) "username"       -->key
2) "gll2"                  -->value
3) "age"
4) "20"
5) "gender"
6) "male"

 

 

 

 

 

3.2.3.3删除字段

  •    可以删除一个或多个字段,返回值是被删除的字段个数

语法:hdel  key  field [field ...]

127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hdel user age name
(integer) 0
127.0.0.1:6379> hdel user age username
(integer) 1

----------------------------------------------------------------

127.0.0.1:6379> hgetall user
1) "gender"
2) "male"
 

 

 

 

 

 

 

 

3.2.3.4增加数字

语法:hincrby key field increment

127.0.0.1:6379> hset user age 18
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> hincrby user age 2
(integer) 20
127.0.0.1:6379> hget user age
"20"

 

 

 

 

 

3.2.3.5其他命令(自学)

3.2.3.5.1 判断字段是否存在(1为存在,0为不存在)

语法:hexists key field

127.0.0.1:6379> hexists user age
(integer) 1
127.0.0.1:6379> hexists user name
(integer) 0

 

 

 

 

3.2.3.5.2只获取字段名或字段值

语法:1)hkeys key  ,  2)hvals key

127.0.0.1:6379> hset user name gll
(integer) 1

127.0.0.1:6379> hkeys user
1) "gender"
2) "age"
3) "name"


127.0.0.1:6379> hvals user
1) "male"
2) "20"
3) "gll"

 

 

 

 

 

 

 

3.2.3.5.3获取字段数量

语法:hlen key

127.0.0.1:6379> hlen user
(integer) 3

 

 

 

3.2.4应用

3.2.4.1存储商品信息

  • 商品字段

        [商品id,商品名称]

  • 定义商品信息的key

         商品1001的信息在redis中的key为:[items:1001]

  • 存储商品信息
127.0.0.1:6379> hmset items:1001 id 1001 name bag
OK
127.0.0.1:6379> hmset items:1002 id 1002 name book
OK

 

 

 

 

  • 获取商品信息
127.0.0.1:6379> hget items:1001 id
"1001"
127.0.0.1:6379> hgetall items:1001
1) "id"
2) "1001"
3) "name"
4) "bag"

 

 

 

 

 

3.3list类型

3.3.1ArrayList与LinkedList的区别

            ArrayList使用数组方式存储数据,所以根据索引查询数据速度快,而新增或者删除元素时需要设计到位移操作,所以比较慢。 

            LinkedList使用双向链表方式存储数据,每个元素都记录前后元素的指针,所以插入、删除数据时只是更改前后元素的指针指向即可,速度非常快。然后通过下标查询元素时需要从头开始索引,所以比较慢,但是如果查询前几个元素或后几个元素速度比较快

3.3.2redis list介绍

       列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段

       列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。

3.3.3命令

3.3.3.1项列表两端增加元素

向列表左边增加元素

语法:lpush key value [value ...]

127.0.0.1:6379> lpush list:1 1 2 3
(integer) 3

 

 

 

向列表右边增加元素

语法:rpush key value [value ...]

127.0.0.1:6379> rpush list:1 4 5 6
(integer) 6

 

 

 

3.3.3.2查看列表

       LRANGE命令是列表类型最常用的命令之一,获取列表中的某一片段,将返回start、stop之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:“-1”代表最后边的一个元素。

语法:lrange key start stop

127.0.0.1:6379> lrange list:1 0 3
1) "3"
2) "2"
3) "1"
4) "4"

127.0.0.1:6379> lrange list:1 0 -1
1) "3"
2) "2"
3) "1"
4) "4"
5) "5"
6) "6"

 

 

 

 

 

 

 

 

3.3.3.3从列表两端弹出(删除)元素

LPOP命令从列表左边弹出一个元素,会分两步完成:

第一步是将列表左边的元素从列表中移除

第二步是返回被移除的元素值。

语法:

       lpop  key(左边弹出)

       rpop key(右边弹出)

127.0.0.1:6379> lpop list:1
"3"                                      -->显示的是弹出去的值为3
127.0.0.1:6379> rpop list:1
"6"                                      -->显示的是弹出去的值为6

 

 

 

 

3.3.3.4获取列表中元素的个数

语法:llen  key  (记忆:list length)

127.0.0.1:6379> llen list:1
(integer) 4

 

 

 

3.3.3.5其他命令

3.3.3.5.1删除列表中指定的值

lrem(记忆:list remove)命令会删除列表中前count个值为value的元素,返回实际删除的元素个数。根据count值的不同,该命令的执行方式会有所不同:

  1. 当count>0时, LREM会从列表左边开始删除值为value的数。 
  2. 当count<0时, LREM会从列表后边开始删除值为value的数。 
  3. 当count=0时, LREM删除所有值为value的元素值为value的数。

语法:lrem key count value

127.0.0.1:6379> lpush list:2 4 3 2 1 1 2 3 4      (放置8个数)
(integer) 8

 

127.0.0.1:6379> lrem list:2 1 3     (从左边(上边)弹出一个值为3的数)
(integer) 1

127.0.0.1:6379> lrange list:2 0 -1
1) "4"
2) "2"
3) "1"
4) "1"
5) "2"
6) "3"
7) "4"

 

 

 

 

 

 

 

 

127.0.0.1:6379> lrem list:2 -1 4     (从右边(下边)弹出一个值为4的数)
(integer) 1
127.0.0.1:6379> lrange list:2 0 -1
1) "4"
2) "2"
3) "1"
4) "1"
5) "2"
6) "3"

 

 

 

 

 

 

127.0.0.1:6379> lrem list:2 0 2
(integer) 2
127.0.0.1:6379> lrange list:2 0 -1
1) "4"
2) "1"
3) "1"
4) "3"

 

 

 

 

 

3.3.3.5.2获得/设置指定索引的元素值

  • 获得指定索引的元素值

语法:lindex key index

获取list:1中1的位置

127.0.0.1:6379> lindex list:1 1
"1"

 

 

 

  • 设置指定索引的元素值

语法:lset key index value

127.0.0.1:6379> lset list:1 2 8
OK
127.0.0.1:6379> lrange list:1 0 -1
1) "2"
2) "1"
3) "8"
4) "5"

 

 

 

 

 

3.3.3.5.3只保留列表指定片段

指定范围和lrange一致

语法:ltrim key start stop

127.0.0.1:6379> ltrim list:1 0 2
OK
127.0.0.1:6379> lrange list:1 0 -1
1) "2"
2) "1"
3) "8"

 

 

 

 

 

3.3.3.5.4 向列表插入元素

       该命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。 

语法:linsert key before/after pivot value

127.0.0.1:6379> linsert list:1 after 1 7
(integer) 4
127.0.0.1:6379> lrange list:1 0 -1
1) "2"
2) "1"
3) "7"
4) "8"

 

 

 

 

 

3.3.3.5.5 将元素从一个列表转移到另一个列表中

语法:rpoplpush source destination

127.0.0.1:6379> lrange list:1 0 -1
1) "2"
2) "1"
3) "7"
4) "8"
127.0.0.1:6379> lrange list:2 0 -1
1) "4"
2) "1"
3) "1"
4) "3"
127.0.0.1:6379> rpoplpush list:1 list:2
"8"
127.0.0.1:6379> lrange list:1 0 -1
1) "2"
2) "1"
3) "7"
127.0.0.1:6379> lrange list:2 0 -1
1) "8"
2) "4"
3) "1"
4) "1"
5) "3"

 

 

 

 

 

 

 

 

 

 

 

 

 

3.3.4 应用

3.3.4.1 商品评论功能

思路:

在Redis中创建商品评论列表

用户发布商品评论,将评论信息转成json存储到list中。

用户在页面查询评论列表,从redis中取出json数据展示到页面。

 

定义商品评论列表key:

商品编号为1001的商品评论key【items: comment:1001】

127.0.0.1:6379> lpush items:comment:1001 '{"id":"1","name":"商品很好"}'
(integer) 1

 

 

 

3.4 set类型

3.4.1 redis set 介绍

集合中的数据是不重复且没有顺序。

集合类型和列表类型的对比:

       集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型的Redis内部是使用值为空的散列表实现,所有这些操作的时间复杂度都为0(1)。 

       Redis还提供了多个集合之间的交集、并集、差集的运算。

3.4.2 命令

3.4.2.1 增加/删除元素

语法:sadd key member [member ...]

127.0.0.1:6379> sadd set a b c
(integer) 3
127.0.0.1:6379> sadd set a              (当元素存在时,返回0,不插入重复数据)
(integer) 0

 

 

 

 

语法:srem key member [member ...]

127.0.0.1:6379> sadd set a
(integer) 0
127.0.0.1:6379> srem set a d
(integer) 1              (当删除的元素不存在时,则只删除其他存在的元素)

127.0.0.1:6379> smembers set
1) "c"
2) "b"

 

 

 

 

 

3.4.2.3 判断元素是否在集合中

语法:sismember key member        (记忆:set  is  member)

127.0.0.1:6379> sismember set a
(integer) 0              不存在返回0
127.0.0.1:6379> sismember set b
(integer) 1              存在返回1

 

 

 

 

3.4.3 运算命令

3.4.3.1 集合的差集运算       A-B

属于A并且不属于B的元素构成的集合(哪个集合写在前则属于谁)

127.0.0.1:6379> sadd setA a b
(integer) 2
127.0.0.1:6379> sadd setB a b c
(integer) 3
127.0.0.1:6379> sdiff setA setB
(empty list or set)
127.0.0.1:6379> sdiff setB setA
1) "c"

 

 

 

 

 

 

3.4.3.2 集合的交集运算       A∩B

属于A且属于B的元素构成的集合

语法:sinter key [key ...]

127.0.0.1:6379> sinter setA setB
1) "a"
2) "b"

 

 

 

3.4.3.3 集合的并集运算       A∪B

属于A或者属于B的元素构成的集合

语法:sunion key [key ...]

127.0.0.1:6379> sunion setA setB
1) "a"
2) "c"
3) "b"

 

 

 

 

3.4.4 其他命令

3.4.4.1 获得集合中元素的个数

语法:scard key

127.0.0.1:6379> smembers setA
1) "a"
2) "b"

127.0.0.1:6379> scard setA
(integer) 2

 

 

 

 

3.4.4.2 从集合中弹出一个元素

注意:由于集合是无序的,所有SPOP命令会从集合中随机选择一个元素弹出

语法:spop key

127.0.0.1:6379> spop setA
"b"
127.0.0.1:6379> smembers setA
1) "a"

 

 

 

 

3.5 sortedSet类型 zset

3.5.1 redis sorted set介绍

       在集合类型的基础上,有序集合类型为集合中的每个元素都关联一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。 

 

在某些方面有序集合和列表类型有些相似。 

1、二者都是有序的。 

2、二者都可以获得某一范围的元素。 

但是,二者有着很大区别: 

1、列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会变慢。 

2、有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快。 

3、列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改分数实现) 

4、有序集合要比列表类型更耗内存。

 

3.5.2 命令

3.5.2.1 增加元素

向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。 (主要用于网站流量统计,分数统计排行)

语法:zadd key score member [score member ...]

127.0.0.1:6379> zadd score 90 gll 70 clz
(integer) 2

 

 

 

127.0.0.1:6379> zadd score 80 gl
(integer) 1

 

 

 

3.5.2.2 获取元素分数

语法:zscore key member

127.0.0.1:6379> zscore score gll
"90"

 

 

 

3.5.2.3 删除元素

移除有序集key中的一个或多个成员,不存在的成员将被忽略。

当key存在但不是有序集类型时,返回一个错误。

127.0.0.1:6379> zrem score gl
(integer) 1

 

 

 

3.5.2.4 获取排名在某个范围的元素列表

获得排名在某个范围的元素列表 

        按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

语法:zrange key start stop [withscores]

127.0.0.1:6379> zrange score 0 2
1) "clz"
2) "gll"
127.0.0.1:6379> zrange score 0 -1              (-1代表一直到结尾结束)
1) "clz"
2) "gll"

 

 

 

 

 

       按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

语法:zrevrange key start stop [withscores]       (记忆:z reverse range)

127.0.0.1:6379> zrevrange score 0 2
1) "gll"
2) "clz"

 

 

 

如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数 

127.0.0.1:6379> zrevrange score 0 2 withscores
1) "gll"
2) "90"
3) "clz"
4) "70"

 

 

 

 

3.5.2.5 其他命令

3.5.2.5.1 获得指定分数范围的元素(分页)

语法:zrangebyscore key min max [withscores] [limit offset count]

127.0.0.1:6379> zrangebyscore score 70 80
1) "clz"
2) "wangwu"
3) "lzhangsan"

127.0.0.1:6379> zrangebyscore score 70 80 limit 0 2
1) "clz"
2) "wangwu"

127.0.0.1:6379> zrangebyscore score 70 80 limit 2 2
1) "lzhangsan"

 

 

 

 

 

 

3.5.2.5.2 增加某个元素的分数

返回值是更改后的分数

语法:zincrby key increament member

127.0.0.1:6379> zincrby score 5 lisi
"65"

 

 

 

3.5.2.5.3 获得集合中元素的数量

语法:zcard key

127.0.0.1:6379> zcard score
(integer) 5

 

 

 

3.5.2.5.4 获得指定分数返回内的元素

zcount key min max

127.0.0.1:6379> zcount score 60 80
(integer) 4

 

 

 

3.5.2.5.5 按照排名删除元素

语法:zremrangebyrank key start stop

127.0.0.1:6379> zremrangebyrank score 0 1
(integer) 2

127.0.0.1:6379> ZRANGE score 0 -1
1) "wangwu"
2) "lzhangsan"
3) "gll"

 

 

 

 

 

3.5.2.5.6 按照分数返回删除元素

语法:zremrangebyscore key min max

127.0.0.1:6379> ZRANGE score 0 -1 withscores
1) "wangwu"
2) "74"
3) "lzhangsan"
4) "75"
5) "gll"
6) "90"

127.0.0.1:6379> zremrangebyscore score 85 95
(integer) 1

 

 

 

 

 

 

3.5.2.5.7 获取元素的排名

  • 从小到大

语法:zrank key member

127.0.0.1:6379> zrank score wangwu
(integer) 0

127.0.0.1:6379> zrank score lzhangsan
(integer) 1

 

 

 

 

  • 从大到小

语法:zrenrank key member

127.0.0.1:6379> zrevrank score lzhangsan
(integer) 0
127.0.0.1:6379> zrevrank score wangwu
(integer) 1

 

 

 

 

3.5.3 应用

3.5.3.1 商品销售排行

需求:根据商品销售量对商品进行排行显示

思路:定义商品销售排行榜(sorted set集合),Key为items:sellsort,分数为商品销售量。

写入商品销售量

商品编号1001的销量是9,商品编号1002的销量是10

127.0.0.1:6379> zadd items:sellsort 9 1001 10 1002
(integer) 2

 

 

 

商品编号1001的销量加1

127.0.0.1:6379> zincrby items:sellsort 1 1001
"10"

 

 

 

商品销售前10名

127.0.0.1:6379> zrange items:sellsort 0 9 withscores
1) "1001"
2) "10"
3) "1002"
4) "10"

 

 

 

 

4 keys命令

4.1 设置key的生存时间

Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。

EXPIRE key seconds  设置key的生存时间(单位:秒)key在多少秒后会自动删除

TTL key 查看key生于的生存时间

PERSIST key 清除生存时间 

PEXPIRE key milliseconds 生存时间设置单位为:毫秒

 

 

 

 

举个栗子

127.0.0.1:6379> set test 1                     设置test值为1
OK
127.0.0.1:6379> get test                     获取test值
"1"
127.0.0.1:6379> expire test 5                     设置test的生存时间为5秒(expire 意为"到期")
(integer) 1
127.0.0.1:6379> ttl test                     查看test的剩余生存时间还有1秒
(integer) 1
127.0.0.1:6379> ttl test                     在此获取生存时间,返回值为-2,说明该值过期
(integer) -2
127.0.0.1:6379> get test                     获取test的值,为空,已经删除
(nil)

 

 

 

 

 

 

 

 

4.2其他命令

4.2.1 keys

返回满足给定pattern的所有key

127.0.0.1:6379> keys set*
1) "set"
2) "setA"
3) "setB"

 

 

 

 

4.2.2 exists

确认一个key是否存在(返回值为0则不存在,返回值为1则存在)

127.0.0.1:6379> EXISTS set
(integer) 1       存在
127.0.0.1:6379> EXISTS seta
(integer) 0       不存在

 

 

 

 

4.2.3 del

删除一个key

127.0.0.1:6379> del set
(integer) 1
127.0.0.1:6379> EXISTS set
(integer) 0

 

 

 

 

4.2.4 rename

重命名key

127.0.0.1:6379> rename num number
OK

 

 

 

4.2.5 type

返回值的类型

127.0.0.1:6379> type key1
string

127.0.0.1:6379> type items:1001 hash 127.0.0.1:6379> type list:1 list 127.0.0.1:6379> type items:sellsort zset