Redis五种数据结构

一、Redis五种数据类型 

Redis除了存储键之外还可以存储常见的5种数据类型,分别是:String、List、Set、Zset、Hash。

结构类型 结构存储的值 结构的读写能力
String字符串 可以是字符串、整数或浮点数

对整个字符串或字符串的一部分进行操作

对整数或浮点数进行自增或自减操作

List列表

一个链表,链表上的每个节点都

包含一个字符串

对链表的两端进行push和pop操作,读取单个或多个元素;

根据值查找或删除元素

Set集合

包含字符串的无序集合

集合中每个字符串都是独一无二的

添加、获取、删除元素。检查一个元素是否存在于集合中

计算交集、并集、差集

Hash散列 包含键值对的无序散列表

添加、获取、删除单个元素

获取所有键值对元素

Zset有序集合

和散列一样,用于存储键值对

字符串成员与浮点数分数之间的有序映射

元素的排列顺序由分数的大小决定

添加、获取、删除单个元素

根据分值范围或成员来获取元素

二、String字符串类型

Redis中的String类型就是一个由字符串组成的序列。

1.下图是一个String类型的实例,其中键为hello,值为world。

2.常用命令如下:

GET         |获取存储在给定键中的值         | get name

SET         |设置存储在给定键中的值         | set name lll
 
DEL         |删除存储在给定键中的值         | del name

INCR        |将键存储的值加一              | INCR key

DECR        |将键存储的值减1               | DECR key

INCRBY      |将键存储的值加上整数           |INCRBY key amount

DECRBY      |将键存储的值减去整数           |DECRBY key amount

3.应用场景:

String是常用的一种数据类型,普通的key/value存储都可以归为此类,value不仅是String,还可以是数字。比如想知道什么时候封锁一个IP地址(访问超过几次),INCRBY命令让这些变得很容易,通过原子递增保持计数。

三、List列表类型

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

è¿éåå¾çæè¿°

 

常用命令:

RPUSH     |将给定值推入到列表右端                 |RPUSH key value

LPUSH      

RPOP      |从列表的右端弹出一个值,并返回被弹出的值| RPOP key 

LPOP

LRANGE    |获取列表在给定范围上的所有值           |LRANGE key 0 -1

LINDEX

应用场景:

  • 微博TimeLine
  • 消息队列

四、Set集合类型

Redis的集合类型和列表都可以存储多个字符串,它们的不同之处在于。列表可以存储多个相同的字符串,而集合通过散列表来保证自己存储的每个字符串都是各不相同的。

è¿éåå¾çæè¿°

常用命令如下:

SADD       |将给定元素添加到集合                      |SADD key item
    
SMEMBERS   |返回集合中包含的所有元素                   |SMEMBERS key

SISMEMBER  |检查给定元素是否存在于集合中               |SISMEMBER key item

SREM       |如果给定的元素存在于集合中,那么移除这个元素 |SERM key item

使用场景:

  • 共同好友、二度好友(并集、交集、差集运算)
  • 利用唯一性,可以统计访问网站的所有独立IP
  • 好友推荐的时候,可以根据tag求交集,交集大于threshold就可以推荐

五、Hash散列类型

Redis的散列可以存储多个键值对之间的映射。和字符串一样,散列存储的值既可以是字符串又可以是数字值。并且用户同样可以对散列存储的数字进行自增或自减操作。

è¿éåå¾çæè¿°

常用命令:

HSET    |添加键值对                                 |HSET hash-key sub-key1 value1

HGET    |获取指定散列键的值                          |HGET hash-key key1

HGETALL |获取散列中包含的所有键值对                   |HGETALL hash-key

HDEL    |如果给定键存在于散列中,那么就移除这个键      |HDEL hash-key sub-key1

六、有序集合Zset

有序集合和散列一样,用于存储键值对。有序集合的键被称为成员member,每一个成员都是独一无二的。而有序集合的值被称为score,分值必须是浮点数。有序集合是Redis里面唯一一个即可以根据成员访问元素,又可以根据分值以及分值的排序来访问元素的结构。

è¿éåå¾çæè¿°

常用命令如下:

ZADD     |将一个带有给定分值的成员添加到哦有序集合里面    |ZADD zset-key 178 member1

ZRANGE   |根据元素在有序集合中所处的位置,从有序集合中获取多个元素   |ZRANGE zset-key 0-1 withccores

ZREM     |如果给定元素成员存在于有序集合中,那么就移除这个元素       |ZREM zset-key member1

参考文章:https://blog.csdn.net/xlgen157387/article/details/60958657

来源:网络


智能推荐

redis当中的五种数据结构

