Redis配置,常用命令,数据结构
发布日期:2021-07-30 03:26:31 浏览次数:2 分类:技术文章

本文共 7187 字,大约阅读时间需要 23 分钟。

前言:本文为学习Redis总结之用。主要学习路径为官方文档(4.0.10),文中会夹杂官方概念及个人自身见解。

Redis简介: 

    Redis是一个开源(BSD许可)的高性能的分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件. 它支持多种类型的数据结构如字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。其功能包括主从复制,事务,订阅分发(sub/pub)等等。

Redis环境搭建:

    本文的环境为VM+Ubantu16.10+Redis4.0.10。

 

下载,解压,编译:

$ wget http://download.redis.io/releases/redis-4.0.10.tar.gz$ tar xzf redis-4.0.10.tar.gz$ cd redis-4.0.10$ make

二进制文件是编译完成后在src目录下,通过下面的命令启动Redis服务:

$ src/redis-server

你可以使用内置的客户端命令redis-cli进行使用:

$ src/redis-cliredis> set foo barOKredis> get foo"bar"

如果redis-server无法启动的话,那么就在redis的目录下运行sudo make install。

Redis的基础命令:

    在介绍常用数据类型之前,先来看看一些基本的Redis命令。

    1. select,Redis默认有16个数据库(redis.conf配置),类似数组下标从0开始即0表示第一个数据库。默认从第一个库开始使用。

   

    2.dbsize,可以查看当前使用的数据库的数据量。

   

    3.flushdb以及flushall,通过这flushdb命令,可以清空当前数据库中的数据。通过flushall可以清空所有数据库的数据。

   

   

Redis的数据类型及其命令:

Redis键Key:

    通过Redis的文档中可以看到key的命令有很多,下面将选出几个进行演示。

    Keys=Keys parttern,它支持使用正则表达式来获取所有符合条件的key。

    SCAN=SCAN cursor [MATCH pattern] [COUNT count] ,cursor表示当前的游标,默认从0开始,MATCH pattern跟前文的keys一样支持正则表达式默认*,而COUNT则表示要返回的个数,默认是10。SCAN是一个基于游标的迭代器这意味着命令每次被调用都需要使用上一次这个调用返回的游标作为该次调用的游标参数,以此来延续之前的迭代过程当SCAN命令的游标参数被设置为 0 时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0 的游标时, 表示迭代已结束。SCAN保证在一个完整的遍历过程中对于一个元素肯定会在某次迭代中返回出来。缺点是同一个元素可能会多次返回,此时去重的工作应该交给应用程序负责,此外如果一个元素是在迭代过程中被添加,或者移除。那么这个元素可能会返回也可能不会。

    Keys以及SCAN的选择:因为Redis是单线程的,当数据量越大使用Keys在性能上会变差并且会阻塞线程,这种情况下就可以选择使用SCAN。但是正如前文提到的,SCAN会出现重复数据,以及读不到数据的情况。所以需要在客户端做一些处理。

    DEL=DEL key[key....],删除一个或者多个key,如果不存则忽略。

    EXISTS=EXISTS key[key....],判断一个或者多个key是否存在,但是判断多个的时候只会显示共有一个存在,而不会详细的指出对应的key。

    MOVE=MOVE key db,把一个key从当前库移动到另一个库,如果key或者库不存在则不生效。

    TYPE=TYPE key,判断一个key的数据类型。

    EXPIRE=EXPIRE key seconds,设置key的国旗时间,超过时间后将会自动删除该key。

    TTL=TTL key,返回key还有多久过期。

Redis字符串String:

    SET=SET key value [EX seconds] [PX milliseconds] [NX|XX],存入一个键值对。后面几个为可选项:

    EX seconds – 设置键key的过期时间,单位时秒

    PX milliseconds – 设置键key的过期时间,单位时毫秒

    NX – 只有键key不存在的时候才会设置key的值

    XX – 只有键key存在的时候才会设置key的值

   GET=GET key,返回一个key的value,如果key不存在返回Nil,如果key的value不是String返回错误。因为GET只能处理String类型。

    APPEND=APPEND key value,如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。

    STRLEN=STRLEN key,返回key的string类型value的长度。如果key对应的非string类型,就返回错误。

    INCR=INCR key,对存储在指定key的数值执行原子的加1操作。如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为0。如果指定的key中存储的值不是字符串类型或者存储的字符串类型不能表示为一个整数,那么执行这个命令时服务器会返回一个错误。这个操作仅限于64位的有符号整型数据。

    DECR=DECR key,对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个操作最大支持在64位有符号的整型数字。

    INCRBY=INCRBY key increment,将key对应的数字加decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字。

    DECRBY=DECRBY key increment,将key对应的数字减decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字。

    GETSET=GETSET key value,获取当前key的value,并覆盖一个新的value值,GETSET可以和INCR一起使用实现支持重置的计数功能。举个例子:每当有事件发生的时候,一段程序都会调用INCR给key mycounter加1,但是有时我们需要获取计数器的值,并且自动将其重置为0。

    GETRANGE=GETRANGE key start end,这个命令在小于2.0的Redis版本中叫SUBSTR。 返回key对应的字符串value的子串,这个子串是由start和end位移决定的(两者都在string内)。可以用负的位移来表示从string尾部开始数的下标。所以-1就是最后一个字符,-2就是倒数第二个,以此类推。

    SETRANGE=SETRANGE key offset value,这个命令的作用是覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度。如果offset比当前key对应string还要长,那这个string后面就补0以达到offset。不存在的keys被认为是空字符串,所以这个命令可以确保key有一个足够大的字符串,能在offset处设置value。

    SETEX=SETEX key seconds value,设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期。这个命令等效于执行下面的命令:SET mykey value EXPIRE mykey seconds 。相比连续执行上面两个命令,它更快。

    SETNX=SETNX key value,将key设置值为value,如果key不存在,这种情况下等同SET命令。 当key存在时,什么也不做。SETNX是”SET if Not eXists”的简写。,因为当Redis当做缓存使用时,这个操作更加常用。

    MSET=key value[key value....],同时存入多组数据。如果key已经存在就替换新的value。

    MGET=key[key....],同时取出多个key的value,如果key不存在或者是类型不是String,则返回nil。

    MSETNX=key value[key value....],同时存入多组数据,只要有一个key存在则操作失败。

