redis学习(六)
时间:2022-07-24
本文章向大家介绍redis学习(六),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
list(列表)
所有的list命令都是用l开头的,Redis不区分大小命令。把list当成 ,栈、队列、阻塞队列!
127.0.0.1:6666> lpush list one # 新建list并从左插入,先进先出。可以同时多个值。
(integer) 1
127.0.0.1:6666> lpush list two
(integer) 2
127.0.0.1:6666> lpush list 3
(integer) 3
127.0.0.1:6666> lrange list 0 -1 # 获取list中的所有值。
1) "3"
2) "two"
3) "one"
127.0.0.1:6666> lrange list 0 1
1) "3"
2) "two"
127.0.0.1:6666> rpush list 5 # 从右插入,进来的在最后面,如同一个链表。
(integer) 4
127.0.0.1:6666> lrange list 0 -1
1) "3"
2) "two"
3) "one"
4) "5"
# 移除,lpop,rpop。
127.0.0.1:6666> lrange list 0 -1
1) "3"
2) "two"
3) "one"
4) "5"
127.0.0.1:6666> lpop list #从左移除第一个。
"3"
127.0.0.1:6666> rpop list # 从右移除第一个。
"5"
127.0.0.1:6666> lrange list 0 -1
1) "two"
2) "one"
# lindex
127.0.0.1:6666> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6666> lindex list 0 # 通过下标获取值
"two"
127.0.0.1:6666> lindex list 1
"one"
127.0.0.1:6666>
# llen
127.0.0.1:6666> llen list # 获取list长度
(integer) 2
# lrem 移除指定的值。上面lpop,rpop。只能移除最后的。
127.0.0.1:6666> lpush list 111
(integer) 3
127.0.0.1:6666> lpush list 222
(integer) 4
127.0.0.1:6666> lpush list 333
(integer) 5
127.0.0.1:6666> lrange list 0 -1
1) "333"
2) "222"
3) "111"
4) "two"
5) "one"
127.0.0.1:6666> lrem list 1 one # 移除一个one
(integer) 1
127.0.0.1:6666> lrange list 0 -1
1) "333"
2) "222"
3) "111"
4) "two"
127.0.0.1:6666> lpush list 333
(integer) 5
127.0.0.1:6666> lrem list 1 two
(integer) 1
127.0.0.1:6666> lrange list 0 -1
1) "333"
2) "333"
3) "222"
4) "111"
127.0.0.1:6666> lrem list 2 333 # 移除两个333
(integer) 2
127.0.0.1:6666> lrange list 0 -1
1) "222"
2) "111"
127.0.0.1:6666> lrem list 9 000 # 移除不存在的值,返回0,移除9个000
(integer) 0
# trim修剪,list截断。
127.0.0.1:6666> rpush list "hello"
(integer) 1
127.0.0.1:6666> rpush list "hello1"
(integer) 2
127.0.0.1:6666> rpush list "hello2"
(integer) 3
127.0.0.1:6666> rpush list "hello3"
(integer) 4
127.0.0.1:6666> ltrim list 1 2 # 通过下标截取。
OK
127.0.0.1:6666> lrange list 0 -1 # 查看全部
1) "hello1"
2) "hello2"
# rpoplpush 移除列表最后一个元素,并将其加入新的列表中。
127.0.0.1:6666> lrange list 0 -1
1) "hello1"
2) "hello2"
3) "hello3"
127.0.0.1:6666> rpop list
"hello3"
127.0.0.1:6666> rpoplpush list mylist # 移除当前列表最后一个元素,将它加入新的列表中。
"hello2"
127.0.0.1:6666> lrange list 0 -1
1) "hello1"
127.0.0.1:6666> lrange mylist 0 -1 # 查看新的列表
1) "hello2"
# lset 将列表中指定下标替换成另一个值,更新操作。
127.0.0.1:6666> exists list # 判断key是否存在
(integer) 0
127.0.0.1:6666> lset list 0 item # 如果不存在,替换将会报错
(error) ERR no such key
127.0.0.1:6666> lpush list value1
(integer) 1
127.0.0.1:6666> lrange list 0 0
1) "value1"
127.0.0.1:6666> lset list 0 item # 更新成功。
OK
127.0.0.1:6666> lrange list 0 0
1) "item"
127.0.0.1:6666> lset list 1 other
(error) ERR index out of range
# linsert 将某个具体的value插入到列中某个元素的前面(before)或者后面(after)。
127.0.0.1:6666> rpush list "heloo"
(integer) 1
127.0.0.1:6666> rpush list "world"
(integer) 2
127.0.0.1:6666> linsert list before "world" "other" #在world前面增加
(integer) 3
127.0.0.1:6666> lrange list 0 -1
1) "heloo"
2) "other"
3) "world"
127.0.0.1:6666> linsert list after "world" "new" #在后面
(integer) 4
127.0.0.1:6666> lrange list 0 -1
1) "heloo"
2) "other"
3) "world"
4) "new"
小结
- 他实际上是一个链表,before Node after , left,right 都可以插入值
- 如果key 不存在,创建新的链表
- 如果key存在,新增内容
- 如果移除了所有值,空链表,也代表不存在!
- 在两边插入或者改动值,效率最高! 中间元素,相对来说效率会低一点~ 消息排队!消息队列(Lpush Rpop),栈( Lpush Lpop)!
set(集合)
set中的值,是不可重复的,数据是无序的。
127.0.0.1:6666> sadd set "hello"
(integer) 1
127.0.0.1:6666> sadd set "redis"
(integer) 1
127.0.0.1:6666> sadd set "cuixiaoyan" # 添加元素到set中。
(integer) 1
127.0.0.1:6666> smembers set # 查看set中所有值。
1) "cuixiaoyan"
2) "hello"
3) "redis"
127.0.0.1:6666> sismember set hello # 判断set中是否有某个值
(integer) 1
127.0.0.1:6666> sismember set he
(integer) 0
127.0.0.1:6666> scard set # 获取set里值的数量
(integer) 3
# 删除 srem
127.0.0.1:6666> srem set "hello" # 删除
(integer) 1
127.0.0.1:6666> scard set
(integer) 2
127.0.0.1:6666> smembers set
1) "cuixiaoyan"
2) "redis"
# set不重复集合,抽随机(抽奖等等)。
127.0.0.1:6666> smembers set
1) "woshi"
2) "cuixiaoyan"
3) "nihao"
4) "redis"
127.0.0.1:6666> srandmember set # 抽取一个
"woshi"
127.0.0.1:6666> srandmember set
"redis"
127.0.0.1:6666> srandmember set 2 # 抽取两个
1) "nihao"
2) "redis"
# 删除指定的key,随机删除key。
127.0.0.1:6666> spop set # 删除
"redis"
127.0.0.1:6666> smembers set
1) "woshi"
2) "cuixiaoyan"
3) "nihao"
# 将指定的值,移动到另一个set中。
127.0.0.1:6666> sadd set "ada" "asdad" # 添加多个值
(integer) 2
127.0.0.1:6666> smembers set # 查看所有值
1) "ada"
2) "woshi"
3) "cuixiaoyan"
4) "nihao"
5) "asdad"
127.0.0.1:6666> smove set myset "woshi" # 移动某个值
(integer) 1
127.0.0.1:6666> smembers set
1) "nihao"
2) "ada"
3) "cuixiaoyan"
4) "asdad"
127.0.0.1:6666> smembers myset
1) "woshi"
# 数字类集合
127.0.0.1:6666> sadd set1 a b c d e f
(integer) 6
127.0.0.1:6666> sadd set2 q w e r t y
(integer) 6
127.0.0.1:6666> sdiff set1 set2 # 差集
1) "a"
2) "f"
3) "c"
4) "b"
5) "d"
127.0.0.1:6666> sinter set1 set2 # 交集
1) "e"
127.0.0.1:6666> sunion set1 set2 # 并集
1) "y"
2) "e"
3) "d"
4) "b"
5) "a"
6) "f"
7) "w"
8) "t"
9) "q"
10) "c"
11) "r"
微博,A用户将所有关注的人放在一个set集合中!将它的粉丝也放在一个集合中!
共同关注,共同爱好,二度好友,推荐好友!(六度分割理论)
- 【框架】为降低机器学习开发者门槛,苹果发布了Turi Create框架
- 新闻数据库分表案例
- 建立智能的解决方案:将TensorFlow用于声音分类
- Plugin Hook 设计与实现
- 数据与应用程序间通信·UDP Socket
- Java 数据类型转换
- Spring boot with Scheduling
- Spring Properties 文件读取
- 【学术】你真的知道什么是随机森林吗?本文是关于随机森林的直观解读
- Spring boot 将 Session 放入 Redis
- 【教程】估算一个最佳学习速率,以更好地训练深度神经网络
- SNS 数据库设计
- CentOS7 下 MySQL 5.7 重置root密码
- 通过简单的线性回归理解机器学习的基本原理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 教你设计一个超牛逼的本地缓存!
- Flutter延时任务、Flutter通过Future与Timer实现延时任务
- DDIA 笔记
- 工作流和状态机
- CentOS 6.x 搭建:Headless Chrome + ChromeDriver + Selenium的爬虫环境系统
- 聊聊dubbo-go的registryAwareCluster
- 同样是空值,null和undefined有什么异同?
- 强大到没朋友的mysql-shell及插件
- android JavaPoet记录
- JavaScript里的分号,你加还是不加?
- 技术干货 | Docker 容器逃逸案例汇集
- 一张千万级别数据的表想做分页,如何优化?
- 一文学会爬虫技巧
- 为什么机器学习应用交易那么难(中)
- 消息队列的消费幂等性如何保证