Redis学习笔记-基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoxiao20121314/article/details/82831650

1.什么是redis?

Redis是Remote Dictionary Server(远程字典服务器)的缩写,以字典的形式存储数据,允许其他应用通过TCP协议读写字典中的内容。redis是一种高性能的基于键值对的数据库。

2.redis支持的数据类型

字符串类型、散列类型、集合类型、有序集合、列表类型。

3.与mysql数据库的区别

Mysql是关系型数据库,使用二维表存储数据;redis是一种基于键值对的数据库;mysql支持多线程高并发,redis不支持;redis将数据存储在内存中,而mysql存储在硬盘中,所以redis的处理速度较快,可以通过持久化将数据存储到硬盘中。Redis可以设置键的过期时间,过期后自动(惰性)清除键。

4.数据类型介绍

1)字符串类型:是最基本的数据类型,可以存储任何形式的字符串,包括二进制数据。

2)散列类型:存储了字段和字段值的映射,但字段只能是字符串,不支持其他类型,即散列不能嵌套其他数据类型,一个散列键可以包含至多2的32次幂减1个字段。

3)列表类型:可以存储一个有序的字符串列表,常见的操作是向列表的两端添加元素,或者获取列表的某一个片段,列表类型的内部使用双向链表实现的,所以向列表的两端添加元素的时间复杂度为O(1),因此越靠近两端的元素获取的速度越快。

4)集合类型:在集合中每一个元素均不同,且没有顺序,一个集合类型(set)键可以存储至多2的32次幂减1个字符串。集合与列表的区别在于列表是有序的,元素可以相同;而集合中元素是无序的,元素必须互不相同。

5)有序集合:在集合的基础上每一个元素都关联了一个分数,虽然集合中每一个元素都是不同的,但他们的分数确实可以相同的。

5.有序集合与列表的异同点

有序集合与列表均是有序的,而且二者均可以获得某一范围的元素;列表是通过双向链表实现的,所以在获取两端的元素时很快,当元素增多时,操作的速度会明显下降。有序集合是使用散列表和跳跃表实现的,所以即使读取位于中间部分的数据速度也很快,时间复杂度为O(logN);列表中不能简单的调整某一个元素的位置,但有序集合可以(通过改变分数的值实现);有序集合要比列表更耗内存。

6.常用命令-1

1)启动redis运行redis-server命令即可,redis服务器的默认端口是6379,可以通过--port自定义通信的端口,例如:redis-server --port 6399

2)通过运行redis安装目录中的utils文件夹下的redis_init_script脚本启动redis,例如:/etc/init.d/redis_端口号 start启动redis的服务,随后执行sudo update-rc.d redis_端口号 defaults。

3)停止redis的命令:redis-cli SHUTDOWN此命令会先断开所有的客户端,然后按照配置文件执行持久化后退出

4)通过命令行登录redis,命令如下:redis-cli –h 127.0.0.1 –p 6399,其中-h指定了登录的主机,-p指定连接的端口

5)通常在连接前现确定一下通信是否正常,命令如下redis-cli PING,如果连接正常,则返回PONG;或者在登陆后再执行ping命令,返回pong则表明通信正常。

6)设置redis的相关选项,使用同名参数覆盖文件中的原有设置,例如redis-server /path/to/redis.conf –loglevel warning

7)可以通过运行的redis中输入CONFIG SET命令在不重复启动redis的情况下,动态修改部分配置,例如:CONFIG SET loglevel warning;但要注意的是并不是所有的设置均可通过CONFIG SET来更改。

7.redis执行结果返回值分析

1)状态信息:当redis命令执行后返回执行的状态信息,例如执行PING命令时回复PONG

2)错误回复:错误回复以error开头,例如ERRORCOMMEND,并在后面追加错误的具体信息。

3)整数回复:例如一些操作键值的命令(INCR)或者查看数据库中的键的数量(DBSIZE)的命令会返回整数,返回信息通常为:(interger)开头+数字

4)字符串回复:当查看某一个字符串类型键的指定返回值,返回值以双引号括起来,特殊情况会返回空(nil)。例如执行GET 键名。

5)多行字符串:当查询的键是非字符串时,返结果以一个序列号开头的多行字符串,例如1)“”2)“”


8.对键值常用的操作命令

1)字符串类型键的常用命令

(1)查看当前使用的数据字典中的所有键值:KEY  *;

(2)设置键的名字并赋值SET 键名 值,例如:SET FIRST 1;

(3)判断数据字典中是否存在某一个键命令:EXISTS 键名,例如:EXISTS FIRST;

(4)删除数据字典中的指定的键值命令格式为DEL 键名,如果删除成功返回1否则返货回0,例如:DEL FIRST;

(5)查看指定键的类型命令格式为TYPE 键名,例如:TYPE FIRST;

(6)获取某一个键的值命令格式,GET 键名,此命令当键为空时返回空,不为空则返回键的值,例如:GET FIRST

(7)递增整型键的值命令格式为INCR 键名,此种形式的命令每一次只增加1,例如:INCR FRST

(8)增加任意数量的命令格式 INCRBY 键名 数值,例如:INCRBY FIRST 6

(9)相对的减少键值的命令也有两种形式:DECR 键名/DECR 键名 数量

(10)增加指定键值的浮点数值,命令个数如下INCRBYFLOAT 键名 键值,例如:INCRBYFLOAT FIRST 2.7

(11)向尾部增加字符命令格式:APPEND 键名 字符串,返回的结果为改变后改键的总长度,例如:APPEND FIRST “ HELLO WORLD!”

(12)获取字符串的长度命令格式为:STRLEN      键名,例如:STRLEN FIRST

