redis

- Redis的五大数据类型

 - String 字符串



 1. 一个key 对应一个value

 1. List item

 1. String类型是二进制安全的,意思是redis的String可以包含任何数据,比如jpg图片序列化对象

一个redis中字符串value最多可以是512M

1. Hash(哈希)

 1. Redis hash 是一个键值对集合
 3. Redis hash 是一个string类型的field和value 的映射表,hash特别适合用于储存对象类似于java里面的Map<String,Object>

- List(列表)

 1. Redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素列表的头部(左边),或者尾部(右边) 它的底层时间就是一个链表

- Set(集合)

无序无重复
Zset(sorted set:有序集合)
Redis zset 和 set 一样也是String 类型元素的集合,且不允许重复的成员
不同的是每一个元素都会关联一个double类型的分数
Redis正是通过分数来为集合中的成员进行从小到大的排序,zset的成员是惟一的,但是分数score却可以重复

  • Redis常见数据类型操作命令 http://redisdoc.com/

  • 分布式内存数据库,内存数据库

  • Redis 键(key)

Exists key 判断是否存在key
Expire key 秒钟 : 设置key多长时间过期
ttl key : 查看key还有多少秒过期 -1 永不过期 -2 已过期
type key : 查看你的key是什么类型

- String

Set key value:设值值
Get key:取值
Del key删除
Append key value: 追加
Strlen key:数据长度

- -----仅对数字有效----

Incr key :追加一
IncrBy key value : 追加value
Decr key : 追减一
Decrby key value : 减 value
Getrange key index index:范围内取值
Setrange key inde:范围内设值
Setex key 秒值 value : 设置过期时间
Mset k1 v1 k2 v2 : 设置多个key以及value
Mget k1 k2 k3 : 获取多个key的value值
Msetnx key value : 首先判断key是否存在如果存在不添加,不存在添加

- List

Lpush key value… : 添加list数据倒序输出
Rpush key value… : 添加list数据正序输出
Lrange key start end : 选择输出
Lpop : 栈顶输出
Rpop : 栈底输出
Index : 按照索引获得元素
Llen key : 获取list 长度
Lrem key 删除N 个value
Ltrim key 开始index 结束index ,获取指定范围的值给key
Rpoplpush key key : 元列表 目的列表
Lset key index value:
Linsert key before/after 值1 值2

- Set

Sadd key value1 value2 : 添加时自动去掉重复的值
Smembers key:获取集合全部元素
Sismember key value : 判断是否有value值
Scrad key : 获取集合数据个数
Srem key value : 删除集合中元素
Srandmember key : 随机出现几个数据
Spop key : 随机出栈
Sdiff key1 key2 key3: 差集
Sinter key1 key2 key3 : 交集
Sunion key1 key2 key3 : 并集

- Hash

Hset key field value :
Hget key field
Hmset key field value field value
Hmget key field field
Hgetall key
Hdel key field
Hkeys
Hvals
Hlen
Hexists key :在key里面的某个值得key

- Zset

Zadd
Zrange
Zrangebyscores
Zrem key score
Zcard key

- 配置文件

config
1.config get dir : 获取启动路径
2.config get requirepass 查看密码
3.config set requirepass “” 设置密码

- 缓存过期配置:

maxmemory-policy noeviction
 volatile-lru -> Evict using approximated LRU among the keys with an expire set.
  • 使用LRU算法移除key,只对设置了过期时间的键
 allkeys-lru -> Evict any key using approximated LRU.
  • 使用LRU算法移除
volatile-lfu -> Evict using approximated LFU among the keys with an expire set.  
allkeys-lfu -> Evict any key using approximated LFU.     
volatile-random -> Remove a random key among the ones with an expire set.
  • 在过期集合中移除随机的key,只对设置了过期时间的键
allkeys-random -> Remove a random key, any key.
  • 移除随机
volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
  • 移除TTL值最小的key,那些最近要过期的key
noeviction -> Don't evict anything, just return an error on write operations.
  • 永不过期,不进行移除,

maxmemory-samples 5

  • 设置样本数量,LRU算法和最小TTL算法都并不是精确的算法,而是估算值,所以你可以设置样本的大小,reids默认会检查这么多个key并选取其中的LRU的那个
  • 持久化之RDB
