• 技术文章 >数据库 >Redis

    深入聊聊Redis中的5种基本数据类型

    青灯夜游青灯夜游2021-11-23 18:56:55转载163
    本篇文章带大家详细了解一下Redis中的5种基本数据类型(String字符串、List列表、Set集合、Hash散列、Zset有序集合),希望对大家有所帮助!

    Redis数据结构简介

    对redis来说,所有的key(键)都是字符串。我们在谈基础数据结构时,讨论的是存储值的数据类型,主要包括常见的5种数据类型,分别是:String、List、Set、Zset、Hash。【相关推荐:Redis视频教程

    1.png

    结构类型结构存储的值结构的读写能力
    String字符串可以是字符串、整数或浮点数对整个字符串或字符串的一部分进行操作;对整数或浮点数进行自增或自减操作;
    List列表一个链表,链表上的每个节点都包含一个字符串对链表的两端进行push和pop操作,读取单个或多个元素;根据值查找或删除元素;
    Set集合包含字符串的无序集合字符串的集合,包含基础的方法有看是否存在添加、获取、删除;还包含计算交集、并集、差集等
    Hash散列包含键值对的无序散列表包含方法有添加、获取、删除单个元素
    Zset有序集合和散列一样,用于存储键值对字符串成员与浮点数分数之间的有序映射;元素的排列顺序由分数的大小决定;包含方法有添加、获取、删除单个元素以及根据分值范围或成员来获取元素

    基础数据结构详解

    String字符串

    String是redis中最基本的数据类型,一个key对应一个value。

    String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。

    命令简述使用
    GET获取存储在给定键中的值GET name
    SET设置存储在给定键中的值SET name value
    DEL删除存储在给定键中的值DEL name
    INCR将键存储的值加1INCR key
    DECR将键存储的值减1DECR key
    INCRBY将键存储的值加上整数INCRBY key amount
    DECRBY将键存储的值减去整数DECRBY key amount
    127.0.0.1:6379> set hello world
    OK
    127.0.0.1:6379> get hello
    "world"
    127.0.0.1:6379> del hello
    (integer) 1
    127.0.0.1:6379> get hello
    (nil)
    127.0.0.1:6379> get counter
    "2"
    127.0.0.1:6379> incr counter
    (integer) 3
    127.0.0.1:6379> get counter
    "3"
    127.0.0.1:6379> incrby counter 100
    (integer) 103
    127.0.0.1:6379> get counter
    "103"
    127.0.0.1:6379> decr counter
    (integer) 102
    127.0.0.1:6379> get counter
    "102"

    List列表

    Redis中的List其实就是链表(Redis用双端链表实现List)。

    使用List结构,我们可以轻松地实现最新消息排队功能(比如新浪微博的TimeLine)。List的另一个应用就是消息队列,可以利用List的 PUSH 操作,将任务存放在List中,然后工作线程再用 POP 操作将任务取出进行执行。

    命令简述使用
    RPUSH将给定值推入到列表右端RPUSH key value
    LPUSH将给定值推入到列表左端LPUSH key value
    RPOP从列表的右端弹出一个值,并返回被弹出的值RPOP key
    LPOP从列表的左端弹出一个值,并返回被弹出的值LPOP key
    LRANGE获取列表在给定范围上的所有值LRANGE key 0 -1
    LINDEX通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。LINEX key index
    127.0.0.1:6379> lpush mylist 1 2 ll ls mem
    (integer) 5
    127.0.0.1:6379> lrange mylist 0 -1
    1) "mem"
    2) "ls"
    3) "ll"
    4) "2"
    5) "1"
    127.0.0.1:6379> lindex mylist -1
    "1"
    127.0.0.1:6379> lindex mylist 10        # index不在 mylist 的区间范围内
    (nil)

    Set集合

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

    Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

    命令简述使用
    SADD向集合添加一个或多个成员SADD key value
    SCARD获取集合的成员数SCARD key
    SMEMBER返回集合中的所有成员SMEMBER key member
    SISMEMBER判断 member 元素是否是集合 key 的成员SISMEMBER key member

    其它一些集合操作,请参考这里

    https://www.runoob.com/redis/redis-sets.html

    127.0.0.1:6379> sadd myset ycf ycf1 xiao ycf
    (integer) 3
    127.0.0.1:6379> smember myset
    1) "xiao"
    2) "ycf1"
    3) "ycf"
    127.0.0.1:6379> sismember myset ycf
    (integer) 1

    Hash散列

    Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

    命令简述使用
    HSET添加键值对HSET hash-key sub-key1 value1
    HGET获取指定散列键的值HGET hash-key key1
    HGETALL获取散列中包含的所有键值对HGETALL hash-key
    HDEL如果给定键存在于散列中,那么就移除这个键HDEL hash-key sub-key1
    127.0.0.1:6379> hset user name1 ycf
    (integer) 1
    127.0.0.1:6379> hset user email1 ycf@163.com
    (integer) 1
    127.0.0.1:6379> hgetall user
    1) "name1"
    2) "ycf"
    3) "email1"
    4) "ycf@163.com"
    127.0.0.1:6379> hget user user
    (nil)
    127.0.0.1:6379> hget user name1
    "ycf"
    127.0.0.1:6379> hset user name2 xiaoycf
    (integer) 1
    127.0.0.1:6379> hset user email2 xiaoycf@163.com
    (integer) 1
    127.0.0.1:6379> hgetall user
    1) "name1"
    2) "ycf"
    3) "email1"
    4) "ycf@163.com"
    5) "name2"
    6) "xiaoycf"
    7) "email2"
    8) "xiaoycf@163.com"

    Zset有序集合

    Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。

    有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

    命令简述使用
    ZADD将一个带有给定分值的成员添加到哦有序集合里面ZADD zset-key 178 member1
    ZRANGE根据元素在有序集合中所处的位置,从有序集合中获取多个元素ZRANGE zset-key 0-1 withccores
    ZREM如果给定元素成员存在于有序集合中,那么就移除这个元素ZREM zset-key member1

    更多命令请参考这里

    https://www.runoob.com/redis/redis-sorted-sets.html

    127.0.0.1:6379> zadd myscoreset 100 ycf 90 xiaoycf
    (integer) 2
    127.0.0.1:6379> ZRANGE myscoreset 0 -1
    1) "xiaoycf"
    2) "ycf"
    127.0.0.1:6379> ZSCORE myscoreset ycf
    "100"

    更多编程相关知识,请访问:编程视频!!

    以上就是深入聊聊Redis中的5种基本数据类型的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除
    专题推荐:Redis 基本数据类型
    上一篇:浅析Python中怎么用Redis 下一篇:聊聊Redis中的缓存穿透、缓存雪崩、缓存击穿和缓存一致性

    相关文章推荐

    • 一招教你解决在php7中不能加载redis的问题• 浅谈Redis中的字典、哈希算法和ReHash原理• 浅析Redis缓存中的8种淘汰策略• Redis怎么进行去重?4种去重方法浅析• 浅析Redis中AOF的原理和缺点

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网