[关闭]
@File 2019-10-08T11:27:01.000000Z 字数 5279 阅读 44

redis 常用命令

系统


一、概要

中文文档

Redis 支持 5 中数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(sorted set:有序集合)。

二、字符串类型操作

1、特点

2、常用命令

set/get/decr/incr/mget/

3、常用应用场景

4、实现原理

String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr、decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

5、命令详解

set

  1. 说明

    设置键值

  2. 方法名

    1. SET key value [EX seconds] [PX milliseconds] [NX|XX]
  3. 参数说明

    • EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value
    • PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value
    • NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value
    • XX :只在键已经存在时,才对键进行设置操作。
  4. 栗子

    1. set 1 '小红'
    2. set 2 '小姐姐'
    3. set key-with-expire-time "hello" EX 60

setnx

  1. 说明

    设置键值(key不存在则设置,否则不做操作)

  2. 语法格式


    setnx(key,value)

  3. 参数说明

    • key:键
    • value:值

get

  1. 说明

    通过键获取值

  2. 方法

    1. get(key)

setbit

  1. 说明

    对二进制表示位进行操作,将值对应的ASCII码变换成二进制后再进行索引

  2. 命令

    1. setbit key offset value
  3. 参数

    • key

    • offset

      偏移量,也就是位的索引(将值对应的ASCII码变换成二进制后再进行索引)

    • value

      值只能是 1 或 0

  4. 栗子

    1. # 当前的字母是:h, 对应的ASC码是: 104, 对应的二进制数据是: 01101000
    2. # 当前的字母是:e, 对应的ASC码是: 101, 对应的二进制数据是: 01100101
    3. # 当前的字母是:l, 对应的ASC码是: 108, 对应的二进制数据是: 01101100
    4. # 当前的字母是:l, 对应的ASC码是: 108, 对应的二进制数据是: 01101100
    5. # 当前的字母是:o, 对应的ASC码是: 111, 对应的二进制数据是: 01101111
    6. setbit hello 21 0 # 将第三个l变成h

getset

  1. 说明

    设置新值,返回原值

  2. 方法

    1. getset key value
  3. 参数

    • key

    • value

      新的值

  4. 返回值

    如果存在返回旧的值,否则返回null

  5. 举个栗子

    1. getset 'key' '小红'

incr

  1. 说明

    自增mount对应的值,当mount不存在时,则创建mount=amount,否则,则自增,amount为自增数(整数)

  2. 方法

    1. incr key amount
  3. 参数

    • key

    • amount

      当mount不存在时,则创建mount=amount 默认1,否则,则自增,amount为自增数(整数)

  4. 返回值

    返回一个整数,增加后键的值

  5. 举个栗子

    1. incr 'count1'
    2. rds.incr 'count2' 2

getbit

  1. 说明

    获取值

  2. 命令

    1. getbit key offset
  3. 参数

    • key

    • offset

      偏移量,也就是位的索引(将值对应的ASCII码变换成二进制后再进行索引)

  4. 栗子

    1. """
    2. hello
    3. 01101000|[8]01[10]100101|01101100|01101100|01101111
    4. """
    5. getbit hello 8 # 0
    6. getbit hello 10 # 1

bitcount

  1. 说明

    获取二进制数据指定范围值为1的个数

  2. 命令

    1. bitcount hello

三、list操作

1、常用命令

lpush/rpush/lpop/rpop/lrange等;

2、应用场景

Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如微博的关注列表,粉丝列表等都可以用Redis的list结构来实现

3、实现原理

Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

4、命令详解

lpush

  1. 说明

    在key对应的list中添加元素,每个新的元素都添加到列表的最左边

  2. 方法

    1. lpush kye values...
  3. 参数

    • key

    • values

      要添加的值

  4. 返回值

    值的长度

  5. 举个栗子

    1. lpush "li" 2 3 4 5

rpush

  1. 说明

    同lpush,但每个新的元素都添加到列表的最右边

lpushx

  1. 说明

    在key对应的list中添加元素,只有key已经存在时,值添加到列表的最左边

  2. 方法

    1. lpushx key value
  3. 参数

    同上

  4. 栗子

    1. lpushx li 1

lrange

  1. 说明

    分片获取元素

  2. 命令

    1. lrange key start stop
  3. 参数

    • key 键
    • start 开始索引位置
    • stop 结束的索引位置
  4. 举个栗子

    1. lrange li 0 -1

lpop/rpop

  1. 说明

    移除列表的左侧第一个元素

  2. 命令

    1. lpop key
  3. 参数

    key 键

  4. 栗子

    1. lpop li

四、hash操作

常用命令

hget/hset/hgetall等

应用场景

redis中的Hash在内存中一个键。对应一个map来存储 我们要存储一个用户信息对象数据,其中包括用户ID、用户姓名、手机,通过用户ID我们希望获取该用户的姓名或者其它信息

实现原理

set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

命令详解

hget/hset/hgetall

