Redis入门到精通-Redis数据类型

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

登录Redis数据库

[root@localhost bin]# /usr/local/redis/bin/redis-cli

String类型

​ String 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字,是包含很多种类型的特殊类型,并且是二进制安全的。比如序列化的对象进行存储,比如一张图片进行二进制存储,比如一个简单的字符串,数值等等。

常用命令

​ 设值:set name zhangsan (说明:多次设置name会覆盖)

setnx name lisi: (not exist) 如果name不存在,则设值。如果name存在,则不设值并返回0;

setex name 10 lisi :(expired) 设置name的值为lisi,过期时间为10秒,10秒后name清除(key也清除)

setrange string range value 替换字符串

​ 例如:>set address abcdefg

​ >setrange address 2 yy 后address的值为abyyefg (从第3个字符开始替换为yy,后面的由原来

​ 的字符补齐)。

​ 取值: get name

​ 删值:del name

批量写:mset k1 v1 k2 v2 ...

​ 批量读:mget k1 k2 k3

​ 一次性设值和读取(返回旧值,写上新值):getset name lily

​ 数值类型自增减:incrdecrincrbydecrby

127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> incr a
(integer) 2
127.0.0.1:6379> incr a
(integer) 3
127.0.0.1:6379> get a
"3"
127.0.0.1:6379> desc a
(error) ERR unknown command 'desc'
127.0.0.1:6379> decr a
(integer) 2
127.0.0.1:6379> get a
"2"
127.0.0.1:6379> incrby a 4
(integer) 6
127.0.0.1:6379> incrby a 2
(integer) 8
127.0.0.1:6379> decrby a 4
(integer) 4

​ 字符串拼接:append name abc :在name=lisi原有基础上拼接为 lisiabc

​ 字符串长度:strlen name :返回name的字符长度

Hash类型

​ Hash类型是String类型的field和value的映射表,或者说是一个String集合。它特别适合存储对象,相比较而言,将一个对象类型存储在Hash类型要存储在String类型里占用更少的内存空间,并方整个对象的存取。

常用命令

​ 设值:hset hashname field value(hset是设值命令,hashname是集合名字,field是字段名,value是值)

​ 例子:>hset user1 name zhangsan

​ >hset user1 age 23

​ 取值:hget hashname field

​ 批量设置:hmset hashname field1 value1 field2 value2 ….

​ 例子:>hmset user2 name lisi age 22

​ 批量取值:hmget hashname field1 field2 ...

​ hsetnx:和setnx大同小异

​ 集合递增和递减:hincrby和hdecrby

127.0.0.1:6379> hgetall user1
1) "age"
2) "23"
3) "name"
4) "zhangsan"
127.0.0.1:6379> hincrby user1 age 2
(integer) 25
127.0.0.1:6379> hgetall user1
1) "age"
2) "25"
3) "name"
4) "zhangsan"

​ hexists:是否存在key,如果存在返回,不存在返回0

127.0.0.1:6379> hexists user1 age
(integer) 1
127.0.0.1:6379> hexists user1 sex
(integer) 0

​ 删除:hdel 删除指定的hash的field

127.0.0.1:6379> hdel user1 name
(integer) 1
127.0.0.1:6379> hgetall user1
1) "age"
2) "23"

​ hlen:返回hash集合里的所有的键数值(size)

127.0.0.1:6379> hlen user1
(integer) 2

​ hkeys 返回hash里所有的字段

127.0.0.1:6379> hkeys user1
1) "name"
2) "age"

​ hvals返回hash的所有value

127.0.0.1:6379> hvals user1
1) "zhangsan"
2) "23"

​ hgetall返回hash里所有的key和value

127.0.0.1:6379> hgetall user1
1) "name"
2) "zhangsan"
3) "age"
4) "23"

List类型

​ List类型是一个链表结构的集合,其主要功能有push、pop、获取元素等。更详细的说,List类型是一个双端链表的节后,我们可以通过相关的操作进行集合的头部或者尾部添加和删除元素,List的设计非常简单精巧,即可以作为栈,又可以作为队列,满足绝大多数的需求。

常用命令

​ lpush:从头部加入元素(栈,先进后出)

127.0.0.1:6379> lpush list1 hello
(integer) 1
127.0.0.1:6379> lpush list1 world
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "world"
2) "hello"

