参考链接:
1)https://www.cnblogs.com/xiaoxi/p/7007695.html
2)https://www.cnblogs.com/woshimrf/p/5198361.html
1、什么是nosql数据库
nosql数据库即非关系型数据库。全称为not only sql。与传统的关系型数据库相比,nosql数据库不需要建立严格的表结构,表与表之间没有必要的逻辑关系。适合存储海量复杂的碎片化数据。读写速度快。
2、常见的nosql数据库
nosql 数据库主要有四大分类
nosql数据库分类.png3、redis是什么
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value非关系型数据库。
特点:
- 基于内存读写,速度快
- 支持丰富的数据类型,包括string list set sorted set hash
- 支持事物
- 可以设置过期时间,用于缓存,消息等
4、redis的应用场景
- 排行榜应用(微博)
- 显示最新的项目列表(比如评论)
- 计数 ( 微博阅读量,网站访问量等)
- 缓存
- 队列
5、redis 的安装
1)windows下直接解压即可使用
2)linux 下安装
6、redis的基本命令
- redis默认有16个数据库,可以通过select [0-15]来选取数据库
- keys 正则:查看符合条件的key
- flushdb :清空redis
- type keyName:查看key的类型
- dbsize: 查看数据库中key的数量
- info 查看服务器信息
- exists key :查看是否存在该key 存在返回1
- set key value : 设置key的值为value,如果存在会覆盖
- setnx key value :设置key的值为value,如果存在则不操作
- mset key1 value1 key2 value2:设置这些key的值,如果存在则覆盖
- msetnx key1 value1 key2 value2 : 同mset ,如果存在则不操作
- del key :删除元素
- get key :获取key对应的值
- getset key value:获取该元素的值,并重新赋新值
- rename oldkey newkey :重命名key
- renamenx key newkey :当newkey不存在的情况在才会重命名
设置超时时间:
- expire key seconds:设置key多少秒之后失效
- expire key milliseconds:设置元素多少毫秒后过期
- ttl key :查看可以存活多少秒 -2表示key不存在,-1表示永久存活
- setex key seconds value :设置变量并设置超时
- persist key:取消过期时间
- expireat key 时间戳:将在具体的某个时间点删掉该元素
- setex key timeout value :设置key的值为value并在timeout秒后删除。
7、redis的数据类型
redis主要有string,list,set,sorted set hash 五种数据类型
redis是基于key和value存储的
关于key应注意几点
- key不要太长,尽量不要超过1024字节
- key的命名劲量有含义,以方便阅读
- 一个项目中key的命名最好统一规范
1)string 数据类型
string类型是二进制类型,可以将字符串、图片、视屏等等保存起来,也可以将一些静态文件保存起来,如js、css等等
具体使用语法:
string类型的使用最为简单,没有太多的操作,基本上使用前面说的redis的基本命令就可以完成。
- string类型value的最大值为512MB
- incr key 对key的值自增 (值需为整形)
- incrby key number 对key的值增加 number(值需为整形)
- decr key 对key自减(值需为整形)
- decrby key number 对key的值减少number(值需为整形)
- append key 内容,会在原有的值上追加字符串,类似拼接字符串的作用。如果是不存在的key则会创建这个变量,value为刚填写的内容
2)list 数据类型
list类型是双向链表结构,类似于java中的LinkedList的一种数据结构。是一个有序的可重复的集合。
应用场景
- 取最新n条数据的操作,比如新浪微博的最新的微博。
在Redis中我们的最新微博ID使用了常驻缓存,这是一直更新的。但是我们做了限制不能超过5000个ID,因此我们的获取ID函数会一直询问Redis。只有在start/count参数超出了这个范围的时候,才需要去访问数据库 - 实现简单的消息队列,具体可以先用rpush把消息放入到队列尾部,再用lpop把消息从队列头部取出
操作命令
-
lpush keyList value1 value2 value3 .... 在集合的左边依次插入value
例如:lpush ids 1 2 3 4 5 得到的结果内容为 5 4 3 2 1 -
rpush keyList value1 value2 value3 ... 在集合的右边依次插入value
例如:rpush ids 1 2 3 4 5 得到的结果为 1 2 3 4 5 -
llen keyList :获取key的长度
-
lrange keyList beginindex endIndex :获取key中的元素,beginindex为开始下标,endIndex 为结束下标,endIndex 为-1时表示全部内容。 -2表示到倒数第二个。
-
lpop keyList :取出并移除keyList的第一个元素
-
rpop keyList :取出并移除keyList的最后一个元素
-
lindex keyList index:获取keyList 下标为index的值(下标从0开始)
-
lrem keyList count value :删除count个value。count为正数,从头开始,删除count个value元素;count为负,则从尾部向头删除|count|个value元素;count为0,则所有的元素为value的都删除
-
rpopkpush keyList1 keyList2 将keyList1的最后一个元素,加入到keyList2的最前面。
常用此命令来做消息队列的处理,因为其能保证弹出和压入的一致性。整个操作是原子性的。
如果keyList1 和keyList2为同一个集合的话,那么将形成一个循环链表结构
3)set 数据结构
set类型是一种无序类型,在redis内部是通过 HashTable实现,查找和删除元素十分快速,可以用于记录一些不能重复的数据
应用场景
- 投票系统 ,比如一天一个用户只能投一次票,可以用日期为key,保证唯一性,效率很高。
- 微博等的用户关注及粉丝等
在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
常用命令
-
sadd key value1 value2 ... : 向set添加元素
-
srem key value :从set中移除元素
-
smembers key : 取出所有set元素
-
SISMEMBER key value: 查看value是否存在set中 返回1表示存在,返回0不存在
-
scard key : 获取set中元素的个数
-
SRANDMEMBER key: 随机取出一个
set的交集,并集,差集等操作:
-
SUNION key1 key2 ... keyN:并集 ,将所有key合并后取出来,相同的值只取一次
-
SDIFF key1 key2 ... keyN:差集,获取第一set中不存在于后面几个set里的元素。
-
SDIFFSTORE dstkey key1 key2 ... keyN:和sdiff相同,获取key1中不存在其他key里的元素,但要存储到dstkey中。
-
SINTER key1 key2 ... keyN:取出这些set的交集
-
SINTERSTORE dstkey key1 key2 ... keyN:取出这些key的交集并存储到dstkey
-
SMOVE srckey dstkey member:将元素member从srckey中转移到dstkey中,这个操作是原子的。
4)sorted set 有序set
sorted set 类似于set ,只不过sorted set 是一种有序集合。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
应用场景
常用命令
-
ZADD key score member:向有序set中添加元素member,其中score为分数,默认升序;
-
ZRANGE key start end [WITHSCORES]:获取按score从低到高索引范围内的元素,索引可以是负数,-1表示最后一个,-2表示倒数第二个,即从后往前。withscores可选,表示获取包括分数。
-
ZREVRANGE key start end [WITHSCORES]:同上,但score从高到低排序。
-
ZCOUNT key min max:获取score在min和max范围内的元素的个数
-
ZCARD key:获取集合中元素的个数。
-
ZINCRBY key increment member:根据元素,score原子增加increment.
-
ZREMRANGEBYSCORE key min max:清空集合内的score位于min和max之间的元素。
-
ZRANK key member:获取元素的索引(照score从低到高排列)。
-
ZREM key member:移除集合中的该元素
-
ZSCORE key member:获取该元素的score
5)hash 数据结构
hash类型是每个key对用一个HashTable,适合于存储对象,例如用户的信息对象,用户id作为key,具体信息作为value
使用场景
- 用于存储部分变更的对象信息,如用户数据。
常用命令
-
HSET key field value:key是对象名,field是属性,value是值;
-
HMSET key field value [field value ...]:同时设置多个属性
-
HGET key field:获取该对象的该属性
-
HMGET key field value [field value ...]:获取多个属性值
-
HGETALL key:获取对象的所有信息
-
HKEYS key:获取对象的所有属性
-
HVALS key:获取对象的所有属性值
-
HDEL key field:删除对象的该属性
-
HEXISTS key field:查看对象是否存在该属性
-
HINCRBY key field value:原子自增操作,只能是integer的属性值可以使用;
-
HLEN key: 获取属性的个数。
8、设置密码
网友评论