Redis基础
1.Redis概述
redis是Nosql数据库,使用C语言进行编译,是一个闪存数据库存取速度极快,能够做到110000次/s的读取及81000次/s的写入;内部以键值对的形式进行存储,键是String类型,值的类型可以为字符串(String)、哈希(hash)、字符串列表(list)、字符串集合(set)、有序字符串集合(sorted set)等:
2.Redis开启及关闭(以下操作需要在redis安装目录下执行)
cd /usr/local/redis #进入Redis目录下
3 Redis简单使用
3.1 Redis命令行使用
3.1.1 使用方法一
./redis-server redis.conf #启用redis数据库
./redis.cli #进入命令行
。。。执行数据库的一系列操作
./exit #退出命令行
ps -ef | grep redis #查看Redis所占用的端口
kill -9 进程号 #杀死进程
./redis.cli #提示连接失败说明关闭成功!
3.1.2 使用方法二
./redis-server redis.conf #启用redis数据库
./redis.cli #进入命令行
。。。执行数据库的一系列操作
./exit #退出命令行
./redis.cli shutdown #关闭进程
./redis.cli #提示连接失败说明关闭成功!
3.2 Java连接Redis使用(Jedis)
- 导入jar包
- 创建jedis对象
Jedis jedis = new Jedis(host, port);
- 获取数据
String string = jedis.get(name);
- 存储数据
String res = jedis.set(key, value);
3.3 JedisPool(Jedis连接池)使用:
- 创建连接池配置
JedisPoolConfig poolConfig = new JedisPoolConfig();```
- 配置连接池参数
poolConfig.setMaxIdle(number); // 最大空闲数 poolConfig.setMinIdle(number); // 最小空闲数 poolConfig.setMaxTotal(number); // 最大连接数
- 创建连接池
JedisPool jedisPool = new JedisPool(poolConfig, host, port);
- 获取Jedis对象
Jedis jedis = jedisPool.getResource();
- 操作
。。。 - 关闭Jedis及连接池
jedis.close(); jedisPool.close();
3.4 JedisPool(Jedis连接池)工具类的创建
4 Redis五大基本数据类型及相关指令
注意:以下几乎所有指令都可在java中由Jedis对象‘.’来调出
4.1 字符串操作
set [keyname] [value] #设置键值
get [keyname] #通过键获取值
getset [keyname] [value] #先根据键读取出值后设置值
del [keyname] #删除键值
incr [keyname] #键所对应的值自动加1,当创建值为null时默认值为0+1
incrby [keyname] [number] #将键对应的值加number
decr [keyname] #键所对应值自动减1,当创建值为null时默认值为0-1
decrby [keyname] [number] #将键对应的值减number
append [keynumber] [string] #将字符串拼接到值上,返回的数据为字符串长度
4.2 hash操作
hset [keyname] [filed] [value] #将keyname所对应的hash的filed的值设置为value
hget [keyname] [filed] #获取keyname键对应的hash数据的filed值
hmset [keyname] [filed1] [value1] [filed2] [value2]... #设置keyname对应的hash类型数据下的多个filed对应的value
hmget [keyname] [filed1] [filed2] ... #获取keyname对应的hash类型数据下的多个filed对应的value
hgetall [keyname] #获取keyname对应的hash下的所有的键与值
hincy [keyname] [filed] [number] #将指定的keyname对应的数据的filed的值加number(减的时候值设为负即可)
自学命令:
hexists [keyname] [filed] #查看是否存在对应的filed
hlen [keyname] #查看keyname对应的键值对的数量
hkeys [keyname] #查看keyname对应的数据的所有key
hvals [keyname] #获取keyname对应的所有val
4.3 list集合操作
lpush [listname] [val1] [val2] ... #创建名为listname的集合,并添加元素val1,val2。。。该方式是向左边添加元素
rpush [listname] [val1] [val2] ... #创建名为listname的集合,并添加元素val1,val2。。。该方式是向右边添加元素
lrange [listname] [number01] [number02] #查看list中的元素
lpop [listname] #弹出list左边的元素
rpop [listname] #弹出集合右边的元素
llen [listname] #查看元素的个数
自学指令:
lpushx [listname] [val] #若listname存在,则向头部(右)插入元素否则不插入;
rpushx [listname] [val] #若listname存在,则向尾部(左)插入元素否则不插入;
lrem [listname] [count] [val] #从listname表中删除个数为count的名为val的元素(count>0是从左往右删,count<0是从右往左删);
lset [listname] [index] [val] #从listname表中索引为index处添加元素val(index>0是从左往右添加,index<0是从右往左添加);
linsert [listname] [before|after] [val01] [val02] #在名为listname的数据中的val01前或后添加val02元素
rpoplpush [listname01] [listname02] #从listname01右边弹出一个元素添加在listname02头部
4.4 set集合操作
sadd [setname] [val01] [val02] ... #向set集合中插入元素val01、val02
smembers [setname] #查看set中的所有元素
sismember [setname] [val] #查看元素shifou存在,存在返回1 不存在返回0;
sdiff [setname01] [setname02] #查看setname01中setname02没有的元素
sinter [setname01] [setname02] #查看两个集合中相同的元素
sunion [setname01] [setname02] #查看两个集合中不同的元素
scard [setname] #查看集合中元素的个数
srandmember [setname] #从集合中随机取一个元素;
sdiffstore [diffsetname] [setname01] [setname02] ... #将不同的数据存储到diffsetname中
sunionstore [unionsetname] [setname01] [setname02] ... #将所有数据存储到unionsetname中
sinterstre [intersetname] [setname01] [setname02] ... #将所有的交集数据存储到intersetname中
4.5 sortedset集合操作
zadd [sset] [score] [val] [score] [val] ... #将数据存储进sset有序集合中;
zrange [sset] [startnum] [endstart] [withscores] #查询所有sset的数据并按照score的大小进行排序
zcard [sset] #查询有序集合中元素的个数;
zscore [sset] [member] #查询sset中对应的member的分数;
zrevrange [sset] [withscores] #将集合中元素按照从大到小排序
zremrangebybank [sset] [startnum] [endnum] #将sset中的从startnum到endnum数据删除
zremrangebyscores [sset] [minscore] [maxscore] #将sset中的score从minscore到maxscore数据删除
4.6 其他指令
keys * #查询数据库中的所有数据
key [str]* #查询数据库中所有以str开头的数据
del [key1] [key2] ... #删除数据库中的数据
exists [key01] #查看key01是否存在
rename [key01] [key02] #将key01重命名为key02
expire [key] #设置过期时间单位‘秒’
ttl [key] #显示离过期剩余的时间
type [key] #显示key对应的值的类型
select [0-15] #redis默认有16个数据库索引为从0-15,数字为几就为切换到哪个数据库,默认为数据库0
move [key] [0-15] #将当前数据库中的key数据移到指定的数据库中
flushdb #删除当前数据库中的数据
flushall #删除所有数据库中的key
quit #退出数据库
info #获取数据库的信息及统计
5 消息订阅与发布及事务操作
5.1 消息订阅及发布
subscribe [msgname] #订阅消息
psubscribe [msgname]* #批量订阅消息
publish [msgname] [msg] #向msgname订阅消息内发布msg
5.2 数据库事务
multi #开启数据库事务,接下来执行的命令会在事务中排好队,当提交事务时一起执行
exec #提交事务redis的事务多条语句中有错误,但是他仍会执行
discard #事务回滚,将会将事务删除掉,不会再执行
6 Redis的持久化操作
- RDB(快照)的形式进行持久化
优势:无需配置,大数据量的时候适用
劣势:可能丢失数据,在某个时间点存储数据,但是由于其中的间隔中服务器挂掉,就会丢失上次节点到现在的数据
存储的时机在redis.conf中来进行修改 save 60 1 指的是60秒内至少一个修改则创建快照 - AOF(日志)的形式进行持久化
优势:安全
劣势:数据量大的时候会非常卡
(Redis4.0后有RDB+AOF混合持久化 优点:读写速度快,以AOF文件存储 缺点:可读性较差)