Redis列表List:

    LPUSH=LPUSH key value[value....],对一个列表存入数据,如果列表不存在则创建一个空的列表并把这些数据加到顶部。

    LPUSHX=PLUSHX key value,把value插入到列表的顶部,如果列表不存在则操作无效,返回0。

    RPUSH=RPUSH key value[value....],跟上面一样,只是把数据加到底部。

    RPUSHX=RPUSHX key value,把value插入到列表的尾部,如果列表不存在则操作无效,返回0.

    LRANGE=LRANGE key start stop,返回列表中指定的元素,-1表示最后一位,-2倒数第二位,以此类推。

    LPOP=LPOP key,移除并返回第一个元素,如果不存在返回nil。

    RPOP=RPOP key,移除并返回最后一个元素,如果不存在返回nil。

    LINDEX=LINDEX key index,根据index返回列表中对应的元素,从0开始表示第一个元素如果对应的索引没有值返回nil。

    LLEN=LLEN key,返回指定列表的长度,也就是key的数量。

    LREM=LREM key count value,删掉指定列表中count个value的值。如果count>0从顶部到底部开始删除count个value值,如果count<0从尾部到顶部开始删除count个value。如果count=0则删掉所有的value。

    ITRIM=ITRIM key start stop,截取指定列表的长度,由start跟stop确定范围。当start>stop列表变成空表,如果stop超出列表长度则默认从-1,最后一位开始。

    RPOPLUSH=RPOPLPUSH source destination,表示把soucr原列表中的最后一个元素移除并添加到目标列表中的顶部。

    LSET=LSET key index value,替换列表中对应索引的value值。

    LINSERT=LINSERT  key BEFORE|AFTER pivot value,在列表中的指定值pivot处的before或者after插入数据value。

Redis集合SET:

    SADD=SADD key member [member ...] ,向指定一个集合并添加一个或者多个数据。

    SCARD=SCARD key,返回集合中的元素总量。

    SDIFF=SDIFF key [key...],返回一个集合,或者多个集合的差集。

   SDIFFSTORE= SDIFFSTORE destination key [key ...] ,返回一个集合,或者多个集合的差集并把结果保存到目标集合destination。

    SINTER=SINTER key [key ...] ,返回一个集合,或者多个集合的交集。

    SINTERSTORE= SINTERSTORE destination key [key ...] ,返回一个集合,或者多个集合的交集并把结果保存到目标集合destination。

    SISMEMBER=SISMEMBER key member ,判断集合是否包含了指定的元素member。

    SMEMBERS=SMEMBER key,返回集合中所有的元素。

    SMOVE=SMOVE source destination member,把原集合source中的元素member删除并移动到目标集合destination。

    SPOP=SPOP key[count],随机删除集合中的一个或者多个元素。

    SRANDMEMBER=SRANDMEMBER key[count],随机返回一个或者多个集合中的元素。

    SREM=SREM key member [member ...],删除集合中的一个或者多个元素。

    SSCAN=同上SCAN。

    SUNION=SUNION key [key ...],返回一个集合,或者多个集合的并集

    SUNIONSTORE=SUNIONSTORE destination key [key ...],返回一个集合,或者多个集合的并集并把结果保存到目标集合destination。

