1 // key存在, 则覆盖原值 2 set key value 3 4 // 获取值 5 get key 6 7 // 删除值 8 del key 9 10 // 判断性添加数据; key存在,则添加失败 11 setnx key value 12 13 // 添加/修改多个数据 14 mset key1 value1 key2 value2 ... 15 16 // 获取多个数据 17 mget key1 key2 ... 18 19 // 获取数据字符个数(字符串长度) 20 strlen key 21 22 // 设置数据具有指定的生命周期 23 setex key seconds value
key的设置约定:
数据库中的热点数据key命名惯例
表名:主键名:主键值:字段名(非必须)
1 // 添加/修改数据 2 hset key field value 3 4 // 获取数据 5 hget key field 6 7 // 删除数据 8 hdel key field1 [field2] ... 9 10 // 添加/修改多个数据 11 hmset key field1 value1 field2 value2 … 12 13 // 获取多个数据 14 hmget key field1 field2 …
案例:
双11活动日,销售手机充值卡的商家对移动、联通、电信的30元、50元、100元商品推出抢购活动,每种商品抢购上限1000张
hmset id:001 c30 1000 c50 1000 c100 1000
hmset id:002 c30 1000 c50 1000 c100 1000
hincrby id:001 c30 -5
hincrby id:001 c50 -15
1 // 添加/修改数据 2 lpush key value1 [value2] …… 3 rpush key value1 [value2] …… 4 5 // 获取范围之间的数据 6 lrange key start stop 7 8 // 获取指定索引的数据 9 lindex key index 10 11 // 获取并移除数据 12 lpop key 13 rpop key 14 15 // 规定时间内获取并移除数据 16 blpop key1 [key2] timeout 17 brpop key1 [key2] timeout
1 // 添加数据 2 sadd key member1 [member2] 3 4 // 删除数据 5 srem key member1 [member2] 6 7 // 获取集合数据总量 8 scard key 9 10 // 判断集合中是否包含指定数据 11 sismember key member
1 zadd key score member 2 zrange key start stop [withscores]
1 // 删除键值 2 del key 3 4 // 设置键的有效时长 5 expires key seconds 6 7 // 查看键的有效时长 8 ttl key 9 10 // 判断key是否存在 11 exists key 12 13 // 将key变为永久有效 14 persist key
数据库操作
1 // 选择数据库 (index的值为0-15) 2 select index 3 4 // 查看当前数据库中键的个数 5 dbsize
1 redis.maxTotal=502 redis.maxIdel=103 redis.host=localhost 4 redis.port=6379
1 public class JedisUtils { 2 3 private static JedisPool jp; 4 5 static { 6 ResourceBundle bundle = ResourceBundle.getBundle("redis"); 7 int maxTotal = Integer.parseInt(bundle.getString("redis.maxTotal")); 8 int maxIdel = Integer.parseInt(bundle.getString("redis.maxIdel")); 9 String host = bundle.getString("redis.host"); 10 int port = Integer.parseInt(bundle.getString("redis.port")); 11 12 //Jedis连接池配置 13 JedisPoolConfig jpc = new JedisPoolConfig(); 14 jpc.setMaxTotal(maxTotal); 15 jpc.setMaxIdle(maxIdel); 16 jp = new JedisPool(jpc,host,port); 17 } 18 19 public static Jedis getJedis(){ 20 return jp.getResource(); 21 } 22 23 }
1 public static void main(String[] args) { 2 //1.获取连接对象 3 Jedis jedis = JedisUtils.getJedis(); 4 //2.执行操作 5 // jedis.set("age","39"); 6 // String hello = jedis.get("hello"); 7 // System.out.println(hello); 8 // jedis.lpush("list1","a","b","c","d"); 9 // List<String> list1 = jedis.lrange("list1", 0, -1); 10 // for (String s:list1 ) { 11 // System.out.println(s); 12 // } 13 jedis.sadd("set1","abc","abc","def","poi","cba"); 14 Long len = jedis.scard("set1"); 15 System.out.println(len); 16 //3.关闭连接 17 jedis.close(); 18 }
RDB:
AOF:
1 # 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合 2 # 这里表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改 3 # 如果想禁用RDB持久化的策略,只要不设置任何save指令,或者给save传入一个空字符串参数也可以 4 save 900 1 5 save 300 10 6 save 60 1 7 8 #rdb文件的名字。 9 dbfilename dump.rdb 10 11 # 对于存储到磁盘中的快照(rdb),可以设置是否进行压缩存储。如果是的话,redis会采用 12 # LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能 13 rdbcompression yes 14 15 # 在存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约 16 # 10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能 17 rdbchecksum yes 18 19 # dbfilename文件存放目录。必须是一个目录,aof文件也会保存到该目录下。 20 dir ./
1 # 是否启用aof持久化方式 。否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。 2 # 因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no 3 appendonly no 4 5 # 指定更新日志(aof)文件名,默认为appendonly.aof 6 appendfilename "appendonly.aof" 7 8 #指定更新日志条件,共有3个可选值: 9 # no:表示等操作系统进行数据缓存同步到磁盘(快,持久化没保证) 10 # always:同步持久化,每次发生数据变更时,立即记录到磁盘(慢,安全) 11 # everysec:表示每秒同步一次(默认值,很快,但可能会丢失一秒以内的数据) 12 # appendfsync always 13 appendfsync everysec 14 # appendfsync no 15 16 # 指定是否在后台aof文件rewrite期间调用fsync,默认为no,表示要调用fsync(无论后台是否有子进程在刷盘)。 17 # Redis在后台写RDB文件或重写AOF文件期间会存在大量磁盘IO,此时,在某些linux系统中,调用fsync可能会阻塞。 18 #如果应用系统无法忍受延迟,而可以容忍少量的数据丢失,则设置为yes。如果应用系统无法忍受数据丢失,则设置为no。 19 no-appendfsync-on-rewrite no 20 21 #当AOF文件增长到一定大小的时候Redis能够调用 BGREWRITEAOF 对日志文件进行重写 。当AOF文件大小的增长率大于该配置项时自动开启重写。 22 auto-aof-rewrite-percentage 100 23 24 #当AOF文件增长到一定大小的时候Redis能够调用 BGREWRITEAOF 对日志文件进行重写 。当AOF文件大小大于该配置项时自动开启重写 25 auto-aof-rewrite-min-size 64mb
问题二: Master调用BGREWRITEAOF重写AOF文件,占用大量CPU和内存资源,导致load过高,出现短暂服务暂停现象
问题三:主从复制的性能问题
原文:https://www.cnblogs.com/bin563597293/p/14367426.html