Redis之常用的数据类型以及指令

1.什么是Redis

Redis是一款常见的非关系型数据库,是以key-value的形式存储数据的,与常见的关系型数据库相比,丰富的数据类型以及key-value的存储方式能够支持Redis在某些需求下比传统的关系型数据库更加适合存取数据,同时因为Redis是在内存中存储数据,相比于传统的非关系型数据库,具有更快的读写速度,能够达到每秒钟10w次左右,也是因为Redis数据存储在内存中,为了避免服务器断电或者其他原因导致数据丢失,Redis还提供了持久化的操作RDB和AOF。

2.Redis常见的数据类型和命令

常用的基本命令

【 set key value 】 存入一个key和值。如:set myname reson
【 get key 】 读取一个key的值。
【 del key 】 删除一个key。
【 del key1 key2 ... keyN 】 删除多个key。如:del myname1 myname2
【 exists key 】 判断一个key是否存在。
【 type key 】 查看key的类型。
【 rename key keyNew 】 重命名key名。如:rename myname myname2
【 dbsize 】 查看当前库中的key的条数。
【 expire key time 】 指定key的过期时间,单位为秒。如:expire myname 9(设置9秒后过期)
【 ttl key 】 查看redis有多长时间过期,单位为秒。
【 keys * 】 列出当前库中所有的key名。
【 keys a* 】 列出当前库中所有以字符串“a"开头的key。
【 select db-index 】 选择一个数据库,如选择第一个数据库:select 0;选择第二个 select 1;默认有16个数据库,这个值可以在redis.conf中配置。
【 flushdb 】 清掉当前库中所有的key(生产环境下需谨慎操作)。
【 flushall 】 清掉所有库中全部的key(生产环境下需谨慎操作)。
【 mset key1 value1 key2 value2 ... keyN valueN 】 一次性存入多个key和值。
【 mget key1 key2 ... keyN 】 一次性读取多个key。
【 incr key 】 可以对key类型+1的操作(相当于编程语言里面的++),只能操作number型,操作字符串会报错。可对新值进行操作。
【 decr key 】 可以对key类型-1的操作(相当于编程语言里面的--),只能操作number型,操作字符串会报错。
【 incrby key num 】 同incr,对key的值加num,比如 incrby aa 10,对aa+10。
【 decrby key num 】 同上,对key的值减num。
【 append key value 】 对指定key的字符串进行追加,如果key为整形,会被转为字符串。如aa的值为9,执行append aa 10后,会变成910。 
【 substr key start end 】 对key进行截取start到end个字符。如aa的值为:abcdef,执行substr aa 2 3后,返回“cd”。
复制代码

常见的Redis数据类型包括五种:String,List,Set,ZSet和Hash,以上五种类型主要是指key-value中value的类型。

String:

String类型可以算是这五种类型中最基础的类型了,Redis中的String类型是二进制安全的类型,也就是你可以将一个序列化的对象或者图片之类的媒体文件存储到Redis中,但是要注意String类型支持的大小上限是512M。在实际应用中String类型常被用做计数器,分布式锁,缓存等。

List:

类似Java中的List,Redis中的List也是可以存储多个有序可重复的值的,可以理解为一个key对应一个List,而这一个List里面有多个值。List由于其有序的特性可以被用来作为消息队列,或者进行分页查询,以及用来存储一篇博客下的评论等。

相关命令:
【 lpush key value 】 往队列头部插入一个元素
【 rpush key value 】 从尾部插入一个元素
【 lpop key 】 从队列头部删掉一个元素
【 rpop key 】 从队列尾部删掉一个元素,并返回被删除元素的值
【 llen 】 返回队列的长度,即里面有多少个元素。不存在key返回0,不为队列类型的key会返回报错。
【 lrange key start end 】 返回队列从start到end之间的元素信息。
【 ltrim key start end 】 截取一个队列,只保留指定区间内的元素。
复制代码

Set:

也是类似Java中的Set,可以用来存储多个的无序的不重复的值,集合中的元素是没有顺序的,关于Set的常见使用,比如qq好友的标签,以及一些抽奖之类的。

相关命令