​ rpush:从尾部加入元素(队列,先进先出)

127.0.0.1:6379> rpush list1 java
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "world"
2) "hello"
3) "java"

​ linsert:插入元素

127.0.0.1:6379> linsert list1 before hello php
(integer) 4
127.0.0.1:6379> lrange list1 0 -1
1) "world"
2) "php"
3) "hello"
4) "java"
127.0.0.1:6379> linsert list1 after hello php
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "world"
2) "php"
3) "hello"
4) "php"
5) "java"

​ lset:将制定下表的元素替换掉

127.0.0.1:6379> lset list1 0 k
OK
127.0.0.1:6379> lrange list1 0 -1
1) "k"
2) "php"
3) "hello"
4) "php"
5) "java"

​ lrem:删除元素,移除n个,返回删除的个数n

127.0.0.1:6379> lrem list1 1  php
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "k"
2) "hello"
3) "php"
4) "java"
127.0.0.1:6379> lrem list1 1  php
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "k"
2) "hello"
3) "java"

​ ltrim:保留制定key的值范围内的数据

127.0.0.1:6379> rpush list2 1
(integer) 1
127.0.0.1:6379> rpush list2 2
(integer) 2
127.0.0.1:6379> rpush list2 3
(integer) 3
127.0.0.1:6379> rpush list2 4
(integer) 4
127.0.0.1:6379> lrange list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> ltrim list2 2 -1
OK
127.0.0.1:6379> lrange list2 0 -1
1) "3"
2) "4"

​ lpop:从list的头部删除元素,并返回删除元素。

127.0.0.1:6379> rpush list3 a
(integer) 1
127.0.0.1:6379> rpush list3 b
(integer) 2
127.0.0.1:6379> rpush list3 c
(integer) 3
127.0.0.1:6379> rpush list3 d
(integer) 4
127.0.0.1:6379> lrange list3 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> lpop list3
"a"
127.0.0.1:6379> lrange list3 0 -1
1) "b"
2) "c"
3) "d"

​ rpop:从list的尾部删除元素,并返回删除元素

127.0.0.1:6379> rpop list3
"d"
127.0.0.1:6379> lrange list3 0 -1
1) "b"
2) "c"

​ 可以基于List实现MQ。

​ rpoplpush list1 list2:从list1尾部删除元素,并将被移除的元素添加到list的头部,返回被移除的元素。

127.0.0.1:6379> lrange list2  0 -1
1) "3"
2) "4"
127.0.0.1:6379> rpoplpush list2 list4
"4"
127.0.0.1:6379> lrange list2  0 -1
1) "3"
127.0.0.1:6379> lrange list4  0 -1
1) "4"
127.0.0.1:6379> rpoplpush list2 list4
"3"
127.0.0.1:6379> lrange list2  0 -1
(empty list or set)
127.0.0.1:6379> lrange list4  0 -1
1) "3"
2) "4"

​ llen:返回元素个数

127.0.0.1:6379> llen list1
(integer) 3
127.0.0.1:6379> llen list3
(integer) 2

​ lindex:返回名称为key的list中index位置的元素

127.0.0.1:6379> lrange list3 0 -1
1) "b"
2) "c"
127.0.0.1:6379> lindex list3 0
"b"
127.0.0.1:6379> lindex list3 1
"c"
127.0.0.1:6379> lindex list3 2
(nil)

Set类型

​ set集合是string类型的无序集合,set是通过hashtable实现的,对集合我们可以取交集、并集、差集。

常用命令

​ sadd:向名称为key的set中添加元素,set集合不允许重复元素。

​ smembers:查看set集合中的元素。

127.0.0.1:6379> sadd set1 a
(integer) 1
127.0.0.1:6379> sadd set1 b
(integer) 1
127.0.0.1:6379> sadd set1 a
(integer) 0
127.0.0.1:6379> smembers set1
1) "a"
2) "b"

​ srem:删除set集合的元素

127.0.0.1:6379> srem set1 a
(integer) 1
127.0.0.1:6379> smembers set1
1) "b"

​ spop:随机返回删除的key

127.0.0.1:6379> sadd set1 a
(integer) 1
127.0.0.1:6379> sadd set1 c
(integer) 1
127.0.0.1:6379> sadd set1 d
(integer) 1
127.0.0.1:6379> smembers set1
1) "a"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> spop set1
"d"
127.0.0.1:6379>

