redis简介
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
redis的优势
- 大数据量,高性能
- 灵活的数据模型
- 高可用
- 低成本
redis的劣势
- 无关系:数据之间是无联系的
- 不支持标准的SQL,也没有公认的NoSQL标准
- 没有关系型数据库的约束,大多数也没有索引的概念
- 没有事务,不能依靠实物实现ACID
- 没有丰富的数据类型
redis操作命令
ping
沟通命令,查看状态: ping
返回值: PONG
解释: 输入 ping,redis 给我们返回 PONG,表示 redis 服务运行正常
dbsize
查看当前数据库中 key 的数目:dbsize
返回值:数字,key 的数量
redis 默认使用 16 个库
从 0 到 15。 对数据库个数的修改,可以在 redis.conf 文件中对databases 16进行操作
select index
切换库命令:select index
返回值: ok
flushdb
删除当前库的数据:flushdb
返回值: ok
redis 自带的客户端退出当前 redis 连接: exit 或 quit
redis key命令
keys
语法:keys pattern
作用:查找所有符合模式 pattern 的 key. pattern 可以使用通配符。通配符:
- *: 表示 0-多个字符 ,例如:keys * 查询所有的 key
- ?: 表示单个字符,例如:wo?d , 匹配 word , wood
显示所有的key
使用 * 表示0或多个字符
使用 ? 表示单个字符
exists
语法:exists key [key…]
作用:判断 key 是否存在
返回值:整数,存在 key 返回 1,其他返回 0. 使用多个 key,返回存在的 key 的数量。
检查指定的key是否存在
检查多个key是否存在(存在的显示实际结果,不存在的不显示)
expire
语法:expire key seconds
作用:设置 key 的生存时间,超过时间,key 自动删除。单位是秒。返回值:设置成功返回数字 1, 其他情况是 0
ttl
语法:ttl key
作用:以秒为单位,返回 key 的剩余生存时间(ttl: time to live) 返回值:
● -1 :没有设置 key 的生存时间, key 永不过期
● -2 :key 不存在
● 数字:key 的剩余时间,秒为单位
type
语法:type key
作用:查看 key 所存储值的数据类型返回值:字符串表示的数据类型
● none (key 不存在)
● string (字符串)
● list (列表)
● set (集合)
● zset (有序集)
● hash (哈希表)
查看存储字符串的key
查看不存在的key
del
语法:del key [key…]
作用:删除存在的 key ,不存在的 key 忽略。
返回值:数字,删除的 key 的数量。
删除指定的 key
redis数据类型
字符串类型 string
字符串类型是 Redis 中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON 化的对象甚至是一张图片。最大 512M。
基本命令
A、set
将字符串值 value 设置到 key 中
语法:set key value
查看所有的key
向已经存在的 key 设置新的 value,会覆盖原来的值
B、 get
获取 key 中设置的字符串值
语法: get key
C、 incr
将 key 中储存的数字值加 1,如果 key 不存在,则 key 的值先被初始化为 0 再执行incr 操作(只能对数字类型的数据操作)
语法:incr key
D、 decr
将 key 中储存的数字值减1,如果 key 不存在,则么 key 的值先被初始化为 0 再执行 decr 操作(只能对数字类型的数据操作)
语法:decr key
不存在的key,初值为0,再减 1
对存在的数字值的 key ,减 1 。先执行 incr index ,增加到 3
E 、key
如果 key 存在, 则将 value 追加到 key 原来旧值的末尾如果 key 不存在, 则将 key 设置值为 value
语法:append key value
返回值:追加字符串之后的总长度
追加内容到存在的 key
追加到不存在的 key,同 set key value
常用命令
A 、 strlen
语法:strlen key
返回 key 所储存的字符串值的长度返回值:
①:如果key存在,返回字符串值的长度
②:key不存在,返回0
B、 getrange
语法:getrange key start end
获取 key 中字符串值从 start 开始 到 end 结束 的子字符串,包括 start 和 end, 负数表示从字符串的末尾开始, -1 表示最后一个字符
返回值:截取的子字符串
C、 setrange
语法:setrange key offset value
用 value 覆盖(替换)key 的存储的值从 offset 开始,不存在的 key 做空白字符串。
返回值:修改后的字符串的长度
D、mset
语法:mset key value [key value…]
同时设置一个或多个 key-value
返回值: OK
E、 mget
语法:mget key [key …]
获取所有(一个或多个)给定 key 的值
返回值:包含所有 key 的列表
哈希类型 hash
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
基本命令
A、hset
语法:hset hash 表的 key field value
作用:将哈希表 key 中的域 field 的值设为 value ,如果 key 不存在,则新建 hash 表,执行赋值,如果有 field ,则覆盖值。
返回值:
①如果 field 是 hash 表中新 field,且设置值成功,返回 1
②如果 field 已经存在,旧值覆盖新值,返回 0
1:新的 field
2:覆盖旧的
B、 hget
语法:hget key field
获取哈希表 key 中给定域 field 的值
返回值:field 域的值,如果 key 不存在或者 field 不存在返回 nil
1:获取存在 key 值的某个域的值
2:获取不存在的 field
C、 hmset
语法:hmset key field value [field value…]
同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的 field,hash 表 key 不存在,创建空的 hash 表,执行 hmset.
返回值:设置成功返回 ok, 如果失败返回一个错误
1.同时设置多个 field-value
2:key 类型不是 hash,产生错误
D、hmget
语法:hmget key field [field…]
:获取哈希表 key 中一个或多个给定域的值
返回值:返回和 field 顺序对应的值,如果 field 不存在,返回 nil
1:获取多个 field 的值
E、 hgetall
语法:hgetall key
获取哈希表 key 中所有的域和值
返回值:以列表形式返回 hash 中域和域的值 ,key 不存在,返回空 hash
1:返回 key 对应的所有域和值
2:不存在的 key,返回空列表
F、 hdel
语法:hdel key field [field…]
删除哈希表 key 中的一个或多个指定域 field,不存在 field 直接忽略返回值:成功删除的 field 的数量
1:删除指定的 field
常用命令
A、hkeys
语法:hkeys key
查看哈希表 key 中的所有 field 域
返回值:包含所有 field 的列表,key 不存在返回空列表
1:查看 website 所有的域名称
B、 hvals
语法:hvals key
返回哈希表 中所有域的值
返回值:包含哈希表所有域值的列表,key 不存在返回空列表
1:显示 website 哈希表所有域的值
C、 hexists
语法:hexists key field
查看哈希表 key 中,给定域 field 是否存在返回值:如果 field 存在,返回 1, 其他返回 0
1:查看存在 key 中 field 域是否存在
列表类型 list
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
基本命令
A、lpush
语法:lpush key value [value…]
将一个或多个值 value 插入到列表 key 的表头(最左边),从左边开始加入值,从左到右的顺序依次插入到表头
返回值:数字,新列表的长度
将 a,b,c 插入到 mylist 列表类型(左插入)
显示的插入结果
B、 rpush
语法:rpush key value [value…]
将一个或多个值 value 插入到列表 key 的表尾(最右边),各个 value 值按从左到右的顺序依次插入到表尾
返回值:数字,新列表的长度
将 a,b,c 插入到 mylist2 列表类型(右插入)
显示插入结果
C、 lrange
语法:lrange key start stop
获取列表 key 中指定区间内的元素,0 表示列表的第一个元素,以 1 表示列表的第二个元素;start , stop 是列表的下标值,也可以负数的下标, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 start ,stop 超出列表的范围不会出现错误。
返回值:指定区间的列表
返回列表的全部内容
显示列表中第 2 个元素,下标从 0 开始
D、lindex
语法:lindex key index
获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。0 表示列表的第一个元素,以 1 表示列表的第二个元素;start , stop 是列表的下标值,也可以负数的下标, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
返回值:指定下标的元素;index 不在列表范围,返回 nil
返回下标是 1 的元素
不存在的下标
E、 llen
语法:llen key
获取列表 key 的长度
返回值:数值,列表的长度; key 不存在返回 0
显示存在 key 的列表元素的个数
常用命令
A、lrem
语法:lrem key count value
根据参数 count 的值,移除列表中与参数 value 相等的元素, count >0 ,从列表的左侧向右开始移除; count < 0 从列表的尾部开始移除;count = 0 移除表中所有与 value 相等的值。
返回值:数值,移除的元素个数
删除 2 个相同的列表元素
删除列表中所有的指定元素,删除所有的html
B、 lset
语法:lset key index value
将列表 key 下标为 index 的元素的值设置为 value。
返回值:设置成功返回 ok ; key 不存在或者 index 超出范围返回错误信息
设置下标 2 的 value 为“z”
C、 linsert
语法:linsert key BEFORE|ALFTER pivot value
将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置。key 不存在,pivot 不在列表中,不执行任何操作。
返回值:命令执行成功,返回新列表的长度。没有找到 pivot 返回 -1, key 不存在返回 0
修改列表test,在值 z 之前加入hello
操作不存在的 pivot
集合类型 set
Redis 的 Set 是 string 类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据.
基本命令
A、sadd
语法:sadd key member [member…]
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入。
返回值:加入到集合的新元素的个数。不包括被忽略的元素
添加单个元素
添加多个元素
B、 smembers
语法:smembers key
获取集合 key 中的所有成员元素,不存在的 key 视为空集合
查看集合的所有元素
查看不存在的集合
C、 sismember
语法:sismember key member
判断 member 元素是否是集合 key 的成员
返回值:member 是集合成员返回 1,其他返回 0
检查元素是否存在集合中
D、scard
语法:scard key
获取集合里面的元素个数
返回值:数字,key 的元素个数。 其他情况返回 0
统计集合的大小
统计不存在的 key
E、 srem
语法:srem key member [member…
删除集合 key 中的一个或多个 member 元素,不存在的元素被忽略。
返回值:数字,成功删除的元素个数,不包括被忽略的元素。
删除存在的一个元素,返回数字 1
删除不存在的元素
常用命令
A、srandmember
语法:srandmember key [count]
只提供 key,随机返回集合中一个元素,元素不删除,依然在集合中;提供了 count 时,count 正数, 返回包含 count 个数元素的集合, 集合元素各不相同。count 是负数,返回一个 count 绝对值的长度的集合, 集合中元素可能会重复多次。
返回值:一个元素;多个元素的集合
随机显示集合的一个元素
使用 count 参数, count 是正数
使用 count 参数,count 是负数
B、 spop
语法:spop key [count]
随机从集合中删除一个元素, count 是删除的元素个数。返回值:被删除的元素,key 不存在或空集合返回 nil
随机从集合删除一个元素
随机删除指定个数的元素
有序集合类型 zset (sorted set)
Redis 有序集合 zset 和集合 set 一样也是 string 类型元素的集合,且不允许重复的成员。不同的是 zset 的每个元素都会关联一个分数(分数可以重复),redis 通过分数来为集合中的成员进行从小到大的排序
基本命令
A、zadd
语法:zadd key score member [score member…]
将一个或多个 member 元素及其 score 值加入到有序集合 key 中,如果 member存在集合中,则更新值;score 可以是整数或浮点数
返回值:数字,新添加的元素个数
创建保存学生成绩的集合
使用浮点数作为 score
B、 zrange
语法:zrange key start stop [WITHSCORES]
查询有序集合,指定区间的内的元素。集合成员按 score 值从小到大来排序。 start,stop 都是从 0 开始。0 是第一个元素,1 是第二个元素,依次类推。以 -1 表示最后一个成员,-2 表示倒数第二个成员。WITHSCORES 选项让 score 和 value 一同返回。
返回值:自定区间的成员集合
显示集合的全部元素,不显示 score,不使用 WITHSCORES
显示集合全部元素,并使用 WITHSCORES
显示第 0,1 二个成员
排序显示浮点数的 score
C、 zrevrange
语法:zrevrange key start stop [WITHSCORES]
返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递减(从大到小) 来排列。其它同 zrange 命令。
返回值:自定区间的成员集合
成绩榜
D、zrem
语法:zrem key member [member…]
删除有序集合 key 中的一个或多个成员,不存在的成员被忽略
返回值:被成功删除的成员数量,不包括被忽略的成员。
删除指定一个成员 wangwu
E、 zcard
语法:zcard key
获取有序集 key 的元素成员的个数
返回值:key 存在返回集合元素的个数, key 不存在,返回 0
查询集合的元素个数
常用命令
A、zrangebyscore
语法:zrangebyscore key min max [WITHSCORES ] [LIMIT offset count]
获取有序集 key 中,所有 score 值介于 min 和 max 之间(包括 min 和 max)的成员,有序成员是按递增(从小到大)排序。min ,max 是包括在内 , 使用符号 ( 表示不包括。 min , max 可以使用 -inf +inf 表示最小和最大,limit 用来限制返回结果的数量和区间。withscores 显 示 score 和 value
返回值:指定区间的集合数据使用的准备数据
显示指定具体区间的数据
显示指定具体区间的集合数据,开区间(不包括 min,max)
显示整个集合的所有数据
使用 limit
增加新的数据:
显示从第一个位置开始,取一个元素。
B、 zrevrangebyscore
语法:zrevrangebyscore key max min [WITHSCORES ] [LIMIT offset count]
返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。其他同 zrangebyscore
查询工资最高到 3000 之间的员工
C、 zcount
语法:zcount key min max
返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量
求工资在 3000-5000 的员工数量