【 sadd key vaule 】 往集合中插入一个元素,如果value值已存在集合中,则返回0,不会被重复插入。
【 sinter key1 key2 ... keyN 】 取出n个key之间的交集。比如 key1里面有值a,b,c,d,e,key2里面有d,e,f,sinter key1 key2返回d,e。
【 sunion key1 key2 ... keyN 】 取出n个key之间的并集。比如 key1里面有值a,b,c,d,e,key2里面有d,e,f,sunion key1 key2返回a,b,c,d,e,f。
【 sdiff  key1 key2 】 取出n个key之间的差集。比如 key1里面有值a,b,c,d,e,key2里面有d,e,f,sdiff key1 key2返回a,b,c;反过来sdiff key2 key1返回f。
【 smembers key 】 返回key集合中所有的元素,结果是无序的。
【 sismember key value 】 查看value这个值是否在key集合中。存在返回1,不存在返回0。
【 scard key 】 返回集合中有多少个元素。
【 smove key1 key2 value 】 把value从key1中移到key2中去。
【 srem key value1 value2 ... valueN 】 从key集合中删掉某些元素。
复制代码

ZSet:

Zset可以看成Set的有序版本,每次往这个ZSet中存储一个元素时,都需要一个相应的score,Zset会根据你存储Score大小来排序。Zset常被用来以点击次数作为score来实现热点排行榜,或者以某个字段作为score来分页缓存等。

相关命令
【 zadd key v k 】 往key中添加一个元素,k为键,v为值。如:zadd artHits 99 12表示id为12的文章点击量为99次。
【 zrange key start end 】 根据v的值由小到大进行排序来获得start到end之间的元素。
注:0表示第一个元素,-1表示最后一个元素,-2表示倒数第二个元素,以此类推,如果要获取第一个到倒数第三个之间的元素,命令为:zrange key 0 -3。
【 zrevrange key start end 】 同上,根据v的值由大到小进行排序来获得start到end之间的元素。可以轻松取出点击量最高的前n篇文章。
【 zremrangebyrank key start end 】 删除集合中的元素。排序的方式为按照v由小到大的顺序,如果要删除key集合中的第一个值,则运行 zremrangebyrank artHits 0 0;删除前3个值:zremrangebyrank artHits 0 2。
【 zcard 】 返回key集合中元素的个数。
【 zrank key k 】 返回值k在集合key中排第几位,是按照v由小到大的顺序。排第一名返回0,第二返回1,以此类推。
【 zrevrank key k 】 同上,不同的是,按照v由大到小的顺序。可以轻松取出点击量最高的文章。
【 zscore key k 】 取出集合key中键为k对应的值v。
【 zrem key k 】 删除集合中指定元素。
【 zincrby key num k 】 给集合key中的元素k加上num,值针对整型。比如 zincrby artHits 3 12,给id为12的文章加上3个点击量。此时zscore artHits 12的结果是99+3为102。
复制代码

Hash:

Hash类似Java中的map对象,其中可以存储多个键值对,hash类型常被用来存储用户的信息,比于一个用户的信息,可以将其id作为key,将姓名,年龄,性别之类的信息以键值对的形式存储到hash里面,还可以用来存储一个帖子的相关信息,点赞数,评论数和分享数之类的。

相关命令
【 hset key field value 】 设置hash field为指定值,如果key不存在,则先创建。
【 hmset key field1 value1 ... fieldN valueN 】 同时设置多个值。
【 hget key field 】  获取指定的hash field
【 hmget key field1 field1 ... fieldN 】 获取指定的多个hash field
【 hincrby key field num 】 将指定的hash field加上指定的值。
【 hexists key field 】 查看指定field是否存在。
【 hdel key field 】 删除指定的hash field。
【 hlen key 】 返回指定hash中field的数量。
【 hkeys key 】 返回hash所有的field。
【 hvals 】 返回hash中所有的value。
【 hgetall key 】 返回hash中所有的field和value。
复制代码

其实除了以上这五种类型,Redis还有其他的几种比较少见的数据类型,像是bitmap,HyperLogLog,Geo,之类的,这里我们就不详细展开说了。

bitmap:是一种基于位操作的数据类型,以bit为单位

HyperLogLog:基于基数运算的类型

Geo:对经纬度进行存储并提供地理位置的一些运算

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享