一、nosql的四大种类
1、四大种类
二、什么是redis?
1、redis概述
Remote dictory Server(远程字典服务),是一个用c语言编写、支持网络、基于内存可持久化的日志型、key-value数据库,提供多种语言的api。
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串
(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间
(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions)
和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
这是官方的原话翻译,所以可看出redis可用于数据库、缓存和消息中间件以及其数据结构
三、redis性能测试
在Linux或Window安装redis之后,安装内容有一个redis-benchmark,这是redis自带的性能测试工具,执行命令为redis-beachmark [option] [option value]
下面是菜鸟教程罗列的参数
四、redis的基础知识
1、redis有十六个数据库
在安装的redis配置文件中可以看到,默认的使用的数据库为0,可以指定数据库,从0到‘databases’-1,而databases为16
2、redis是单线程的
redis是基于内存进行操作的,所以是根据机器的内存和带宽来决定其性能,而不是根据CPU,而如果redis是多线程,那么就需要cpu来调度,cpu在多线程的上下文切换会耗时,所以能使用单线程就使用单线程,这是最佳方案。
五、redis的基本命令
1、keys *
:显示所有key
2、set [key] [key值]
:添加数据
3、get [key]
:获取key的值
4、exists [key]
:判断key是否存在
5、type [key]
:显示key的数据类型
6、move [key] [16个数据库中任意一个]
:将key移动到某个数据库
7、select [16个数据库中任意一个]
:切换数据库
8、flushdb
:清除当前数据库内容
9、flushall
:清除所有数据库内容
10、dbsize
:查看当前数据库大小
11、expire [key] [数字/秒]
:设置key的失效时间
12、ttl [key]
:显示生存时间
六、redis的五大数据类型
1、String(字符串)类型
上面基本命令的添加数据和获取key值添加的就是String类型的值
(1)append [key]
:追加在最后面,如果追加的key不存在,则相当于创建一个新的key
(2)incr [key]
:加1
(3)decr [key]
:减一
(4)incrby [key] [数值]
:添加数值,可指定增量
(5)decrby [key] [数值]
:减少数值,可指定增量
(6)getrange [key] 起始下标 结束下标
:获取指定范围的字符串,第一个的下标值为0,且为闭区间
(7)getrange [key] 0 -1
:查看全部字符串
(8)setrange [key] [下标] [替换的字符串]
:替换指定位置的字符串,替换超过原本字符串长度,则追加在后面
(9)setex [key] [生存时间] [key value]
:添加数据并设置生存时间
(10)setnx [key] [key value]
:添加key,不存在时添加
(11)mset [key] [value] [key] [value]
:一次设置多个key
(12)msetnx [key] [value] [key] [value]
: 如果不存在则添加,是原子性的,也就是要么一起成功,要么一起失败
(13)set user {name:chen,age:12}
:设置对象,值设置为json格式
(14)getset [key] [value]
:值不存在时返回空,并将value设置,若存在则返回原来的值,再覆盖调原来的值
2、list类型
(1)LPUSH [key] [value]
:添加数据,往左边插入数据
(2)LPUSH [key] 0 -1
:获取所有数据
(3)LPUSH [key] [start] [stop]
:获取所有数据获取指定下标的数据
(4)RPUSH [key] [value]
:添加数据,往右边插入数据
(5)LPOP [key]
:左边移除数据,移除最左边的数据
(6)RPOP [key]
:右边移除数据,移除最右边的数据
(7)LRAM [key] [count] [value]
:移除指定元素
(8)LTIME [key] [count] [value]
:截取指定位置元素
(9)RPOPLPUSH [source] [destination]
:移除数组最后一位元素至另外一个数组
(10) LSET [key] [index ] [value]
:根据下标插入数据
(11)LINSERT [key] before|after pivot value
:根据元素前插入数据
3、Set(集合)
在list中的值是可以重复的,但是在Set中是不可以的。
(1)sadd [key] [value]
:添加元素
(2)smembers [key]
:显示集合所有元素
(3)scard [key]
:显示元素个数
(4)srem [key] [value]
:移除指定元素
(5)srandmember [key] [value]
: 随机取集合中的元素,可指定个数
(6)spop [key]
:随机移除元素
(7)smove [key1] [key2] [value]
:将value从key1移动至key2
(8)sdiff [key1] [key2]
:差集
(9)sinter [key1] [key2]
:交集
(10)sunion [key1] [key2]
:并集
3、Hash(哈希)
相当于key:(key:value),所以用法其实与string差不多
(1)hset [key] [field] [value]
:添加数据,所以一个key中有多个值,也就是可以有多对键值对
(2)hget [key] [field]
:获取数据
(3)hmset [key] [field] [value] [field] [value]
:可添加多条数据
(4)hmget [key] [field] [field]
:获取多条数据
(5)hgetall [key]
:获取key中全部数据,包含所有键值对信息
(6)hdel [key] [field] [field]:删除数据,可删除一个也可删除多个
(7)hexists [key] [field]:判断key是否存在
(8)hincrby [key] [field] [incrment] :加incrment
(9)hsetnx [key] [field] [value]:如果已经存在则不添加,不存在则添加
4、Zset(有序集合)
使用与set基本一致,只是在set的基础上加上排序
(1)zadd [key] [score] [member]
:添加数据,与set基本一致
(2)zrange [key] start stop
:获取数据,必须设置起始和终止点,从小到大排序
(3)zrevrange [key] start stop
:从大到小排序
(3)zrangebyscore [key] min max
:排序,设置最小值及最大值,输出内容会在这个范围从小到大排序
(4)zrangebyscore [key] min max withscore
:同样是排序,但是加上了数据大小显示
(5)zrem [key] member
:移除某个元素
(6)zcount [key] min max
:获取指定区间的成员数量
七、三种特殊类型
1、geospaial(地理位置)
也就是这个数据类型使用来存储地理位置的,存的是经度纬度,有效范围官方给出如下:
但是为什么存的是经纬度却没有将其并入基本数据类型呢?因为其实geospaial的数据类型是 Zset
类型
关于geo命令也是只有六条点击跳转官网查看
(1)geoadd [key] 经度 纬度 member
:添加数据
(2)geopos [key] member
:查看指定数据的经纬度
(3)geodist [key] member1 member2
:返回两个地点的距离
(4)geohash [key] member
:返回地理数据的geohash字符串,11位
(5)georadius [key] 经度 纬度 范围 单位
: geo返回指定经纬度的附近数据(附近范围可指定)
(6)georediusbymember [key] member 距离 单位
:找出指定member范围的数据
2、Hyperloglog基数统计
用作于基数统计,有错误率,所以只适用于允许容错的,底层实际是string
(1)pfadd [key] element1 element2...
:添加数据
(2)pfcount [key]
:查看key数据数量
(3)pfmerge [存放合并后的key] [合并的key] [合并的key]
:合并key
3、Bitmaps(位存储)
存储0和1,可用来代表true、false等,数据类型是string
(1)setbit [key] offset value
:添加数据
(2)getbit [key] offset:获取数据
(3)bitcount [key]
:为1的数量