一、初始
1.redis特性
1.1:速度快(使用内存条内存、代码简洁而且是C语言、单线程【避免线程切换和静态资源消耗】)
1.2:持久化
1.3:多种数据结构(String、List、Set、Zset、Hash)
1.4:支持多种编辑语言
1.5:功能丰富(发布订阅、Lua脚本实现自定义功能、支持简单事务、pipeline提高客户端的并发效率)
1.6:简单(代码简洁、使用简单)
1.7:主从复制
1.8:分布式、集群高可用
2.使用场景
2.1:缓存功能
2.2:计数器
2.3:消息队列模式
2.4:排行榜
2.5:社交网络
2.6:实时系统(垃圾邮件)
3.启动方式
3.1:默认直接启动
3.2:带参数启动
3.3:指定配置文件启动
4.常用配置
4.1:端口(port)
4.2:是否设置为守护进程(建设设置为:yes)
4.3:日志文件(logdir)
4.4:文件存放地址(dir)
二、API的理解和使用
1.通用命令
1.1:keys *(罗列所有的keys、不建议使用【可在从节点使用】)、keys h*【罗列h开头的key】
1.2:dbsize(统计存在的key数量、有统计数据机制)
1.3:del key(删除指定的key,可删除多个)
1.4:exists key(判断key是否存在,不存在返回0,存在返回1)
1.5:expire key(设置key过期时间)、ttl(查看还有多长时间过期。-2表示已经过期不存在。-1表示key存在而且没有过期时间)、persist(去掉key的过期时间)
1.6:type key(判断key值的类型。String、List、Hash、Set、Zset、None【不存在key时返回】)
2.数据结构和内部编码
使用空间换时间方式:
string=》(raw、int、embstr)、hash=》(hashtable、ziplist)、list=》(linkedList、ziplist)、set=》(hashtable、intset)、zset=》(skiplist、ziplist)
redisObject存在两种数据(数据类型:type【string、list、hash、set、zset】、编码方式:encoding【raw、int、ziplist、hashtable、linkedlist、hashmap、intset】)
3.单线程
redis属於单线程模式【拒绝长命令(keys、flushall、slow lua script....)】,会出现阻塞现象
3.1:redis单线程快=》纯内存【主要原因】、非阻塞IO、避免线程切换和静态资源消耗
4.字符串(缓存、计数器、分布式锁)
4.1:命令
get key(获取key对应的值)
mget key1 key2 key3...(批量获取值,时间复杂度O(n))
mset key1 value1 key2 value2...(批量设置值,时间复杂度O(1))
set key value(设置key的值为value、不管key是否存在、都设置)
set key value nx(设置key的值为value、key不存在、才设置)
set key value xx(设置key的值为value、key存在、才设置)
incr key(#key自增1、如果key不存在、自增后get(key)=1)
decr key(#key自减1、如果key不存在、自减后get(key)=-1)
incrby key k(#key自增1、如果key不存在、自增后get(key)=k)
decrby key(#key自减k、如果key不存在、自减后get(key)=-k)
getset key newvalue(#set key newvalue并返回旧的value)
append key value(#将value追加到旧的value)
strlen key(返回字符串长度【注意中文】)
incrbyfloat key 4.5(增加key对应的值3.5)
getrange key start end(获取字符串指定下标所有的值)
setrange key index value(设置指定下标所对应值)
4.1:结构和命令
4.2:快速实战
4.3:内部编码
4.4:查漏补缺