Redis有五种基本数据类型,String(字符串),Hash(哈希),List(链表),Set(集合),ZSet(有序集合) 1、String是redis当中最常用的基本类型,常用命令:       1、set key value [EX seconds] [PX milliseconds] [NX|XX]         &...

Redis入门(二)——五种数据结构——列表

列表(类队列) 数据结构:有序、可重复 基本命令: 例子 阻塞式的列表弹出命令及列表之间移动元素的命令 blpop blpop keyname1 keyname2 timeout 解释: 非阻塞式:从左向右依次检查,如果发现列表不为空则弹出该列表的最左端的元素 阻塞式:从左向右依次检查,如果发现所有列表为空或者不存在,则等待时间timeout(s),期间如果其他客户端往列表中插入元素,该客户端则弹...

Redis五种数据结构及基本操作

String类型 1. 内存存储模型 2. 常用操作命令 命令 说明 set 设置一个key/value get 根据key获得对应的value mset 一次设置多个key value mget 一次获得多个key的value getset 获得原始key的值,同时设置新值 strlen 获得对应key存储value的长度 append 为对应key的value追加内容 getrange 索引0...

Redis五种数据结构演示

文章目录 String hash list set sortedset String setex key 过期时间(单位秒) 值 例如上图 setex c 100 c 设置key为c的值为c , 过期时间为100s psetex key 过期时间(单位毫秒) 值 psetex d 10000 d 10000毫秒为10s ttl为查询还有多久时间过期, 单位为秒 获取字符串的范围getrange g...

Redis五种数据结构底层编码

每种类型的对象都至少使用了两种不同的编码: 其中REDIS_ENCODING_ENBSTR和REDIS_ENCODING_RAW都是用于保存字符串值,其中embstr编码是专门用于保存短字符串的一种优化编码方式,这种编码和raw编码一样,都使用redisObject结构和sdshdr结构结构来表示字符串对象,但raw编码会调用两次内存分配函数来分别创建redisObject结构和sdshdr结构,...

猜你喜欢

Redis五种数据结构的底层实现

一、前言 Redis有五种基本数据结构:字符串、hash、set、zset、list。下面解释下载Redis 3.0.6版本中底层是怎样实现他们的。 二、动态字符串SDS SDS是“simple dynamic string”的缩写。Redis中所有场景出现的字符串,基本都是有SDS来实现的: 所有非数字的key, 如:set msg “hello”...

Redis五种数据结构的底层原理

redis六种底层数据结构 Redis作为一个开源的用C编写的非关系型数据库,基于优秀的CRUD效率,常用于软件系统的缓存,其本身提供了以下五种数据格式: string:字符串 list:列表 hash:散列表 set:无序集合 zset:有序集合 bstring 因为redis使用c语言开发,所以自然没有java和c++的那些字符串类库,在redis中,其自己定义了一种字符串格式,叫做SDS(S...

Redis的五种数据结构

Redis 数据类型分为:字符串类型、散列类型、列表类型、集合类型、有序集合类型。 一、String 是redis中最基本的数据类型,一个key对应一个value。 String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。 二、hash 指value本身又是一种键值对结构,如 value={{field1,value1},...

redis五种数据结构底层实现

redis五种数据结构底层实现 String list hash set zset 对应结构的讲解 动态字符串SDS 空间预分配 惰性空间释放 int 双向链表 ziplist 哈希表 intset 跳表 性质 String 其中:embstr和raw都是由SDS动态字符串构成的。唯一区别是:raw是分配内存的时候,redisobject和 sds 各分配一块内存,而embstr是redisobj...

redis五种数据结构的内部编码

开头 redis的五种数据结构分别是string,hash,list,set,zset。它们内部编码其实是有多种实现的。 数据结构 内部编码 String int,raw,embstr hash ziplist,hashtable list ziplist,linkedlist,quicklist set intset,hashtable zset ziplist,skiplist redis可以...

问答精选

Static initialization order issue in C++

This is another variation of an old theme: The initialization order of static objects in different translation units is not defined. Below is a stripped-down example of my particular scenario. The cla...

How to append a text file on SFTP server using SharpSSH or SSH.NET library

I use Tamir.SharpSSH library to make my SFTP operations. I can upload file from client, delete or list files located in an SFTP server directory. But I cannot find how to append a text file. I don't w...

NodeJS cloud Openshift wont display my app

I've been struggling days just to upload my nodejs app on a cloud and i tried openshift because it seems nice and i've commited my folder and files into my github, i've created a ssh key and everythin...

Creating APK file inside Android Application on the device?

Can one create .APK file from set of files/folder inside Android Application? (for example, inside application like fdroid) For example, I have uncompressed files of my apk file and I want to recreate...

Naming files in R loop

I have multiple audio files which are held in several subfolders in my working directory. I have a loop which reads in the first minute of each file and then saves them as a new file. Now, there are a...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答