1、概述
- Redis是一个由C语言开发的基于key-value形式的非关系型数据库key-value:键值对【键:String,值:五种数据类型】非关系数据库:NoSQL【Not Only SQL】关系型数据库:由二维表的形式来存储数据不是关系型数据库,就是非关系型数据库
- 存储介质默认是内存可以持久化到磁盘上
- 官网中文:http://www.redis.cn/
- 英文:https://redis.io/
2、Redis的五种基本数据类型
- string:字符串
- hash:对象
- list:有序列表
- set:无序集合
- zset:有序集合
3、基本用法
1、string
set get getset mset mget
setnx strlen append incr incrby
decr decrby
#设置key和value,正确返回OKset key valueset name zhangsan#获取key对应的value值,若没有返回nilget keyget name#返回key对应的value,再重新设置这个key的值getset key valuegetset name lily#设置多个键值对 正确返回OKmset k1 v1 k2 v2 …mset sex 1 age 20 address hz#获取多对key对应的valuemget k1 k2 k3 …mget sex age address#设置key-value:如果key不存在,则设置,如果key存在,则什么都不做#成功返回1,失败返回0setnx key valuesetnx phone 13577889900#计算key对应的value的长度strlen keystrlen phone#在原先的基础之上进行字符串追加append key valueappend address xs#本来address的值是hz,现在就是hzxs#自增1,value是数值类型才能成功。如果key不存在,则直接以0为基础,进行自增。如果这个值不是数值,则会报错incr keyincr age#age本来是20,现在返回就是21#自增指定数量,value是数值类型才能成功incrby age 5#age本来是20,现在返回就是25#自减1,value是数值类型才能成功。decr keydecr age#age本来是0,现在返回就是-1#自减指定数量,value是数值类型才能成功decrby keydecrby age 20#age本来是30,现在返回就是10
2、hash
hset hmset hget hmget hkeys
hvals hgetall hexists hlen hsetnx hdel
#设置值,必须指定大key和小key、valuehset person name tom#设置多值hmset person sex 1 age 20#获取单个小key对应的valuehget person sex#获取多个小key对应的value们hmget person name age#获取所有的小keyhkeys person#获取所有的小key对应的valueshvals person#获取所有大key中的键值对hgetall person#判断小key是否存在hexists person age#求大key中小key的数量hlen person#设置小key【小key不存在,则设置成功,如果存在,则什么都不做】hsetnx person age 25#删除hdel person age
3、list
- 增加数据:两种方式左边增加数据:左压栈,后增加的数据在左边右边增加数据:右压栈,后增加的数据在右边
- 读取数据读取数据从左往右
lpush rpush lrange llen lindex lpop rpop rpoplpush lrem
#左压栈lpush key v1 v2 …#特征:存入的数据顺序跟读取顺序相反#右压栈rpush key v1 v2 …#特征:存入的数据顺序跟读取顺序相同#查询列表中的数据#下标从0开始,如果要读到最末尾,endIndex就是-1lrange key startIndex endIndexlrange key 0 -1#获取列表元素的个数llen key#获取指定索引的元素,index表示索引lindex key index#获取指定索引为3的元素lindex key 3#从左边弹出一个元素[获取最左边的元素,再删除它]lpop key#从右边弹出一个元素rpop key#从一个列表的右边弹出元素,再追到加另一个列表的左边rpoplpush 源列表 目标列表#移除count个的value值lrem key count valuelrem names 2 tom#删除names列表中2个tom【是从左开始移除】
4、set
sadd scard smembers sismember spop sdiff sinter sunion
sdiffstore sinterstore sunionstore smove
#存值sadd myset aa bb cc#返回存入的个数#获取集合长度scard myset#获取集合元素smembers myset#判断元素是否在集合中。存在:返回1,不存在:返回0sismember myset cc#随机弹出一个元素spop myset#随机弹出指定个数元素spop myset 2#差集sdiff myset1 myset2#交集sinter myset1 myset2#并集sunion myset1 myset2#将交集结果存入到另一个集合中#sdiffstore 存储结果的集合名 操作的集合一 操作的集合二sdiffstore myset3 myset1 myset2#将交集结果存入到另一个集合中sinterstore myset4 myset1 myset2#将并集结果存入到另一个集合中sunionstore myset5 myset1 myset2#将myset1中的aa元素移动到myset3smove myset1 myset3 aa
5、zset(sorted set)
zadd zcard zrange zincrby zscore zinterstore zrangebyscore zrevrangebyscore
zrem zrank zremrangebyscore
#向有序集合中增加元素#zadd 集合名 分数1 名称1 分数2 名称2 …zadd tuhaobang 10 zhangsan 80 lisi 30 wangwu#返回插入的数量#获取集合中元素的数量zcard tuhaobang#获取集合中指定区间的元素名称,如果后面的索引是-1,则返回所有元素名称zrange tuhaobang 0 -11) “zhangsan”2) “wangwu”3) “lisi”#获取集合所有的元素,包括名称和分数【是从小到大排序】zrange tuhaobang 0 -1 withscores1) “zhangsan”2) “10”3) “wangwu”4) “30”5) “lisi”6) “80”#获取集合前两位元素的名称和分数zrange tuhaobang 0 1 withscores1) “zhangsan”2) “10”3) “wangwu”4) “30”#为集合中指定的名称的元素增加分数zincrby tuhaobang 50 zhangsan#返回增加后的分数#返回集合中指定名称的分数zscore tuhaobang wangwu#把myzset1和myzset2根据元素名称求出交集,并把相同名称的value加在一起,得到元素名称的新分数,存入到新集合中,成功返回的是交集的个数#zinterstore 目标集合 操作集合的数量 集合一 集合二 …ZINTERSTORE myzset3 2 myzset1 myzset2#zrangebyscore 集合名称 小分数 大分数 [withscores] [limit 第几条开始显示 显示数量]#在不知道当前集合中最大值和最小值的情况下,-inf代表最小值 +inf代表最大值#获取tuhaobang集合中所有元素名称及分数zrangebyscore tuhaobang -inf +inf withscores#获取tuhaobang集合中第一个元素名称及分数zrangebyscore tuhaobang -inf +inf withscores limit 0 1#获取tuhaobang集合中分数在50-100之间的所有元素名称及分数zrangebyscore tuhaobang 50 100 withscores#获取tuhaobang集合中分数在50-100之间的前两位元素名称及分数zrangebyscore tuhaobang 50 100 withscores limit 0 2#按从大到小的顺序进行排序,并获取前2位zrevrangebyscore tuhaobang +inf -inf withscores limit 0 2#根据元素名删除元素zrem key member [member…]#获取集合中指定元素名称对应的索引zrank tuhaobang lisi#删除指定分数区间的元素[10,20],删除成功返回删除的个数,否则返回0zremrangebyscore tuhaobang 10 20
4、通用命令
- key相关
#查找匹配规则的key, *:代表0到多个字符,?代表一个字符#查询所有keykeys *#查询keys中第二个字母为a的keykeys ?a*#判断key是否存在,存在:返回1,不存在:返回0exists key#删除key,删除成功返回1,删除不存在的key返回0del key#查看key剩余有效时间#ttl keyttl gender结果:返回剩余有效时间,如果已经过期:返回-2,如果没有设置有效时间:返回-1#设置已经存在的key的过期时间,单位为秒expire key seconds#为已经存在的key设置过期时间,单位是毫秒pexpire key 毫秒#查看指定key的剩余存活时间,单位是毫秒pttl key#移除指定key的生存时间,永久的持久化persist key#获取指定的key的value的数据类型type key#移动当前数据库中对应的key到其他数据库,dbindex是0-15move key dbindex
- 数据库相关
#redis默认有16个数据库,分别是 db0 – db15#查看当前数据库下有多少keydbsize#切换数据库,dbindex是0-15select dbindex#清空当前数据库flushdb#清空所有数据库中的数据flushall#实时监控Redis服务接收到的命令【其他客户端的操作,能够被监控到】monitor
- 查看redis读写性能
#redis写的性能redis-benchmark set#redis读的性能redis-benchmark get