在指定的时间间隔将内存中的数据集快照写入磁盘,也就是说行话Snapshot快照,它恢复时是将快照文件直接读到内存
Redis会单独创建(fork)一个子进程来进行持久化,会将数据写入到一个临时文件中,
待持久化结束了,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程是不进行任何IO操作的,
这就是确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,
那RDB方式要比AOF方式更有效,RDB的缺点是最后一次持久化后的数据可能丢失

Fork:Fork的作用是复制一个与当前进程一样的进程,
新的进程的所有数据(变量,环境变量,程序计数器等)数据都与原进程一致,但是是一个全新的进程,并作为原进程的子程序
RDB保存的是dump.rdb文件
Redis默认读取dump.rdb文件
  • Redis 备份

RDB 是整个内存的压缩过的Snapshot ,RDB的数据结构,可以配置复合的快照触发条件
一下是默认情况:
SNAPSHOTTING //快照

Save the DB on disk:
 #  save <seconds> <changes>
# Will save the DB if both the given number of seconds and the given
   #number of write operations against the DB occurred.

 #  In the example below the behaviour will be to save:
  # after 900 sec (15 min) if at least 1 key changed
  # after 300 sec (5 min) if at least 10 keys changed
 #  after 60 sec if at least 10000 keys changed

save 900 1 //15分钟修改一次保存rdb文件
save 120 10 //2分钟修改一个保存rdb文件
save 60 10000 //一分钟修改1万次保存rdb文件
如果直接使用save指令立即备份

禁用快照,不要设置任何save指令 或者 save “”

stop-writes-on-bgsave-error yes
如果配置为no表示你在乎数据不一致或者有其他手段发现和控制


#Compress string objects using LZF when dump .rdb databases?
#For default that's set to 'yes' as it's almost always a win.
#If you want to save some CPU in the saving child set it to 'no' but
#the dataset will likely be bigger if you have compressible values or keys.
rdbcompression yes

rdbcompression : 对于储存到磁盘中的快照,可以设置是否进行压缩,如果是的话,redis会采用LZF算法进行压缩,如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能

#Since version 5 of RDB a CRC64 checksum is placed at the end of the file.
#This makes the format more resistant to corruption but there is a performance
#hit to pay (around 10%) when saving and loading RDB files, so you can disable it
#for maximum performances.
#
#RDB files created with checksum disabled have a checksum of zero that will
#tell the loading code to skip the check.
rdbchecksum yes

在储存快照后,还可以让redis使用CRC64算法来进行数据效验,但是这样会增加大约10%的性能消耗,如果希望获取最大的性能提升,可以关闭此功能

#The filename where to dump the DB
dbfilename dump.rdb
#数据库默认获取数据文件
#The working directory.
#
#The DB will be written inside this directory, with the filename specified
#above using the 'dbfilename' configuration directive.
#
#The Append Only File will also be created inside this directory.
#
#Note that you must specify a directory here, not a file name.
dir ./
工作目录将数据保存到当前文件夹下产生rdb文件


如何触发RDB快照
   冷拷贝:cp dump.rdb dump_bk.rdb后重新使用

 命令save 与bgsave
   Save 只管保存其他堵塞
   Bgsave 后台异步拷贝,快照同时可以响应客户端信息,可以通过lastsave命令获取最后一次快照时间
   Flushall 也会产生dump.rdb文件,但是里面是空的没有意义

优势:适合大规模数据恢复,对数据完整性和一直要求不高

劣势:在一定时间内做一个备份,所以如果redis意外down掉的话,就会丢失最后一次快照的所有的修改,fork的时候,内存中的数据被克隆了一大份,大致2倍的膨胀性需要考虑

如何停止:动态所有停止RDB保存规则的方法,config set save “”

小总结: RDB是一个非常紧凑的文件
         RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程完成,父进程不需要再做其他的IO操作,所有RDB持久化方式最大化了Redis的性能
         与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些
         数据丢失风险大
         RDB需要经常fork子进程保存数据集到硬盘上,当数据集比较大小的时候,fork的过程是非常耗时的,可能会导致Redis在一些毫秒级不能想应端请求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值