Redis的数据类型
简介
Redis是现在最受欢迎的NoSQL数据库之一,它是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库。
如何安装Redis?https://www.cnblogs.com/liuqingzheng/p/9831331.html
一般Redis可以存储的数据类型是,String、Hash、List、SortedSet(zSet)、Set。
一.字符串String ---- String Key-Value
字符串是Redis中最常用的类型,是一个由字节组成的序列,它在Redis中是二进制安全的,这意味该类型可以接受任何格式的数据。Value最多可以容纳的数据长度是512MB。
//命令 //添加元素 //ex:秒级过期时间,nx:键不存在时才能设置成功,xx键存在时才能设置成功 set key value [ex seconds] [px milliseconds] [nx|xx] //获取值 get key //批量设置值 mset key value [key value ...] //加法 对应的key值自增1,如果没有这个key值,自动给你创建并赋值1 //对应key值不是数字,会报错((error) ERR value is not an integer or out of range) incr key //减法 对应的key值自减1,如果没有这个key值,自动给你创建并赋值-1 //对应key值不是数字,会报错((error) ERR value is not an integer or out of range) decr key //获取key对应value的字符串长度 strlen key //设置并返回原值 getset key value //设置指定位置的字符 setrange key offeset value //例子 set redis pest setrange redis 0 b get redis 结果:"best" //获取部分字符串 getrange key start end
二.散列Hash ---- key-field-value
相当于是一个key存在多个map。Redis中的散列可以看成具有String key和String value的map容器,可以将多个key-value存储到一个key上。每一个Hash可以存储4294697295个键值对。
//命令 //设置值 hset key field value //获取值 hget key field //删除field hdel key field [field ...] //计算field个数 hlen key //批量设置或获取field-value hmset key field value [field value ...] hmget key field [field ...] //判断field是否存在 hexists key field //获取所有field hkeys key //获取所有value hvals key //获取所有的field-value hgetall key //以某种形式自增(Int) increment为增量 //对应value必须为int,否则报错((error) ERR hash value is not an integer) hincrby key field increment //以某种形式自增(Float) increment为增量 //对应value必须为float,否则报错((error) ERR hash value is not a valid float) hincrbyfloat key field increment //计算value的字符串长度 hstrlen key field
三.集合Set
Redis的集合是无序不可重复的,此处的无序是数据不能重复。和列表一样,在执行插入和删除以及判断是否存在某元素时,效率是很高的。集合最大的优势在于可以进行交集并集差集操作。Set可包含的最大元素数量是4294967295。
//命令 //添加元素 sadd key element ... //删除元素 srem key element [element ...] //返回成功删除元素个数//计算元素个数 scard key //判断元素是否在集合中 sismember key element //随机从集合返回指定个数元素 srandmember key [count] //从集合随机弹出元素(可以理解为随机删除元素) spop key [count] //获取所有元素 smembers key //多个集合求交集 sinter key [key ...] //多个集合求并集 sunion key [key ...] //求多个集合的差集(前面key对应value比后面key对应value多出的值) sdiff key [key ...] //将交集、并集、差集的结果保存(得到的结果另存为到一个新的set中) sinterstore destination key [key ...] suionstore destination key [key ...] sdiffstore destination key [key ...]
四.列表List
Redis的列表允许用户从序列的两端推入和弹出元素,列表由多个字符串值组成的有序可重复的序列,是链表结构,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是较快的。List可以包含的最大元素数量是4294967295。
//命令 //从右边插入元素 rpush key value [value ...] //从左边插入元素 lpush key value [value ...] //向某个元素前或者后插入元素 linsert key before|after pivot value //获取指定范围内的元素列表 lrange key start end //获取列表指定索引下标的元素 lindex key index //获取列表长度 llen key //从列表左侧弹出元素(即删除,返回被弹出的值) lpop key //从列表右侧弹出(即删除,返回被弹出的值) rpop key //删除指定元素,count>0从左到右,count<0从右到左,count=0,删除所有 //value是指定要删除的值,会有重复的值,所以要判断是从左边开始找删除的值还是右边开始找或者所有都删 lrem key count value //按照索引范围修剪列表 ltrim key start end
五.SortedSet(zSet)
有顺序不能重复。此处的不能重复是索引是唯一的,数据却可以重复。和Set很像,都是字符串的集合,都不允许重复的成员出现在一个set中。他们之间的差别在于有序集合中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。尽管有序集合中的成员必须是唯一,但是分数(score)却可以重复。
//命令 //添加成员 zadd key score member //计算成员个数 zcard key //计算某个成员的分数,如果成员不存在,则返回nil zscore key member //计算成员的排名,zrank是分数从低到高,zrevrank从高到低 zrank key member zrevrank key member //删除成员 zrem key member //增加成员的分数 zincrby key increment member //返回指定排名范围的成员 //从低到高返回 zrange key start end [withscores] //从高到低返回 zrevrange key start end [withscores] //返回指定分数范围的成员 zrangebyscore key min max [withscores] [limit offset count] zrevrangebyscore key max min [withscores] [limit offset count] //返回指定分数范围成员个数 zcount key min max //删除指定排名内的升序元素 zremrangebyrank key start end //删除指定分数范围的成员 zremrangebyscore key min max //求两个集合交集 (destination:得到的结果另存为的新zSet名字) zinterstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max] //求并集(destination:得到的结果另存为的新zSet名字) zunionstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]