1. 五种数据类型
string (单值)
| 指令 | 描述 |
|---|---|
| set | 设置一个key/value |
| get | 根据key获得对应的value |
| mset | 一次设置多个key value |
| mget | 一次获得多个key的value |
| getset getset age 19 | 获得原始key的值,同时设置新值 |
| setex setex key ex value | 设置一个key存活的有效期(秒) |
| psetex | 设置一个key存活的有效期(豪秒) |
| setnx | 只有当这个key不存在时等效set操作 |
| msetnx | 可以同时设置多个key,在key不存在时有效 |
| strlen | 获得对应key存储value的长度 |
| append | 为对应key的value追加内容 |
| getrange | 截取value的内容,对原始的值没有影响 |
| decr | 进行数值类型的-1操作 |
| decrby | 根据提供的数据进行减法操作 |
| incr | 进行数值类型的+1操作 |
| incrby | 根据提供的数据进行加法操作 |
| incrbyfloat | 根据提供的数据加入浮点数 |
list
| 指令 | 描述 |
|---|---|
| lpush | 将某个值加入到一个key列表头部 |
| lpushx | 同lpush,但是必须要保证这个key存在 |
| rpush | 将某个值加入到一个key列表末尾 |
| rpushx | 同rpush,但是必须要保证这个key存在 |
| lpop | 返回和移除列表的第一个元素 |
| rpop | 返回和移除列表的最后一个元素 |
| lrange | 获取某一个下标区间内的元素 |
| llen | 获取列表元素个数 |
| lset lset key index value | 设置某一个位置的元素(替换已有的某个值) |
| lindex lindex key index | 获取某一个位置的元素 |
| lrem lrem key 2 xxx | 从列表头起,删除对应个数的指定元素 |
| ltrim | 保留列表中特定区间内的元素,将其他的元素删除 |
| linsert key after/before old new | 在某一个元素之前,之后插入新元素 |
set
| 指令 | 描述 |
|---|---|
| sadd | 为集合添加元素 |
| smembers | 显示集合中所有元素 无序 |
| scard | 返回集合中元素的个数 |
| spop | 随机返回并移除一个元素 |
| smove smove setFrom setTo xxx | 从一个集合中向另一个集合移动元素 |
| srem | 从集合中删除一个元素 |
| sismember sismember set77 值 | 判断一个集合中是否含有这个元素 |
| srandmember | 随机返回元素,对原始数据没有影响 |
| sdiff sdiff seta setb | 减去两个集合中共有的元素 |
| sinter | 求交集 |
| sunion | 求并集 |
zset
| 指令 | 描述 |
|---|---|
| zadd zadd key 10 a 5 b 30 c | 添加一个有序集合元素,根据元素的score排序 |
| zcard | 返回集合的元素个数 |
| zrange | 返回一个范围内的元素 |
| zrangebyscore | 按照分数查找一个范围内的元素 |
| zrank zrank key xx | 返回对应元素的排名 |
| zrevrank | 返回对应元素倒序排名 |
| zscore zscore key xxx | 显示某一个元素的分数 |
| zrem | 移除某一个元素 |
| zincrby zincrby key 10 lining | 给某个特定元素加分 |
hash
| 指令 | 描述 |
|---|---|
| hset | 设置一个key/value对 |
| hget | 获得一个key对应的value |
| hgetall | 获得所有的key/value对 |
| hdel | 删除某一个key/value对 |
| hexists | 判断一个key是否存在 |
| hkeys | 获得所有的key |
| hvals | 获得所有的value |
| hmset | 设置多个key/value |
| hmget | 获得多个key的value |
| hsetnx | 设置一个不存在的key的值 |
| hincrby hincrby key k 2 | 为value进行加法运算 |
| hincrbyfloat | 为value加入浮点值 |
其他一些常见指令
`keys *` 查看所有key
`ttl key` 查看剩余存活时间
`del key` 删除key
`select 5` 切换到第6个库
`flushDB` 删除当前库的所有数据
2. Redis的持久化方式
讲到Redis的持久化,就不得不提一下Redis为什么要持久化。众所周知,redis的数据全部在内存中,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证redis的数据在遇到突发状况的时候不会丢失,或者只丢失少量,于是必须根据一些策略来把redis内存中的数据写到磁盘中,这样当redis服务重启中,就可以根据磁盘中的数据来恢复数据到内存中。
而Redis的持久化方式有RDB和AOF两种当二者同时运行,Redis会默认选择AOF
作为数据恢复原本
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。(保存的是数据集)
AOF持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集.(一般情况下一秒钟进行一次本地持久化)
3. RDB的执行原理
Redis 会单独的创建(fork) 一个
子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程结束了,再用这个临时文件替换上次持久化还的文件。整个过程中,主进程是不进行任何 IO 操作,这就确保了极高的性能,如果需要进行大规模的数据恢复,且对于数据恢复的完整性不是非常敏感,那 RDB 方法要比 AOF 方式更加的高效。
RDB 的缺点是最后一次持久化后的数据可能丢失。(这一丢就可能会丢很多了)
Fork 的作用是复制一个与当前进程一样的进程,新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程(子线程的产生依赖于linux底层的c函数库中的fork()函数)
4. AOF重写的作用
为了解决AOF文件体积膨胀的问题,Redis提供了AOF重写功能:Redis服务器可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个文件所保存的数据库状态是相同的,但是新的AOF文件不会包含任何浪费空间的冗余命令,通常体积会较旧AOF文件小很多。
BGREWRITEAOF手动调用AOF重写功能
5. bind的作用
指定哪些端口可以访问我们的redis服务器
bind和protectmode要配合使用,而protectmode的值要写成yes