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

 

 

 

Redis五种数据结构以下:

对redis来讲,全部的key(键)都是字符串。mysql

1.String 字符串类型

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

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

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

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是单线程模型,一个命令执行完才会执行下一个,同时数据能够一步落地到其余的数据源。session

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

 

2.Hash (哈希)

是一个Mapmap,指值自己又是一种键值对结构,如 value={{field1,value1},......fieldN,valueN}}app

 

使用:全部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 email2 xiaohao@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值,左右两边都能进行插入和删除数据。

使用列表的技巧

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

 

使用:

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>

实战场景:

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

 

4.Set   集合

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

 

 

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

127.0.0.1:6379> sadd myset hao hao1 xiaohao 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 分数 能够重复,就和一个班里的同窗学号不能重复,但考试成绩能够相同)。

 

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

127.0.0.1:6379> zadd myscoreset 100 hao 90 xiaohao
(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官网

相关文章
相关标签/搜索