(13)同时设置多个键的值的命令格式为MSET 键1 值1 键2 值2….,例如:MSET First 1 second 2;获取多个指定键的值的命令格式为MGET 键1 键2…例如MGET First second

(14)位操作命令:

GETBIT 键名 第几位      // GETBIT FIRST 6

SETBIT键名 第几位 值           //SETBIT FIRST 6 1

BITCOUNT 键名 开始 结束  //获取指定范围内1的个数BITCOUNT FIRST 0 10

BITOP 操作 目标键名 源键名序列//对多个键做位运算将结果存储在目标键名中,例如BITOP OR res fir second

2)散列类型键的常用命令

(1)赋值命令:HSET 键名 域名 值,例如:HSET test first 1

(2)获取键的指定域名的值:HGET 键名 域名,例如:HGET test first

(3)设置多个域的值HMSET 键名 域名1 值1 域名2 值2,例如HMSET test first1 second 2

(4)获取多个域的值HMGET 键名 域名1 域名2….例如HMGET test first second;也可使用HGETALL 键名 命令获取键名的所有域值

(5)判断字段是否存在HEXISTS 键名 域名,存在返回1否则返回0,例如:HEXISTS test first

(6)当字段不存在的时候自动创建并赋值:HSETNX 键名 域名 值//HSETNX test third 4

(7)增加数字HINCRBY 键名 域名 值// HINCRBY test first 2

(8)删除字段HDEL 键名 域名1 域名2…//HDEL test first second

(9)只获取字段名和字段值HKEY 键名;HVALS 键名//HKEY test,HVALS test

(10)获取字段的数量HLEN 键名//HLEN test

3)列表类型键的常用命令

(1)向列表的两端添加元素,操作后返回列表的长度LPUSH/RPUSH 键名 值1 值2…//LPUSH/RPUSH test 1 2 3 4

(2)从列表的两端弹出元素,返回结果为弹出的元素LPOP/RPOP 键名 //LPOP/RPOP test

(3)获取列表中元素的个数当键不存在时返回0,否则返回键的个数,LLEN 键名//LLEN test

(4)获取列表的片段,返回范围区间内的元素LRANGE 键名 开始 截止位置;如果开始位置或者截止位置为负数时,表示的区间为列表的倒数第几位的区间 // LRANGE test 0 3

(5)删除列表中的指定值LREM 键名 个数 值//删除列表中指定值n个元素,返回值为被操作的元素个数,当个数大于0表示从左侧开始,小于0表示从右侧开始删除绝对值个值,当个数为0时,删除所有值为指定值的元素,例如:LREM first -4 1

(6)获取指定索引的元素值,如果索引是数组的情况下,索引从0开始,LINDEX 键名 索引值//LINDEX test 1

(7)设置指定索引的元素值,命令格式为LSET key index value

(8)只保留列表的指定范围,删除指定范围外的元素,LTRIM 键名 start end         // LTRIM test start end

(9)向列表中插入元素 LINSERT key BEFORE|AFTER pivot value。此命令会在列表中从左到右查找值为pivot的元素,然后根据BEFORE|AFTER参数决定将value值插在哪。

(10)将一个元素由一个列表转移到另一个列表,RPOPLPUSH source destination

4)集合类型键的常用命令

(1)增加元素 SADD key member [member2 …..](集合中的间不能重复,所以遇见已有的键就会跳过,没有的会自动创建,操作返回键入的键的个数)

(2)删除元素:SREM KEY member [member2 …..],返回值为操作的个数

(3)获得集合中所有的key:SMEMBERS KEY

(4)判断集合中是否存在该key:SISMEMBER KEY MEMBER

(5)集合间的差集:SDIFF setA setB setC

(6)集合交集:SINTER setA setB setC

(7)集合间的并集:SUNION setA setB setC

(8)集合中元素的个数:SCARD key

(9)求集合间的差集并将结果存储:SDIFFSTORE destination key [key…]

(10)求集合间的交集并将结果存储:SINTERSTORE destination key [key…]

(11)从集合中弹出一个元素:SPOP key

(12)求集合间的并集并将结果存储:SUNIONSTORE destination key

(13)随机获得集合中的元素:SRANDMEMBER key [count]//使用count指定一次随机获得多个元素,count的使用方法:

(14)整数:随机获取count个不重复的元素

(15)负数:获取|count|个元素,可能重复

5)有序集合类型键的常用命令

(1)ZADD key score member [score member…]//如果添加的元素已经存在,则使用新的分数覆盖原分数

(2)获得元素的分数:ZSCORE key member

(3)获得某一个范围内的元素列表:ZRANGE key start stop [WITHSCORES]//升序排序

(4)ZREVRANGE key start stop [WITHSCORES]//降序排序结果

(5)获得指定分数范围的元素:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

(6)增加某个元素的分数:ZINCRBY key increment member

(7)获得集合中元素的个数:ZCARD key

(8)获得指定分数范围内的元素的个数:ZCOUNT key min max

(9)删除元素:ZREM key member [key member…]

(10)按照排名范围删除元素:ZREMRANGEBYRANK key start stop

(11)按照分数范围删除元素: ZREMRANGEBYACORE key min max

(12)获得元素的排名:ZRANK key member//按照分数升序排序

(13)ZREVRANK key member // 按照分数逆序排序

(14)计算有序集合的交集:ZINTERSTORE destination numkeys key [key..] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]

注意:在redis中每一字典单成一个数据库,每一个数据库对外均是从0开始的递增数字来命名,可以通过database来修改这一数字。客户端与redis服务器建立连接后默认选择0号数据库,可以通过select命令更换数据库,例如SELECT 6   //选择6号数据库

猜你喜欢

转载自blog.csdn.net/xiaoxiao20121314/article/details/82831650