​ sdiff:返回两个集合的不同元素(哪个集合在前面就以哪个集合为标准)

127.0.0.1:6379> sadd set2 a
(integer) 1
127.0.0.1:6379> sadd set2 b
(integer) 1
127.0.0.1:6379> sadd set2 c
(integer) 1
127.0.0.1:6379> sadd set3 a
(integer) 1
127.0.0.1:6379> sadd set3 d
(integer) 1
127.0.0.1:6379> sdiff set2 set3
1) "b"
2) "c"
127.0.0.1:6379> sdiff set3 set2
1) "d"
127.0.0.1:6379>

​ sdiffstore:将返回的不同元素,存储到另一个集合里

​ sdiffstore set4 set2 set3 将set2 set3的比较结果保存到set4中

127.0.0.1:6379> sdiff set2 set3
1) "c"
2) "b"
127.0.0.1:6379> sdiffstore set4 set2 set3
(integer) 2
127.0.0.1:6379> smembers set4
1) "c"
2) "b"
127.0.0.1:6379>

​ sinter:取交集

​ sinterstore:取交集后保存

​ sunion:取并集

​ sunionstore:取并集后保存

127.0.0.1:6379> smembers set1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> smembers set3
1) "a"
2) "d"
127.0.0.1:6379> sinter set1 set3
1) "a"
127.0.0.1:6379> sunion set1 set3
1) "a"
2) "c"
3) "b"
4) "d"
127.0.0.1:6379> sinterstore set5 set1 set3
(integer) 1
127.0.0.1:6379> sunionstore set6 set1 set3
(integer) 4
127.0.0.1:6379> smembers set5
1) "a"
127.0.0.1:6379> smembers set6
1) "a"
2) "c"
3) "b"
4) "d"

​ smove:从一个set集合移动到另一个set集合里

​ scard:查看集合里的元素个数

​ sismember:判断某个元素是否为集合中的元素,是,返回1。不是,返回0。

​ srandmember:随机返回一个元素

127.0.0.1:6379> smembers set2
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> smembers set3
1) "a"
2) "d"
127.0.0.1:6379> smove set2 set3 c
(integer) 1
127.0.0.1:6379> smembers set2
1) "a"
2) "b"
127.0.0.1:6379> smembers set3
1) "a"
2) "c"
3) "d"
127.0.0.1:6379> scard set2
(integer) 2
127.0.0.1:6379> scard set3
(integer) 3
127.0.0.1:6379> sismember set2 a
(integer) 1
127.0.0.1:6379> sismember set2 c
(integer) 0
127.0.0.1:6379> srandmember set2
"b"
127.0.0.1:6379> srandmember set2
"a"
127.0.0.1:6379> srandmember set2
"a"

Zset类型

​ 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

常用命令

​ zadd:向有序集合中添加一个元素,该元素如果存在,则更新顺序,如果分值相同元素不同,会同事存在两个元素。

​ zadd key score1 member1 score2 member2...

127.0.0.1:6379> zadd zset1 1 a 2 b 4 d 3 c
(integer) 4
127.0.0.1:6379> zrange zset1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
7) "d"
8) "4"
127.0.0.1:6379> zadd zset1 1.5 x   //插入1.5分的 会根据分数排序
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1 withscores1) "a"2) "1"3) "x"4) "1.5"5) "b"6) "2"7) "c"8) "3"9) "d"
10) "4"
127.0.0.1:6379> zadd zset1 2 y   //插入分值为2,但元素为新元素y
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1 withscores   1) "a"2) "1"3) "x"4) "1.5"5) "b"                          //两个分值为2的b和y都会存在6) "2" 7) "y"                        8) "2"9) "c"
10) "3"
11) "d"
12) "4"
127.0.0.1:6379> zadd zset1 5 b  //重新插入重复元素b,分值发生了变化,移除之前的元素,重新按照新的分值排序
(integer) 0
127.0.0.1:6379> zrange zset1 0 -1 withscores1) "a"2) "1"3) "x"4) "1.5"5) "y"6) "2"7) "c"8) "3"9) "d"
10) "4"
11) "b"
12) "5"

​ zrem :删除zset名称key中的member元素

​ zrem zset member

