Redis的五种基本数据类型
1、概述
- Redis是一个由C语言开发的基于key-value形式的非关系型数据库
- key-value:键值对【键:String,值:五种数据类型】
- 非关系数据库:NoSQL【Not Only SQL】
- 关系型数据库:由二维表的形式来存储数据
- 不是关系型数据库,就是非关系型数据库
- 存储介质
- 官网
2、Redis的五种基本数据类型
- string:字符串
- hash:对象
- list:有序列表
- set:无序集合
- zset:有序集合
3、基本用法
1、string
set get getset mset mget
setnx strlen append incr incrby
decr decrby
- #设置key和value,正确返回OK
- set key value
- set name zhangsan
- #获取key对应的value值,若没有返回nil
- get key
- get name
- #返回key对应的value,再重新设置这个key的值
- getset key value
- getset name lily
- #设置多个键值对 正确返回OK
- mset k1 v1 k2 v2 ...
- mset sex 1 age 20 address hz
- #获取多对key对应的value
- mget k1 k2 k3 ...
- mget sex age address
- #设置key-value:如果key不存在,则设置,如果key存在,则什么都不做
- #成功返回1,失败返回0
- setnx key value
- setnx phone 13577889900
- #计算key对应的value的长度
- strlen key
- strlen phone
- #在原先的基础之上进行字符串追加
- append key value
- append address xs
- #本来address的值是hz,现在就是hzxs
- #自增1,value是数值类型才能成功。如果key不存在,则直接以0为基础,进行自增。如果这个值不是数值,则会报错
- incr key
- incr age
- #age本来是20,现在返回就是21
- #自增指定数量,value是数值类型才能成功
- incrby age 5
- #age本来是20,现在返回就是25
- #自减1,value是数值类型才能成功。
- decr key
- decr age
- #age本来是0,现在返回就是-1
- #自减指定数量,value是数值类型才能成功
- decrby key
- decrby age 20
- #age本来是30,现在返回就是10
复制代码 2、hash
hset hmset hget hmget hkeys
hvals hgetall hexists hlen hsetnx hdel
- #设置值,必须指定大key和小key、value
- hset person name tom
- #设置多值
- hmset person sex 1 age 20
- #获取单个小key对应的value
- hget person sex
- #获取多个小key对应的value们
- hmget person name age
- #获取所有的小key
- hkeys person
- #获取所有的小key对应的values
- hvals 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就是-1
- lrange key startIndex endIndex
- lrange key 0 -1
- #获取列表元素的个数
- llen key
- #获取指定索引的元素,index表示索引
- lindex key index
- #获取指定索引为3的元素
- lindex key 3
- #从左边弹出一个元素[获取最左边的元素,再删除它]
- lpop key
- #从右边弹出一个元素
- rpop key
- #从一个列表的右边弹出元素,再追到加另一个列表的左边
- rpoplpush 源列表 目标列表
- #移除count个的value值
- lrem key count value
- lrem 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,不存在:返回0
- sismember 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元素移动到myset3
- smove 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 -1
- 1) "zhangsan"
- 2) "wangwu"
- 3) "lisi"
- #获取集合所有的元素,包括名称和分数【是从小到大排序】
- zrange tuhaobang 0 -1 withscores
- 1) "zhangsan"
- 2) "10"
- 3) "wangwu"
- 4) "30"
- 5) "lisi"
- 6) "80"
- #获取集合前两位元素的名称和分数
- zrange tuhaobang 0 1 withscores
- 1) "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],删除成功返回删除的个数,否则返回0
- zremrangebyscore tuhaobang 10 20
复制代码 4、通用命令
- #查找匹配规则的key, *:代表0到多个字符,?代表一个字符
- #查询所有key
- keys *
- #查询keys中第二个字母为a的key
- keys ?a*
- #判断key是否存在,存在:返回1,不存在:返回0
- exists key
- #删除key,删除成功返回1,删除不存在的key返回0
- del key
- #查看key剩余有效时间
- #ttl key
- ttl gender
- 结果:返回剩余有效时间,如果已经过期:返回-2,如果没有设置有效时间:返回-1
- #设置已经存在的key的过期时间,单位为秒
- expire key seconds
- #为已经存在的key设置过期时间,单位是毫秒
- pexpire key 毫秒
- #查看指定key的剩余存活时间,单位是毫秒
- pttl key
- #移除指定key的生存时间,永久的持久化
- persist key
- #获取指定的key的value的数据类型
- type key
- #移动当前数据库中对应的key到其他数据库,dbindex是0-15
- move key dbindex
复制代码- #redis默认有16个数据库,分别是 db0 - db15
- #查看当前数据库下有多少key
- dbsize
- #切换数据库,dbindex是0-15
- select dbindex
- #清空当前数据库
- flushdb
- #清空所有数据库中的数据
- flushall
- #实时监控Redis服务接收到的命令【其他客户端的操作,能够被监控到】
- monitor
复制代码- #redis写的性能
- redis-benchmark set
- #redis读的性能
- redis-benchmark get
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |