Redis Li.073

Redis 简介 NoSQL NoSQL: 即Not-Only SQL(泛指非关系型的数据库), 作为关系型数据库的补充. 作用: 应对基于海量用户和海量数据前提下的数据处理问题. 特征 可扩容, 可伸缩 大数据量下高性能 灵活的数据模型 高可用 类NoSQL数据库: Redis memcache HBase MongoDB Redis安装与配置 wget https://github.com/redis/redis/archive/7.0.0.tar.gz mkdir -p /opt mv 7.0.0.tar.gz /opt/redis.tar.gz cd /opt tar -xzvf redis.tar.gz cd redis make redis.conf # 需要创建data dir /opt/redis/data #默认端口6379 port 6379 #绑定ip,如果是内网可以直接绑定 127.0.0.1, 或者忽略, 0.0.0.0是外网 bind 0.0.0.0 #守护进程启动 daemonize yes #超时 timeout 300 loglevel notice #分区 databases 16 save 900 1 save 300 10 save 60 10000 rdbcompression yes #存储文件 dbfilename dump.rdb #密码 abcd123 requirepass abcd123 /etc/systemd/system/redis.service, ExecStart与安装目录保持一致 [Unit] Description=Redis7 After=redis7.service [Service] Type=forking ExecStart=/opt/redis/src/redis-server /opt/redis/redis.conf ExecStop=/opt/redis/src/redis-cli shutdown ExecReload=/bin/kill -s HUP $MAINPID PrivateTmp=true RestartSec=10 # The UNIX user and group to execute PostgreSQL as [Install] WantedBy=multi-user.target 启动 systemctl daemon-reload systemctl start redis systemctl stop redis Redis的数据类型 String 存储的数据: 单个数据,最简单的数据存储类型, 也是最常用的数据存储类型 存储数据的格式: 一个存储空间保存一个数据 存储内容: 通常使用字符串, 如果字符串以整数的形式展示, 可以作为数字操作使用 基本操作 # 添加/修改数据 set key value # 获取数据 get key # 删除数据 del key # 判定性添加数据 setnx key value # 添加/修改多个数据 mset key1 value1 key2 value2 ... # 获取多个数据 mget key1 key2 ... 获取数据字符个数 strlen key 追加信息到原始信息后部(如果原始信息存在就追加, 否则新建) append key value String 类型数据的扩展操作 # 设置数值数据增加指定范围的值 incr key incrby key increment incrbyfloat key increment # 设置数值数据减少指定小范围的值 decr key decrby key increment # 设置数据具有指定的生命周期 setex key seconds value psetex key milliseconds value hash类型 新的存储需求: 对一系列存储的数据进行编组, 方便管理, 典型应用存储对象信息 需要的存储结构: 一个存储空间保存多个键值对数据 hash类型: 底层使用哈希表学习方式去实现数据存储 # 添加/修改数据 hset key field value # 获取数据 hget key field hgetall key # 删除数据 hdel key field1 [field2] # 设置field值, 如果该field存在则不做任何操作 hsetnx key field value # 添加/修改多个数据 hmset key field1 value1 field2 value2 ... # 获取多个数据 hmget key field1 field2 ... # 获取哈希表中字段的数量 hlen key # 获取哈希表中是否存在指定的字段 hexists key field hash类型数据扩展操作 # 获取哈希表中所有的字段名或字段值 hkeys key hvals key # 设置指定字段的数值数据增加指定范围的值 hincrby key field increment hincrbyfloat key field increment List 双链结构 # 从左存入 lpush list1 zs ls ww zl # 查询从start到end索引的数据 lrange list1 0 3 lrange list1 0 -1 # 从左移除一个 lpop list1 # 长度 llen list1 # 索引获取 lindex list1 1 list 扩展操作 # 先锋队指定数据 lrem key count value # 规定时间内获取并移除数据, 过了拿不以则返回null blpop key1 [key2] timeout brpop key1 [key2] timeout brpoplpush source destination timeout set # 添加数据 sadd key member1 [member2] # 获取全部数据 smembers key # 删除数据 srem key member1 [member2] # 获取集合数据数量 scard key # 判断集合中是否包含指定数据 sismember key member # 随机获取集合中指定数量的数据 srandmember key [count] # 随机获取集合中某个数据并将该数据移出集合 spop key [count] Set类型数据的扩展操作 # 求两个集合的交, 并, 差集 sinter key1 [key2 ...] sunion key1 [key2 ...] sdiff key1 [key2 ...] # 求两个集合的交,并,差集并存储到指定集合中 sinterstore destination key1 [key2 ...] sunionstore destination key1 [key2 ...] sdiffstore destination key1 [key2 ...] # 将指定数据从原始集合中移动到目标集合中 smove source destination member key 基本操作 # 删除指定key del key # 获取key是否存在 exists key # 获取key的类型 type key # 排序 sort # 改名 rename key newkey renamenx key newkey # 为指定key设置有效期 expire key seconds pexpire key milliseconds expireat key timestamp pexpireat key milliseconds-timestamp # 获取key的有效时间 ttl key pttl key # 切换key从时效性黑的为永久性 persist key # 查询scan, keys会阻塞不再推荐 SCAN cursor [MATCH pattern] [COUNT count] scan 0 MATCH list* COUNT 5 keys pattern # MATCH模式规则 # * 匹配什么问题数量的什么任意符号 ? 配合一个任意符号 []匹配一个指定符号 * 查询所有 hh* 查询所有以hh开头 *hh 查询所有以hh结尾 ??hh 查询所有前面两个字符什么任意, 后面以hh结尾 user:? 查询所有以user:开头,最后一个字符任意 u[st]er:1 查询以u开头,以er:1结尾,中间饮食一个字母,s或t db 基本操作 # 切换数据库 select index # 其他操作, 测试连通 ping # 清空当前库 flushdb # 清空所有库 flushall # 选择库 select # 移动 move # 查询库内存储个数 dbsize Jedis package util; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import java.util.ResourceBundle; public class JedisUtils { private static int maxTotal; private static int maxIdle; private static String HOST; private static int PORT; private static JedisPoolConfig jedisPoolConfig; private static JedisPool jedisPool; static { ResourceBundle bundle = ResourceBundle.getBundle("redis"); maxTotal = Integer.parseInt( bundle.getString("redis.maxTotal")); maxIdle = Integer.parseInt( bundle.getString("redis.maxIdel")); HOST = bundle.getString("redis.host"); PORT = Integer.parseInt( bundle.getString("redis.port")); jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(maxTotal); jedisPoolConfig.setMaxIdle(maxIdle); jedisPool = new JedisPool(jedisPoolConfig,HOST,PORT); } public static Jedis getJedis(){ return jedisPool.getResource(); } } import redis.clients.jedis.Jedis; import util.JedisUtils; import java.util.List; public class Test { public static void main(String[] args) { Jedis jedis = JedisUtils.getJedis(); jedis.auth("password"); jedis.set("str2","Mark"); jedis.sadd("set1","a","B","CC"); long longst1 = jedis.scard("set1"); System.out.println(longst1); jedis.lpush("list1","ab","bc","cd","aa"); List<String> list1 = jedis.lrange("list1", 0, -1); System.out.println(list1.toString()); String str1 = jedis.get("str1"); System.out.println(str1); jedis.close(); } } redis.properties redis.maxTotal=50 redis.maxIdel=10 redis.host=127.0.0.1 redis.port=6379 ``` RDB bgsave 启动子进程进行保存, 优于save的阻塞保存方式 sava 2 10, 10秒内2次数据变化保存, sava配置在后台执行的bgsave操作 会对数据产生影响 真正产生了影响, delete不算 不进行数据比对, set s1 2, set s1 3算2次 AOF 记录操作内容 appendonly yes appendfilename "appendonly.aof" appenddirname "appendonlydir" appendfsync everysec

May 10, 2022&nbsp;·&nbsp;4 分钟&nbsp;·&nbsp;Lizicai