Redis 基本数据类型
1、简介
redis是一款菲关系型数据库(Not Only SQL ),是对关系型数据库做补充。这是一种基于内存的数据库,用于应对基于海量用户和海量数据前提下的数据处理问题。
因为磁盘读/写速度比较慢的问题,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。
2、特征
- 数据间没有必然的关联关系;
- 内部采用单线程机制进行工作;
- 高性能;
- 多数据类型支持:string、hash、list、set、sorted_set和hyperLogLog;
- 持久化支持,可以进行数据灾难恢复;
3、数据类型
3.1 string 常见操作
#新增
set key value
#新增多个
mset key1 value1 [key2 value2]
#删除
del key
#追加值到原始值后面,不存在就新增
append key value
#读取
get key
#获取值长度
strlen key
=============扩展操作============
#对value为数值的key自增自减操
incr key //value+1
incrby key increment //指定value+increment
incrbyfloat key increment
decr key
decrby key increment
#设置key的有效期
setex key seconds value //指定秒数
psetec key milliseconds value //指定毫秒数
3.2 list 常见操作
简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
===========普通操作============= #添加、修改 lpush key value1 [value2...] rpush ... #移除并返回结果 lpop key //左边删除一个 rpop key //右边删除一个 lrem key count value //删除指定数量的value #获取数据 lrange key start end //获取下标start到end的值,end = -1为最后 lindex key index #获取长度 llen key
============扩展操作=============
#阻塞式删除操作,如有有值立即执行,没有值会等timeout秒,还没有就返回(nil)
blpop key1 [key2] timeout
brpop ...
业务场景:关注列表。。。
3.3 hash 常见操作
是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
========普通操作========= #新增 hset key field value hmset key field1 value1 [field2 value2] #删除key中field hdel key field1 [field2] #获取 hget key field hmget key field1 [field2] #获取长度 hlen key #判断field是否存在 hexists key field ========扩展操作==========
#获取key的所有field和value
hkeys key
kvals key
#值的增量操作
hincrby key field increment
hincrbyfloat key field increment
#存在field不插入,不存在插入
hsetnx key field value
注意事项:
-
-
- value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象;
- hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性;
- hgetall操作可以获取全部属性,如果内部field过多,遍历整体数据效率会很低,最好只查要的数据;
-
业务场景:限量促销数据存储。。。
3.4 set 常见操作
是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
=========普通操作========== #新增 sadd key member1 [member2] #删除 srem key member #获取 smembers key #获取数量 scard key #判断member是否存在 sismember key member ========扩展操作========
#随机获取member
srandmember key [count] //默认1个
#随机获取member并从集合中删除
spop key [count]
#获取集合间的交、差、并集
sinter key1 [key2...] //交集
sinterstore destination key1 [key2...] //获取交集并存到指定集合中
sdiff key1 [key2...] //差集
sdiffstore destination key1 [key2...] //获取差集并存到指定集合中
sunion key1 [key2...] //并集
sunionstore destination key1 [key2...] //获取并集并存到指定集合中
#将指定数据从原始集合中移动到目标集合中
smove source destination member
注意事项:不允许数据重复;
应用场景:统计网站访问量、随机推荐、黑白名单。。。
3.5 sorted_set 常见操作
有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
======普通操作====== #新增 zadd key score1 member1 [...] #删除 zrem key member zremrangebyrank key start end //包含start和end zremrangebyscore key min max #获取 zrange key start end [withscores] zrevrange ... zrangebyscore key min max [withscores] zrevrangebyscore ... #获取总数 zcard key zcount key min max //通过socre去统计 #交并集操作 zinterstore destination numkeys key1 [key2...] //必须指定几个集合操作 zunionstore ... ========扩展操作========
#获取数据对应的索引
zrank key member
zrevrank key member
#score值获取与修改
zscore ket member
zincrby key increment member
业务场景:投票、评选。。。
3.6 HyperLogLog
在 2.8.9 版本添加了 HyperLogLog 结构。 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
什么是基数?
比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。
#新增
pfadd key element1 [element2...]
#获取基数估算值
pfcount key1 [key2...]
#合并
pfmerge destkey sourcekey1 [sourcekey2...]
4、key通用命令
#删除key del key #获取key类型 type key #判断key是否存在 exists key #设置key有效期 expire key seconds pexpire key millisecondes expireat key timestamp pexpirear key milliseconds-timestamp #获取key有效时间 ttl key pttl key #切换key从时效性转为永久性 persist key #查找key keys pattern * 匹配任意数量的字符 ? 匹配一个字符 [] 匹配范围内的字符 #修改key rename key newkey renamenx key newkey //仅当 newkey 不存在时,将 key 改名为 newkey #排序 sort key //可以对list、set和sorted set的元素进行排序,然后显示排序的结果,不影响这些类型里面存储的数据的排序,默认asc
5、数据库命令
一共有16个数据库,0~15,默认在0号数据库
#切换数据库 select index #数据移动数据库 move key db #数据清除 dbsize 查看key的数量 flushbd 删除本数据库内容 flushall 删除所有数据 #其他操作 quit 退出 ping 测试服务是否连通 echo message 打印内容到控制台