redis是C语言编写的一个高性能的键值存储的非关系型数据库
非关系型数据库的优点与缺点:
非关系型数据库也叫NoSQL(not only sql)
优点:可以轻松地处理海量数据
缺点:
1.没有主外键,则数据关系不能一目了然
2.没有强大的事务来支持,那么数据就相对来说不安全
3.不支持sql,不能进行复杂的查询
redis存储是键值对key-value(map)
redis数据类型
key:字符串
value:常见有五种数据类型(String、hash、list、set、sorted set(zset))
String相关的常用命令:
1.set命令(增加、修改):如果数据库中没有改key,则增加数据
如果数据库中存在该key值,则修改原有key对应的value
命令格式:set key value set name admin
2.get命令(查询):查询该key对应的value
命令格式:get key get name
3.del命令(删除):删除该key对应的value
命令格式:del key del name
4.getset key value :获取该key原有值,然后赋新值
5.incr key:自增1。如果该值不存在,其初始值为0;在incr 之后其值不能转为整数数字,则该操作失败并返回相应的错误信息
6.incrby key n:指定自赠数
7.decr key:自减1,如果该key不存在,其初始值为0,在decr之后其值变为-1,如果value的值不能转为整数数字,则该操作失败并返回相应的错误信息;
8.decrby key n:指定自减数
9.append key value:拼接字符串。如果该key存在,则在原值后追加其值;如果key不存在,则重新创建一个key/value
Hash类型相关的常用命令:
1.赋值:hset hashname key value:为指定的hashname设定key/value
2.取值: hget hashname key:返回指定的hashname中的key的值
3. 删除:hdel hashname key[key1...]:可以删除指定hashnam中的一个或多个值
hdel hashname:删除整个hash
Key相关的常用命令:
1.keys *:查询所有key
2.del key1 key2...:删除多个key
3.exists key:判断该key是否存在,返回1存在,返回0不存在
4.type key:获取该key对应的value的类型
5.expire key:设置key的过期时间,单位秒。不设置默认不过期。
6.ttl key:查看当前key的剩余时间,如果没有设置expire,则返回-1;如果已经过期则返回-2;
Redis集群的原理
slot槽与数据分片存储(储存原理)
Redis集群中内置类16384【0-16383】个槽,redis会根据节点数量大致均等的将16384个槽映射到不同的节点。当需要在redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384取余。这样每个key都会对应一个编号在0-16384之间的槽。