Redis(一)、Redis五种数据结构

旧城等待, 2022-12-02 13:47 320阅读 0赞

[Redis(一)、Redis五种数据结构](https://www.cnblogs.com/haoprogrammer/p/11065461.html)

\ **

\ **

\ **

Redis**五种数据结构如下:**

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RhbmdodWFuMDgyNw_size_16_color_FFFFFF_t_70

对redis来说,所有的key(键)都是字符串。

1.String **字符串类型**

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

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

使用:get 、 set 、 del 、 incr、 decr 等

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”

实战场景:

1.缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力。

2.计数器:redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。

3.session:常见方案spring session +redis实现session共享,

2.Hash **(哈希)**

是一个Mapmap,指值本身又是一种键值对结构,如 value={ {field1,value1},……fieldN,valueN}}

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RhbmdodWFuMDgyNw_size_16_color_FFFFFF_t_70 1

使用:所有hash的命令都是 h 开头的 hget 、hset 、 hdel 等

127.0.0.1:6379> hset user name1 hao

(integer) 1

127.0.0.1:6379> hset user email1 hao@163.com

(integer) 1

127.0.0.1:6379> hgetall user

1) “name1”

2) “hao”

3) “email1”

4) “hao@163.com

127.0.0.1:6379> hget user user

(nil)

127.0.0.1:6379> hget user name1

“hao”

127.0.0.1:6379> hset user name2 xiaohao

(integer) 1

127.0.0.1:6379> hset user email2xiaohao@163.com

(integer) 1

127.0.0.1:6379> hgetall user

1) “name1”

2) “hao”

3) “email1”

4) “hao@163.com

5) “name2”

6) “xiaohao”

7) “email2”

8) “xiaohao@163.com

实战场景:

1.缓存: 能直观,相比string更节省空间,的维护缓存信息,如用户信息,视频信息等。

\ 3.\链表 **

List 说白了就是链表(redis 使用双端链表实现的List),是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RhbmdodWFuMDgyNw_size_16_color_FFFFFF_t_70 2

使用列表的技巧

  • lpush+lpop=Stack(栈)
  • lpush+rpop=Queue(队列)
  • lpush+ltrim=Capped Collection(有限集合)
  • lpush+brpop=Message Queue(消息队列)

使用:

127.0.0.1:6379> lpush mylist 1 2 ll lsmem

(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>

实战场景:

1.timeline:例如微博的时间轴,有人发布微博,用lpush加入时间轴,展示新的列表信息。

4.Set **集合**

集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中 1. 不允许有重复的元素,2.集合中的元素是无序的,不能通过索引下标获取元素,3.支持集合间的操作,可以取多个集合取交集、并集、差集。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RhbmdodWFuMDgyNw_size_16_color_FFFFFF_t_70 3

使用:命令都是以s开头的 sset 、srem、scard、smembers、sismember

127.0.0.1:6379> sadd myset hao hao1xiaohao hao

(integer) 3

127.0.0.1:6379> SMEMBERS myset

1) “xiaohao”

2) “hao1”

3) “hao”

127.0.0.1:6379> SISMEMBER myset hao

(integer) 1

实战场景;

1.标签(tag),给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人。

2.点赞,或点踩,收藏等,可以放到set中实现

5.zset **有序集合**

有序集合和集合有着必然的联系,保留了集合不能有重复成员的特性,区别是,有序集合中的元素是可以排序的,它给每个元素设置一个分数,作为排序的依据。

(有序集合中的元素不可以重复,但是score 分数可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相同)。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RhbmdodWFuMDgyNw_size_16_color_FFFFFF_t_70 4

使用:有序集合的命令都是以 z 开头 zadd 、 zrange、 zscore

127.0.0.1:6379> zadd myscoreset 100 hao 90xiaohao

(integer) 2

127.0.0.1:6379> ZRANGE myscoreset 0 -1

1) “xiaohao”

2) “hao”

127.0.0.1:6379> ZSCORE myscoreset hao

“100”

实战场景:

1.排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。

感谢观看。感谢支持。

参考:

redis官网

转载地址:https://www.cnblogs.com/haoprogrammer/p/11065461.html

发表评论

表情:
评论列表 (有 0 条评论,320人围观)

还没有评论,来说两句吧...

相关阅读