Redis中五种常用数据类型及其相关操作笔记
1 Redis键(key)
(1)Keys * 查看当前库所有key
(2)exists [key] 判断key是否存在,返回1存在,返回0不存在
(3)type [key] 查看key是什么类型
(4)del [key] 删除指定的key数据
(5)Unlink [key] 根据value选择非阻塞删除:仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作
(6)expire [key] [time]:为给定的key设定过期时间,以秒为单位
(7)ttl [key]查看还有多少秒过期,-1表示永不过期,-2表示已过期
2 字符串String
Redis的String类型是最基本的数据类型,一个字符串value值最多可以使512M,同时String是二进制安全的,可以包含任何数据,比如jpg图片或者序列化的对象
操作:
(1)set [key] [value]:设置k-v 如 set k1 name
(2)get [key]:获取该key对应的value
(3)append [key] [value]:向key对应的value后追加值,同时返回长度,若key不存在,则新建
(4)strlen [key]:获取长度
(5)setnx [key] [value]:只有key不存在时,才设置key的值
key1存在,所以无法设置成功
key2不存在,成功设置
(6) incr [key]:将key中存储的数字值增加1,只能对数字操作
当key不存在时,新建并值为1
(7)decr [key]:将key中存储的数字值减1
如果key不存在,新建并值为-1
(8)incrby [key] [步长]:将key中存储的数字值增加,自定义步长,如果步长为20则值增加20
(9)decrby [key] [步长]:将key中存储的数字值减少,自定义步长,如果步长为20则值减少20
3 列表List
List是单键多值的数据类型,按照插入顺序排序。可以添加一个元素到列表的头部或者尾部。其底层是双向链表。
操作:
(1)lpush/rpush [key] [value1] [value2]…:从左边/右边插入一个或多个值
(2)Irange [key] [start] [stop]:按照索引下表获得元素(从左到右),如果输入的start和stop分别是0和-1则表示取所有值
(3)lpop/rpop [key]:从左边/右边弹出一个值,当值全部弹出,键自动删除
(4)rpoplpush [key1] [key2]:从key1列表右边弹出一个值,插入到key2列表的左边
(5)lindex [key] [index]:按照索引下表获取指定元素(从左到右)
(6)linsert [key] before [value] [newvalue]:在[value]前面插入[newvalue]
(7)lrem [key] [n] [value]:从左边删除n个value
(8)lset [key] [index] [value]:将列表key下标为index的值替换成value
4 Redis集合Set
Redis中的集合也是类似于列表的功能,但是set中不允许存在重复元素,其实string类型的无需集合,底层为哈希表,添加、删除、查找的复杂度都是O(1)
操作:
(1)sadd [key] [value1] [value2]:将一个或多个元素加入到key中,自动排重
(2)smembers [key]:查看集合中所有值
(3)sismember [key] [value]:判断集合key是否含有给定value值,有返回1,没有返回0
(4)scard [key]:返回该集合的元素个数
(5)srem [key] [value1] [value2]:删除集合中的某个元素
(6)spop [key]:随机从集合中弹出一个值
(7)srandmember [key] [n]:随机从集合中取出n个值,不从集合中删除这些值
(8)smove [source] [destination] [value]:把集合中的一个值移动到另一个集合
(9)sinter [key1] [key2]: 返回两个集合的交集
(10)sunion [key1] [key2]: 返回两个集合的并集
(11)sdiff [key1] [key2]: 返回两个集合的差集(key1中的,不包含key2中的)
5 Redis哈希Hash
Redis中的hash是一个string类型的field和value的映射表,适合用于存储对象,类似java中的Map<String,Object>,其底层当field-value长度较短且个数较少时,会使用ziplist(压缩列表),否则使用hashtable(hash表)
操作:
(1)hset [key] [field] [value]:给key集合中的field键赋值value
(2)hget [key] [field]:从key1集合filed取出value
(3)hmset [key1] [field1] [value1] [field2] [value2]:批量设置hash的值(新版本hset也可以实现该功能)
(4)hexists [key1] [field]:查看哈希表key中,给定域field是否存在
(5)hkeys [key]:列出该hash集合的所有field
(6)hvals [key]:列出该hash集合的所有value
(7)hincrby [key] [field] [increment]:为哈希表key中的域field的值加上增量
(8)hsetnx [key] [field] [value]:将哈希表key中的域field的值设为value,当且仅当域field不存在时才能成功操作
6 Redis有序集合Zset
Zset也是一个没有重复元素的集合,与set的不同是Zset的每个成员都关联了一个评分,按照评分从低到高排序集合中的成员,评分可以重复。
其底层使用了两个数据结构:
(1)哈希表,作用是关联value和score,保障元素的唯一性
(2)跳跃表,作用是给value排序,根据score的饭味获取元素列表
操作:
(1)zadd [key] [score1] [value1] [score2] [value2]:将一个或多个member元素及其值加入到key中
(2)zrange [key] [start] [end] [WITHSCORES]:返回下表在start和end之间的元素,如果带上WITHSCORES,可以将分数一起返回,如果start和end分别是0,-1,则返回全部元素
(3)zrangebyscore [key] [min] [max] [withscores] [limit offset count]:返回所有score值介于min和max之间(闭区间)的成员,按score从小到大排列,limit offset count是分页
(4)zrevrangebyscore [key] [max] [min] [withscores] [limit offset count]:返回所有score值介于min和max之间(闭区间)的成员,按score从大到小排列
(5)zincrby [key] [increment] [value]:为元素的score加上增量
(6)zrem [key] [value]:删除指定值的元素
(7)zcount [key] [min] [max]:统计区间内的元素个数(闭区间)
(8)zrank [key] [value]:返回指定值在集合中的排名,从0开始