键值存储数据库——Redis
前言
NoSQL(Not Only SQL)全新的数据库理念,泛指非关系型数据库。这类的数据库在互联网发展的新需求下比关系型数据库有着更高的效率。NoSQL数据库主要分为四类:①键值存储数据库②列存储数据库③文档型数据库④图形数据库。下面让我们一起来看看键值存储数据库中比较热门的Redis.
概述
Redis是用C语言开发的一个开源的高性能键值对数据库。提供5种键值数据类型来应对不通场景下的存储需求。目前Redis的主要应用场景有:①数据缓存②在线列表③任务队列④访问记录⑤数据过期处理⑥session分离。下面是我对Redis数据库的更多描述:
类型
String
字符串是Redis最为基础的类型,字符串的Value最多可以容纳的数据长度是512M。
赋值: set key value
取值: get key
删除: del key
自增: incr key
自减:decr key
List
List类型是按照插入顺序排序的字符串链表。可以在头部(Left)尾部(Right)添加新元素。
左插入: lpush key values[value1 value2 …]
右插入: rpush key values[value1 value2 …]
查看: lrange key start end
左弹出: lpop key
右弹出: rpop key
查询所有Key: llen key
Set
Set类型可以没有排序的字符集合,与List类型的区别是Set集合中不允许出现重复的元素。
添加元素: sadd key values[value1、value2 …]
删除元素: srem key values[value1、value2 …]
查询所有Key: smembers key
判断Key是否存在: sismember key member
集合差集: sdiff key1 key2 …
集合交集: sinter key1 key2 …
集合并集: sunion key1 key2 …
SortedSet
SortedSet与Set相似,它们都是字符串的集合,主要差别是SortedSet中的每一个成员都会有一个分数(Score)与之关联。
添加元素: zadd key score member score2 member2 …
删除元素: zrem key member [member…]
查询所有Key:zcard key
查询指定Key分数:zscore key member
根据分数范围查询key:zrange key start end [withsores]
根据分数顺序查询:zrevrange key start stop [withsores]
根据分数范围删除:zremrangebyscore key min max
根据分数顺序删除:zremrangebyrank key start stop
Hash
Hash类型可以当做具有String Key 和 String Value 的map容器。非常适合存储值对象信息,如:UserId、UserName、Age 等。每一个Hash可以存储4294967295个键值对。
赋值: hset key field value
赋值: hmset key field value [field2 value2 …]
取值: hget key field
取值: hmget key fields
取值: hgetall key
删除: hdel key field [field …]
删除: del key
加减: hincr key field increment
指定key的field是否存在: hexists key field
指定key的field的个数: hlen key
查询所有key: hkeys key
查询所有value: hvals key
订阅发布
订阅频道:subscribe channel
指定频道发布消息:publish channel content
持久化
Redis的高性能是由于其将所有数据存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。
Redis支持两种方式的持久化,一种是RDB,一种是AOF。可以单独使用一种也可以结合使用。
RDB
该机制是指在指定时间间隔内将内存中的数据集快照写入磁盘。
AOF
该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库。
小结
在高性能、高并发、高可用的需求下,我们需要不断升级设计方案与数据处理来应对不同的开发需要。在这样一条路上会遇到更多新的设计,荣幸与您分享~