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