redis 的使用 ( list列表类型操作)
list 数据类型 列表类型
list 类型是一个双向操作 从链表的头部或者尾部添加删除元素
list 既可以用作栈 也可以用作队列
list 链表的类型应用场合:
获取最新的 10 个用户的信息
select * from user order by logintime desc limit 10;
数据不复杂 但是 对数据库的负载比较大
如给关键字 logintime 设置索引 耗费资源
用 redis 通过 list 链表实现以上功能
在 list 链表中只保留最新的10个数据
每一次进来一个新数据就删除一条旧数据
从而实现节约数据资源 减少服务器负载压力
// list 类型 操作
lpush key string 在 key 对应 list 头部添加字符串元素
rpush key string 在 key 对应 list 尾部添加字符串元素
rpop key 从 list 尾部删除元素 并返回删除的元素
lpop key 从 list 头部删除元素 并返回删除的元素
llen key 返回 key 对应 list 的长度 key 不存在 返回 0 如果key对应的类型不是 list 返回错误
lrange key start end 返回指定区间内的元素 从下标 0 开始
ltrin key start end 截取list 保留指定区间的元素
// 注意
// lpush 和 rpop 结合使用
// rpush 和 lpop 结合使用
eg : 只保存5条数据
原理 (队列) list 链表 namelogin 保存最新3条数据的
头部 >>> 添加新用户 >>> laowen9
laowen8
laowen7
laowen6
尾部 >>> 踢出旧用户 >>> laowen5
// 操作开始 如下
// 头部每更新一条 就删除尾部一条 最终只保留5条数据
lpush namelogin laowen1 // OK 表示添加OK
lpush namelogin laowen2 // OK 表示添加OK
lpush namelogin laowen3 // OK 表示添加ok
lpush namelogin laowen4 // OK 表示添加OK
lpush namelogin laowen5 // OK 表示添加OK
lpush namelogin laowen6 // OK 表示添加OK
rpop namelogin // 返回 "laowen1" 删除list表最后一条数据
lrange namelogin 0 4
// 返回值为
// 1) "laowen6"
// 2) "laowen5"
// 3) "laowen4"
// 4) "laowen3"
// 5) "laowen2"
llen namelogin // 返回 (integer) 5 // 返回的是数据的长度
// 截取lsit 保留指定范围内的元素
ltrim namelogin 2 4 // 返回 OK
lrange namelogin 0 2
// 返回值为
// 1) "laowen5"
// 2) "laowen4"
// 3) "laowen3"
总结 队列 栈 区别
队列 >>> 头部 添加数据 尾部 删除数据
头部 添加新用户 >>> laowen9
laowen8
laowen7
laowen6
尾部 踢出旧用户 >>> laowen5
栈 >>> 头部 添加数据 头部 删除数据
头部 添加新用户 >>> laowen9
头部 踢出旧用户 >>> laowen5
laowen8
laowen7
laowen6
redis 的使用 ( list列表类型操作)的更多相关文章
- 玩一把redis源码(一):为redis添加自己的列表类型
2019年第一篇文档,为2019年做个良好的开端,本文档通过step by step的方式向读者展示如何为redis添加一个数据类型,阅读本文档后读者对redis源码的执行逻辑会有比较清晰的认识,并且 ...
- redis源码(一):为redis添加自己的列表类型
本文档分为三大部分: 环境介绍与效果演示 redis接收命令到返回数据的执行逻辑 代码实现 文档的重点和难点在第三部分,完全阅读本文档需要读者具备基本的c语言和数据结构知识. 环境介绍和效果演示环境介 ...
- redis 的使用 ( set集合类型操作)
set 集合类型 释义: redis 的 set 是 string 类型的无序集合 set 元素最大可以包含(2的32次方-1)个元素 关于 set 集合类型除了基本的添加删除操 ...
- Redis常用命令入门——列表类型(一级二级缓存技术)
获取列表片段 redis > LRANGE KEY_NAME START END lrange命令比较常用,返回从start到stop的所有元素的列表,start和stop都是从0开始. (1) ...
- thinkphp5操作redis系列教程】列表类型之lRange,lGetRange
<?php namespace app\admin\controller; use think\cache\driver\Redis; use think\Controller; use \th ...
- redis对sorted_set进行的相关操作
redis对sorted_set(有序集合)类型操作的相关命令以及如何在python使用这些命令 redis对sorted_set(有序集合)类型操作的命令: 命令 语法 概述 返回值 Redis Z ...
- 第二百九十九节,python操作redis缓存-SortSet有序集合类型,可以理解为有序列表
python操作redis缓存-SortSet有序集合类型,可以理解为有序列表 有序集合,在集合的基础上,为每元素排序:元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值, ...
- redis:list列表类型的操作
1. list列表类型的操作 1.1. lpush/rpush key value [value ...] 链表的头部(左侧)或尾部(右侧)插入值 语法:lpush key value [value ...
- Redis常用命令入门3:列表类型
列表类型 列表类型也是一个我们很长要用到的一个类型.比如我们发博客,要用到博客列表.如果没有列表我们就只能遍历键来获取所有文章或一部分文章了,这个语法是keys,但是这个命令需要遍历数据库中的所有键, ...
随机推荐
- Android Canvas绘图详解(图文)
编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! Andr ...
- 【QT】视频播放
在网上没找到,在书上也没有.后来突然想直接在官网的类里面找Video 居然就有了. 把http://qt-project.org/doc/qt-5/qmediaplayer.html的例子补充完整后就 ...
- express响应前端ajax请求
后端其实并不需要知道前端发起的请求是不是ajax,后端只需要响应请求即可.例子: 前端这样写: $('button').on('click', function(event) { event.prev ...
- 二叉树计数(codevs 3112)
题目描述 Description 一个有n个结点的二叉树总共有多少种形态 输入描述 Input Description 读入一个正整数n 输出描述 Output Description 输出一个正整数 ...
- 线程变量ThreadLocal的使用
我们有时候会通过token进行多次查询(猪:token是redis中的key),比如: 一次是在登录拦截器中,一次是在controller的业务中查询,这样存在性能和资源的浪费问题!!! 那么如何将拦 ...
- 创建DLL、Lib以及使用DLL、Lib
1.要在生成DLL文件的同时生成Lib文件,函数声明时前面要加__declspec(dllexport). 可在头文件中如下定义: #ifndef __MYDLL_H#define __MYDLL_H ...
- "稀奇古怪的"delete this
myClass::foo(){ delete this; } .. void func(){ myClass *a = new myClass(); a->foo(); ...
- CNN初步-1
Convolution: 个特征,则这时候把输入层的所有点都与隐含层节点连接,则需要学习10^6个参数,这样的话在使用BP算法时速度就明显慢了很多. 所以后面就发展到了局部连接网络,也就是说每个隐 ...
- MYSQL中'TYPE=MyISAM'错误的解决方案
create 语句后面的TYPE=MyISAM TYPE=MyISAM 和 ENGINE=MyISAM 都是设置数据库存储引擎的语句 ,(老版本的MySQL使用TYPE而不是ENGINE(例如,TYP ...
- window.location.href和window.location.replace的区别
有3个html页面(.html, .html, .html). 进系统默认的是1.html ,当我进入2.html的时候, .html里面用window.location.replace(" ...