Redis哈希Hash:

    HSET=HSET key field value,用来添加一组或者多组(根据格式来看应该是不支持多组,但是实验却可以添加)字段到HASH中。形式为<K ,<K,V>>。

   

    HMSET=HMSET key field value [field value ...],用来添加一组或者多组字段到HASH中。

    HSETNX=HSETNX key filed value,添加一组字段到HASH中,要求新添加的字段必须在HASH不存,否则无效。

    HGET=HGET key field ,返回HASH中对应的字段的值。

    HMGET=HMGET key field [field ...],获取一个或者多个HASH中对应字段的值

    HGETALL=key,返回HASH中所有的键值对,每个字段下面对应的是字段的值。

    HDEL=HDEL key field [field ...],删除HASH中一个或者多个字段。

    HEXISTS=HEXISTS key filed,判断HASH中是否存在filed。

    HINCRBY=HINCRBY key field increment,增加HASH中对应字段的值,该值必须是Integer类型。

    HINCRBYFLOAT=HINCRBYFLOAT key field increment,增加HASH中对应字段的值,该值必须是Float类型。

    HKEYS=HKEYS key,返回HASH中所有字段名。

    HLEN=HLEN key,返回HASH中包含的字段数量。

    HSCAN=同上SCAN。

    HSTRLEN=HSTRLEN key field,返回HASH中字段的值的长度。

    HVALS=HVALS key,返回HASH中所有字段的值。

Redis有序集合Zset(sorted set):

    ZADD=ZADD key [NX|XX] [CH] [INCR] score member [score member ...],表示往ZSET中添加一组或者多组数据,如果数据已经存在则更新score。格式为score member。其中member的顺序由score决定,如果两个member得score一样则按照字典中的顺序来排序。另外可以看到多了几个可选项,这些可选项只有在Redis版本3.0.2之后才会有。

    NX:只添加不存在的数据member,如果已经数据则不添加。

    XX:只更新存在的数据member,如果不存在则不添加。

    CH:修改返回值为发生变化的数据个数,不指定的情况下返回值为成功添加的数据个数。

    INCR:等于执行ZINCRBY,递增。此时只能一次操作一个数据。

    不指定可选参数:

   

    指定NX:

   

    指定XX跟CH:

   

    指定INCR:

   

    ZCARD=ZCARD key,返回有序集合中的数据个数

    ZCOUNT=ZCOUNT key min max,返回数据中score值在min以及max之间的个数,包含min以及max。

    ZINCRBY=ZINCRBY key increment member,为有序集合中的数据添加增量,如果数据不存在则新建一个数据。

    ZRANGE=ZRANGE key start stop [WITHSCORES],返回指定范围内的有序集合,规则同上一致,可选参数WITHSCORES表示是否返回scores,scores会显示在数据的下面。

    ZRANGEBYLEX=ZRANGEBYLEX key min max [LIMIT offset count],返回指定区间的有序集合数据按成员字典顺序排序,此外要保证集合中的score都是相同的,否则获得的结果并不准确。min 可以用-代替表示最小值,max用+号表示最大值。LIMIT以及offset,count用来实现分页。offset表示起始位置,count表示数量。

   

   。。。。剩下的不贴了~

   剩下的还有HyperLogLog,Geo,Pub/Sub就不贴了。有需要用直接参考官方文档。

 

 

转载地址:https://blog.csdn.net/u010890358/article/details/80753755 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Redis事务
下一篇:Mybatis工作流程及其原理与解析

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年03月01日 14时18分11秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

python格式化字符串总结_Python字符串处理方法总结 2021-06-24
python中true什么意思_python中的bool是什么意思 2021-06-24
jacobian 矩阵意义_Jacobian矩阵和Hessian矩阵的作用是什么? 2021-06-24
c++ jna 数据类型_JNA 使用总结 2021-06-24
python中如何遍历列表并将列表值赋予_python中如何实现遍历整个列表? 2021-06-24
apache php mysql架构图_Apache+PHP+MYSQL+Tomcat+JK架构设计技巧与应用实战 2021-06-24
xlnt库如何编译_最新mysql数据库源码编译安装。 2021-06-24
mysql 2003错误 10055_MYSQL无法连接---提示10055错误 2021-06-24
mysql redis缓存层_redis实现缓存的两种方式 2021-06-24
git 改local branch名字_用Git管理Latex写论文的工作流程 2021-06-24
mysql索引篇_MySQL索引篇 2021-06-24
有至少一个用MySQL_Mysql有用的面试题 2021-06-24
mysql select同时update_MySQLSELECT同时UPDATE同一张表 2021-06-24
mysql删除后数据库没变化_mysql之delete删除记录后数据库大小不变 2019-04-21
net mysql start3534_MySQL 5.7.14 net start mysql 服务无法启动-“NET HELPMSG 3534” 的奇怪问题... 2019-04-21
pta两个有序链表的合并_7-1 两个有序链表序列的合并 (20分) --- 内存问题再叙 2019-04-21
python问题描述怎么写_python写文件有时候写不进去怎么办 2019-04-21
qpython3安装lxml_在python的lxml中使用xml目录? 2019-04-21
java 幂取模_快速幂取模算法 2019-04-21
java build path jre_java-如何在安装了jre 7后为Jre 6设置路径? 2019-04-21