127.0.0.1:6379> zrange zset1 0 -1 withscores1) "a"2) "1"3) "x"4) "1.5"5) "y"6) "2"7) "c"8) "3"9) "d"
10) "4"
11) "b"
12) "5"
127.0.0.1:6379> zrem zset1 a
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1 withscores1) "x"2) "1.5"3) "y"4) "2"5) "c"6) "3"7) "d"8) "4"9) "b"
10) "5"

​ zrank 返回有序集合中指定成员的索引(从小到大排序)

​ zrevrank 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

127.0.0.1:6379> zrange zset1 0 -1 withscores1) "x"2) "1.5"3) "y"4) "2"5) "c"6) "3"7) "d"8) "4"9) "b"
10) "5"
127.0.0.1:6379> zrank zset1 d  
(integer) 3  //第4个位置
127.0.0.1:6379> zrevrank zset1 d  
(integer) 1  //第2个位置

​ zcard 返回集合里所有元素的个数

​ zcount 返回集合中score在给定区间中的数量

127.0.0.1:6379> zrange zset1 0 -1 withscores1) "x"2) "1.5"3) "y"4) "2"5) "c"6) "3"7) "d"8) "4"9) "b"
10) "5"
127.0.0.1:6379> zcard zset1
(integer) 5
127.0.0.1:6379> zcount zset1 1 3
(integer) 3

​ zincrby key increment member: 有序集合中对指定成员的分数加上增量 increment

​ zrangebyscore key min max [WITHSCORES] [LIMIT] :通过分数返回有序集合指定区间内的成员

​ zremrangebyrank key start stop :移除有序集合中给定的排名区间的所有成员

​ zremrangebyscore key min max:移除有序集合中给定的分数区间的所有成员

转载于:https://my.oschina.net/u/3712726/blog/1554489

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

装机之 BIOS、EFI与UEFI详解

在我们的电脑中,都有一块黑色的小芯片。但是请千万不要小看它,如果它损坏或者数据错误乱套的话,恭喜,如果不会“救回”这个小芯片,那么这台电脑可以挂闲鱼卖零件了…… 这个小芯片是什么呢?对,…

php 模板 php + mysql + myodbc,连接MySQL数据库在ASP中,就用MyODBC

我们大家都知道ASP与MySQL连接现在应用最为广泛的两种办法是,一是使用组件,经常使用的是MySQL(和PHP搭配之最佳组合)X,可惜价格很贵。另一个就是用MyODBC来连接MySQL数据库,下面我们就来看看第二种方式。 试验的平台: …

Android Gradle和Gradle插件区别

2019独角兽企业重金招聘Python工程师标准>>> 一、引言 1、什么是Gradle?什么是Gradle插件? build.gradle中依赖的classpath com.android.tools.build:gradle:2.1.2和gradle-wrapper.properties中的distributionUrlhttps\://services.gradle.org/distributions/gra…

装机之MBR和GPT

MBR分区 MBR的意思是“主引导记录”,是IBM公司早年间提出的。它是存在于磁盘驱动器开始部分的一个特殊的启动扇区。这个扇区包含了已安装的操作系统系统信息,并用一小段代码来启动系统。如果你安装了Windows,其启动信息就放在这一段代码中—…

实验报告3

中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告 实验三 密码破解技术 学生姓名 陆圣宇 年级 2014 区队 三 指导教师 高见 信息技术与网络安全学院 2016年11月7日 实验任务总纲 2016—2017 学年 第 一 学期 一、实验目的 1&am…

装机之windows10和ubuntu双系统

制作系统U盘 下载Ubuntu16.04 我们首先去Ubuntu的官网下载一个Ubuntu16.04的iso镜像文件。当然里面也有优麒麟,其实就是把Ubuntu16.04汉化了一下,个人推荐安装Ubuntu16.04 体验上可能好一些。 利用软碟通制作 不会的可以查看此教程https://blog.csdn…

matlab var std,Matlab var std cov 函数解析

在Matlab中使用var求样本方差,使用std求标准差!首先来了解一下方差公式:p [-0.92 0.73 -0.47 0.74 0.29; -0.08 0.86 -0.67 -0.52 0.93]p -0.9200 0.7300 -0.4700 0.7400 0.2900-0.0800 0.8600 -0.6700 -0.5200 0.9300…

