关系型数据库和非关系型数据库的区别:
①存储结构不同,关系型数据库是二维表格的方式,非关系型数据库是键值对的形式(文档、图文等);
②扩展方式不同,关系型数据库是纵向提升硬件性能,非关系型数据库是横向增加节点服务器;
③事务形式,关系型数据库支持sql语句处理复制查询和操作,更加精准,非关系型数据库只支持简单的事务操作。
非关系型数据库的数据类型:
①string 字符串类型
②hash散列类型
③list列表类型
④set无序集合
⑤zset有序集合
redis为什么这么快?
①redis是纯内存结构,数据操作都是在内存中完成的;
②采用i/o多路复用,提高线程处理更多的连接请求;
③数据采用单线程模式,可以减少多线程切换的消耗,也不用考虑锁的性能消耗。
Redis 命令工具:
①redis-cli:
语法:redis-cli -h host -p port [-a password]
-h :指定远程主机
-p :指定 Redis 服务的端口号
-a :指定密码,未设置数据库密码可以省略-a 选项
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库
②redis-benchmark:
基本的测试语法:redis-benchmark [选项] [选项值]。
-h :指定服务器主机名。
-p :指定服务器端口。
-s :指定服务器 socket
-c :指定并发连接数。
-n :指定请求数。
-d :以字节的形式指定 SET/GET 值的数据大小。
-k :1=keep alive 0=reconnect 。
-r :SET/GET/INCR 使用随机 key, SADD 使用随机值。
-P :通过管道传输<numreq>请求。
-q :强制退出 redis。仅显示 query/sec 值。
--csv :以 CSV 格式输出。
-l :生成循环,永久执行测试。
-t :仅运行以逗号分隔的测试命令列表。
-I :Idle 模式。仅打开 N 个 idle 连接并等待。
#向 IP 地址为 192.168.169.10、端口为 6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能
redis-benchmark -h 192.168.169.10 -p 6379 -c 100 -n 100000
#测试存取大小为 100 字节的数据包的性能
redis-benchmark -h 192.168.169.10 -p 6379 -q -d 100
#测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能
redis-benchmark -t set,lpush -n 100000 -q
清除数据库内数据
FLUSHDB :清空当前数据库数据
FLUSHALL :清空所有数据库的数据,慎用!
错误修正:
在redis中添加list,字符串类型的键值对之后,redisDeskManager上提示了一些错误信息:
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error 大概意思是:Redis被配置为保存数据库快照,但它目前不能持久化到磁盘。用来修改集合数据的命令不能用。请查看Redis日志的详细日志信息。
方法:
在命令行添加:
127.0.0.1:6379> config set stop-writes-on-bgsave-error no
数据类型:
①string字符串类型:最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等;
set:为键设置新值,并覆盖原有值;
get:获取键的值;
strlen:获取指定值的长度;
exists:判断键是否存在;
incr:键值递增1;
decr:键值递减1;
del:删除已有键;
incrby:递增指定整数;
decrby:递减指定整数;
expire(setex):为键设置生命周期;
ttl:查看键的生命周期;
mset:设置多个键;
mget:查看多个键;
②list列表类型:列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素
lpush:+键 +多个值 ;
lrange:+键 0 -1 查看所有(0 2 查看第一个到第三个);
del:删除键;
lpop/rpop:移除并返回mykey键的左边/右边第一个元素;
llen:查看长度;
lindex:获取第几个索引的值;
linsert 键 before/after 旧值 新值:在旧值前面/后面插入新值;
③hash散列类型:hash用于存储对象。可以采用这样的命名方式:对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值
hset:为键设置新值,并覆盖原有值;
hget:获取键的值;
hstrlen:获取指定值的长度;
hexists:判断键是否存在;
hincr:键值递增1;
hdecr:键值递减1;
del:删除已有键;
hincrby:递增指定整数;
hdecrby:递减指定整数;
hexpire(setex):为键设置生命周期;
hmset:设置多个键;
hmget:查看多个键;
hkeys:获取所有字段的名字;
hvals:获取所有字段的值;
④set无序集合:元素具有唯一性,不允许存在重复的成员。多个集合类型之间可以进行并集、交集和差集运算。
sadd:+键 +多个值 ;
sismember:+键 +多个值 判断是否存在这个值;
smembers:查看所有的值;
scard:获取Set集合中元素的数量;
spop:随机的移除并返回Set中的某一成员;
srem myset a d f:从Set中移出a、d和f三个成员,其中f并不存在,因此只有a和d两个成员被移出,返回为2;
smove myset myset2 a:将a从myset移到myset2,从结果可以看出移动成功;
⑤zset有序集合:有序集合,元素类型为Sting,元素具有唯一性,不能重复
zadd:+键 +多个值 ;
zrange myzset 0 -1 WITHSCORES:0表示第一个成员,-1表示最后一个成员。WITHSCORES选项表示返回的结果中包含每个成员及其分数,否则只返回成员;
zrank myzset one :取成员one在Sorted-Set中的位置索引值。0表示第一个位置;
zrem:删除;
zincrby:成员不存在,zincrby命令将添加该成员并假设其初始分数;
zcard:查看是否删除成功;