深圳推荐企业网站制作维护,微商分销商城,江都网站建设,工业设计产品分析案例一、五大数据结构Redis可以存储键与5种不同数据结构类型之间的映射#xff0c;这5种数据结构类型分别为#xff1a;STRING#xff1a;字符串LIST#xff1a;列表SET#xff1a;集合HASH#xff1a;散列ZSET#xff1a;有序集合TYPE命令用来获得键的数据类型#xff0c;… 一、五大数据结构Redis可以存储键与5种不同数据结构类型之间的映射这5种数据结构类型分别为STRING字符串LIST列表SET集合HASH散列ZSET有序集合TYPE命令用来获得键的数据类型而不是键值的数据类型返回值string字符串类型hash散列类型list列表类型set集合类型zet有序集合类型二、内部编码实际上每种数据结构都有自己底层的内部编码实现而且是多种实现 这样Redis会在合适的场景选择合适的内部编码如下图所示关于这些数据结构的详细介绍可以参阅后续的文章Redis这样设计有两个好处第一可以改进内部编码而对外的数据结构和命令没有影响这样一旦开发出更优秀的内部编码无需改动外部数 据结构和命令例如Redis3.2提供了quicklist结合了ziplist和linkedlist两者的优势为列表类型提供了一种更为优秀的内部编码实现而对外部用户来 说基本感知不到第二多种内部编码实现可以在不同场景下发挥各自的优势例如ziplist比较节省内存但是在列表元素比较多的情况下性能会有 所下降这时候Redis会根据配置选项将列表类型的内部实现转换为 linkedlistOBJECT ENCODING命令该命令用来返回数据结构的内部编码三、再说五种结构这里我不会讲的太深入深入的内容会在后续章节每个数据结构作为一个专题来具体讲。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}} 使用所有hash的命令都是 h 开头的 hget 、hset 、 hdel 等127.0.0.1:6379 hset user name1 hao
(integer) 1
127.0.0.1:6379 hset user email1 hao163.com
(integer) 1
127.0.0.1:6379 hgetall user
1) name1
2) hao
3) email1
4) hao163.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 xiaohao163.com
(integer) 1
127.0.0.1:6379 hgetall user
1) name1
2) hao
3) email1
4) hao163.com
5) name2
6) xiaohao
7) email2
8) xiaohao163.com
实战场景1.缓存能直观相比string更节省空间的维护缓存信息如用户信息视频信息等。 3.链表 List 说白了就是链表redis 使用双端链表实现的 List是有序的value可以重复可以通过下标取出对应的value值左右两边都能进行插入和删除数据。使用列表的技巧lpushlpopStack(栈)lpushrpopQueue队列lpushltrimCapped Collection有限集合lpushbrpopMessage 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.排行榜有序集合经典使用场景。例如游戏的每日排行周排行榜以及一个系统模块玩法的排行榜榜单可以按照用户的分数更新时间等做权重做排行。