hset

  1. 说明

    key对应的hash中设置一个键值对(不存在,则创建,否则,修改)

  2. 语法

    1. hset key key value
  3. 参数

    • key redis的键
    • key hash的键
    • value hash对应的值
  4. 栗子

    1. hset user userkey qq123456

hset

  1. 说明

    获取key对应的hash中值

  2. 语法

    1. hset key key
  3. 参数

    • key redis的键
    • key hash的键
  4. 栗子

    1. hget user userkey

hgetall

  1. 说明

    获取hash中对应值的所有键

  2. 语法

    1. hgetall key
  3. 参数

    key: 键

  4. 栗子

    1. hset user phone 110
    2. hagetall user

其它

五 、set相关操作

1、说明

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择

2、常用命令

sadd/spop/smembers/sunion等

3、特点

4、常用应用场景

5、命令详解

sadd

  1. 说明

    添加集合

  2. 语法格式

    1. sadd key value..
  3. 参数说明

    • key:键
    • value:值
  4. 举个栗子

    1. sadd numbers 1 2 3 1 1
    2. sadd k1 "hello" "niuniu"
    3. sadd k2 "jiaojiao" "hello" "world"

sdiff

  1. 说明

    返回给定键所有集合的差集

  2. 语法格式

    1. SDIFF key [key ...]
  3. 参数说明

    • key:键
    • key:键
  4. 举个栗子 ​

    1. sadd k1 "hello" "niuniu"
    2. sadd k2 "jiaojiao" "hello" "world"
    3. SDIFF k1 k2

smembers

  1. 说明

    获取集合中的所有的成员。 不存在的集合 key 被视为空集合

  2. 语法格式

    1. SMEMBERS KEY VALUE
  3. 参数说明

    key:键

    value:值

  4. 栗子

    1. sadd k1 "hello"
    2. sadd k1 "niuniu"
    3. SMEMBERS k1

spop

  1. 说明

    移除key对应集合中最右边(即最后面)的元素

  2. 语法格式

    1. spop key
  3. 参数说明

    • key:键
  4. 举个栗子

    1. spop k1

sunion

  1. 说明

    令返回给定集合的并集。不存在的集合 key 被视为空集

  2. 语法格式

    1. SUNION KEY KEY1..KEYN
  3. 参数说明

    • key:集合的键
  4. 栗子

    1. sadd k1 "hello"
    2. sadd k1 "niuniu"
    3. sadd k2 "jiaojiao"
    4. sadd k2 "hello"
    5. sadd k2 "world"
    6. SUNION k1 k2

六、有序集合相关操作

1、常用命令

zadd/zrange/zrem/zcard等

2、特点

3、常用应用场景

4、实现原理

set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

5、命令详解

zincrby

  1. 说明

    命令对有序集合中指定成员的分数加上增量 increment

    可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。

    当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。

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

    分数值可以是整数值或双精度浮点数。

  2. 语法格式

    1. zincrby key increment member
  3. 参数说明

    • key:键
    • increment:值
    • amount:分数自增值
  4. 举个栗子 ​

    1. ZINCRBY hot 1 "华为mate30发布会"
    2. ZINCRBY hot 1 "华为mate30发布会"
    3. ZINCRBY hot 1 "华为mate30发布会"
    4. ZINCRBY hot 1000 "华为mate30发布会"
    5. ZINCRBY hot 1 "杨紫荷叶边半裙"
    6. ZINCRBY hot 1 "杨紫荷叶边半裙"
    7. ZINCRBY hot 1 "杨紫荷叶边半裙"
    8. # 按分数升序
    9. zrange 'hot' 0 -1
    10. # 按分数降序
    11. zrevrange 'hot' 0 20

zadd

  1. 说明

    在name对应的有序集合中添加元素,分数越小,越靠前

  2. 语法格式

    1. zadd key_name score value.. score value
  3. 参数说明

    • key_name:键
    • score 分数
    • value
  4. 举个栗子

    1. zadd hot 1 "华为mate发布会" 2 "斗鱼三骚"

zcard

  1. 说明

    获取key对应的有序集合的元素个数

  2. 语法格式

    1. zcard key
  3. 参数说明

    key:键

  4. 举个栗子

    1. zcard hot

zcount

  1. 说明

    获取key对应的有序集合中,min<=分数<=max中的元素个数

  2. 语法格式

    1. zcount key,min,max
  3. 参数说明

    • name:键
    • min:小值(分数)
    • max:大值(分数)
  4. 举个栗子 ​

    1. zcount hot 1 9

zrange

  1. 说明

    获取name对应的有序集合中,start<=下标<=end的所有数据。

  2. 语法格式

    1. ZRANGE key start stop [WITHSCORES]
  3. 参数说明

    • name:键
    • start:起始位置
    • end:结束位置
    • withscores:是否获取分数,默认False
  4. 举个栗子 ​

    1. zrange 'hot' 0 -1 WITHSCORES

zrem

  1. 说明

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

  2. 语法格式

    1. zrem key member
  3. 参数说明

    • name:键
    • member
  4. 举个栗子 ​

    1. zrem hot "华为mate发布会"
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注