Java中什么是匿名对象,空参构造方法输出创建了几个匿名对象,属性声明成static...

package com.swift; //使用无参构造方法自动生成对象,序号不断自增 public class Person {private static int count; //如果在定义类时,使用的是静态的属性,则得到的结果是不同的。count生命周期长,与类相同public int id;public…

装机之制作系统U盘

工具:UltraISO(软碟通),iso镜像 在制作系统U盘的时候我们需要去下一个软件——UltraISO(软碟通),这个自己去百度搜索一下应该就能出来的。下载安装完以后,我们打开软碟通的界面打开…

李飞飞:为什么计算机视觉对机器人如此重要?

根据Guide2Research的排名,IROS是计算机视觉领域排名第四的学术会议,前三名分别为CVPR、ICCV、ECCV。计算机视觉在机器人的发展史中起着非常重要的作用,与之相关的“感知”也正是历年IROS大会上的重要内容,随着机器人研究的发展和…

linux 命令 which whereis locate find

0、概述 * which:在PATH变量指定的路径中,搜索与指定名字匹配的系统命令的位置,并且返回第一个搜索结果。 * whereis:搜索与指定名字匹配的二进制文件、源文件和帮助手册文件所在的路径。二进制文件(参数-b&…

python 转 exe -- py2exe库实录

本文基于windows 7 python 3.4 把python程序打包成exe,比较好用的库是py2exe 其操作步骤是: --> 编写python程序 --> 再额外编写一个导入了py2exe的python脚本(不妨如:setup.py)存在同一目录下 --> 运行这个脚本,打包生成的exe文件…

如何让电脑成为看图说话的高手?计算机视觉顶会ICCV论文解读

ICCV,被誉为计算机视觉领域三大顶级会议之一。作为计算机视觉领域最高级别的会议之一,其论文集代表了计算机视觉领域最新的发展方向和水平。阿里巴巴在今年的大会上有多篇论文入选,本篇所解读的论文是阿里iDST与多家机构合作的入选论文之一&a…

php汽车找车位,遭遇到车多车位少 教你如何快速找到停车位

[摘要]车主们大多时间会穿梭在市区,到了目的地后那就先找停车位,现在市区寸土寸金,一个停车位面积要占几平米呢,所以停车位基本是不够用的。下面和大家聊聊怎么找合适的停车位。车主们大多时间会穿梭在市区,去商场购物…

Python 框架 之 Scrapy 爬虫(二)

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取)所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Ass…

lamp和php,[LAMP]Apache和PHP的结合

在LAMP架构中,Apache通过PHP模块与Mysql建立连接,读写数据。那么配置Apache和PHP结合的步骤是怎么操作的呢?1、修改http.conf文件[rootjuispan ~]# cat /usr/local/apache2.4/conf/httpd.conf......#ServerName......AllowOverride noneRequi…

云电脑是什么_云电脑和我们现在平时用的电脑有什么区别?

🍀温馨提示🍀公众号推送改版,为了不让您错过【掌中IT发烧友圈】每天的精彩推送,切记将本号设置星标哦!~01云电脑,是5G云服务时代的电脑新概念,是电脑的新的一种形态。从具体操作使用上来讲&…

PHP爬取历史天气

PHP爬取历史天气 PHP作为宇宙第一语言&#xff0c;爬虫也是非常方便&#xff0c;这里爬取的是从天气网获得中国城市历史天气统计结果。 程序架构 main.php <?phpinclude_once("./parser.php");include_once("./storer.php");#解析器和存储器见下文$par…

Python 第三方库之docx

日常上官网 https://python-docx.readthedocs.io/en/latest/ 一、安装 pip install python-docx 二、写入word word 中主要有两种用文本格式等级&#xff1a;块等级&#xff08;block-level&#xff09;和内联等级&#xff08;inline-level&#xff09;word 中大部分内容都…

Unity AI副总裁Danny Lange:如何用AI助推游戏行业?

本文讲的是Unity AI副总裁Danny Lange&#xff1a;如何用AI助推游戏行业&#xff1f; &#xff0c;10月26日&#xff0c;在加州山景城举办的ACMMM 2017大会进入正会第三天。在会上&#xff0c;Unity Technology负责AI与机器学习的副总裁Danny Longe进行了题为《Bringing Gaming…