一、Redis的数据操作(了解)
(一)操作list
1. 添加数据
- lpush/rpush
左边添加: lpush key value1 value2 ……
右边添加: rpush key value1 value2 ……
- lpushx/rpushx
左边添加: lpushx key value
右边添加: rpushx key value
lpush/rpush 和 lpushx/rpushx的区别:
lpushx/rpushx一次只能添加一个数据,而lpush/rpush可以一次性添加多个数据
如果key不存在,lpushx/rpushx会添加不进去;而lpush/rpush会创建key然后添加数据进去
2. 查看数据
- lrange key start end
说明:
start:开始索引
end:结束索引
查询时包含头和尾
- 应用示例:
lrange mylist 0 3:查询mylist中索引0到索引3的数据
lrange mylist 0 -1:查询mylist中所有数据
3.获取数据
- lpop/rpop
lpop key: 弹出(获取)左边第一个
rpop key: 弹出(获取)右边第一个
4.获取list长度
llen key:获取key对应list的长度
5.其它操作
- 设置数据:
lset key index value 设置索引index的值为value
- 插入数据:
linsert key before pivot value:在坐标值pivot前边插入value
linsert key after pivot value:在坐标值pivot后边插入value
- 删除数据:
lrem key count value 删除key对应list中count个value值(count为负数时,表示从后往前删
- rpoplpush:
rpoplpush key1 key2 弹出key1右边的值,添加到key2的左边
(二)操作set
Redis时的集合set,更类似于数学里的集合。无序不重复
1.单set集合操作
- 添加成员:
sadd key member1 member2 ……
- 获取所有成员:
smembers key
- 随机获取一个成员:
srandmemeber key
- 获取成员的数量:
scard key
- 删除成员:
srem key member1 member2 ……
- 判断是否set的成员:
sismember key member
2.多set集合运算
- 计算交集:多个集合共有成员
sinter key1 key2 ……
- 计算并集:多个集合的所有成员
sunion key1 key2 ……
- 计算差集:一个集合有,但是另一个集合没有的成员,分方向
sdiff key1 key2 ……
- 计算交集并保存结果
sinterstore key key1 key2 ……:计算key1和key2 ……的交集,把结果保存到key中
- 计算并集并保存结果
sunionstore key key1 key2 ……:计算key1和key2 ……的并集,把结果保存到key中
- 计算差集并保存结果
sdiffstore key key1 key2 ……:计算key1和key2 ……的差集,把结果保存到key中
(三)操作zset(sorted set)
zset里的数据不重复,取出数据的时候有顺序
1.添加成员
zadd key score1 member1 score2 member2 ……
2.单成员操作
- 查询某成员的分数:
zscore key member
- 查询某成员的排名:
zrank key member:排名从0开始,默认按分数从低到高排列
zrevrank key member:排名从0开始,按照分数从高到低排列
- 修改某成员的分数:
zincrby key 增加的分数 member
3.范围查询成员
- 按排名范围查询成员:
zrange key start end [withscores] 查询排名从start到end的成员,默认分数从低到高排列
zrevrange key start end [withscores] 查询排名从start到end的成员,分数从高到低排列
- 按分数范围查询成员:
zrangebyscore key min max [withscores] [limit index size] 查询分数从min到max的成员,分数从低到高
zrevrangebyscore key max min [withscores] [limit index size] 查询分数从min到max的成员,分数从高到低
4.数量统计
- 统计成员总个数:
zcard key
- 按分数范围统计个数:
zcount key min max
5.删除成员
- 删除指定成员:
zrem key member1 memeber2 ……
- 按分数范围删除成员
zremrangebyscore key min max
- 按排名范围删除成员
zremrangebyrank key start end
(四)通用key操作
查询key:
keys pattern pattern中可以出现*和?,*表示任意个任意字符,?表示一个任意字符
keys my*
删除key:
del key
判断key是否存在:
exists key
重命名key:
rename key newkey
设置key有效期:
expire key 秒数 设置key有效期为指定的秒数,过期自动失效
查询key剩余有效期:
ttl key 得到key的剩余有效期秒数
如果结果是-2,表示key已经超期
如果结果是-1,表示key没有设置有效期
查看key的类型:
type key
二、Jedis(重点)
(一)什么是Jedis
Jedsi=Java Redis
Servlet=Server Applet
在实际开发中,需要使用程序代码来操作Redis。Redis数据库官方提供了Java程序操作Redis的方式:Jedis。
Java要操作Redis,需要引入相关的jar包如下:
commons-pool2-2.3.jar
jedis-2.7.0.jar
(二)Jedis的应用
1.Jedis相关的API
- Redis的连接对象:Jedis
构造方法:Jedis(String ip, int port)
操作常用的方法:jedis对象操作Redis数据库的方法名,和命令名称完全一样。
设置字符串:
命令:set key value
方法:jedis.set(String key, String value);
获取字符串:
命令:get key
方法:jedis.get(String key);
删除字符串:
命令:del key
方法:jedis.del(String key);
向list里左边添加一个数据:
命令:lpush key value
方法:jedis.lpush(String key, String value);
释放资源:jedis.close();
2. jedis的基本使用方法
//获取连接
Jedis jedis = new Jedis(String ip, int port);
//操作redis数据库,用什么方法操作:想执行什么命令,就使用什么方式。方法名称和命令的名称是一样的
jedis.set(“name”,”tom”);
String name = jedis.get(“name”);
//释放资源
jedis.close();
3. Jedis连接池
- API:
连接池类:JedisPool
构造方法:
JedisPool(String host, int port);
JedisPool(JedisPoolConfig config, String host, int port);
jedisPoolConfig:连接池的配置信息对象
无参构造:JedisPoolConfig()
设置参数:
setMaxTotal(int maxTotal)
setMaxIdle(int maxIdle)
host:Redis的地址
port:Redis的端口
方法:
Jedis jedis = pool.getResource();
- 操作步骤:
//创建连接池对象:JedisPool
//从连接池里获取连接:Jedis
//操作redis数据库
//释放资源
(三)使用JedisUtils工具类操作Redis
//获取连接
Jedis jedis = JedisUtils.getJedis();
//操作redis
//释放资源
JedisUtils.close(jedis);
(四)补充:加载properties配置文件的方式
1. 使用Properties对象
Properties prop = new Properties();
prop.load(properties文件的一个输入流对象);
String value = prop.getProperty(String key);
2. 使用ResourceBundle工具类
ResourceBundle bundle = ResourceBundle.getBundle(String filename);
注意:
filename:默认是从src下加载的properties文件,并且文件名称不需要加后缀名
String value = bundle.getString(String key);
三、Redis特性(了解)
(一)多数据库
一个Redis默认提供了16个库:0~15,默认使用的是0号库。可以通过修改配置文件的方式,来更改库的数量。
vim redis.conf
修改 databases 数量
保存并退出vim
重启Redis服务,重新加载配置文件
1. 多数据库的操作
- 切换库:
select n n是库的序号。
- 移库:
move key n 把key移动到n号库
- 退出:
quit
- 查询库中key的数量:
dbsize
- 刷新当前库(清空当前库):
flushdb
- 刷新所有库(清空所有库):
flushall
(二)事务
Redis里的事务是伪事务:在Redis里开启事务之后,执行的所有命令被放在了一个队列里;等事务提交时,Redis会从队列中取出命令挨个执行;如果其中任意一个出现异常,Redis会pass掉继续往下执行。
开启事务:multi
执行n条命令----会被放在一个队列里
提交事务:exec 执行队列里的命令
回滚事务:discard 抛弃队列里的命令
四、Redis持久化(了解)
Redis的数据是保存在内存中的,但是也提供了持久化机制,可以把内存中的数据持久化保存到磁盘文件里。
Redis提供了两种持久化机制:RDB模式和AOF模式。其中RDB是默认开启的,而AOF需要手动配置开启。
(一)RDB模式-快照模式
Redis会定时把内存中的数据备份,生成“快照文件”。文件名称是dump.rdb,默认被保存在了Redis的安装目录里。
可以通过修改redis.conf来修改RDB的持久化配置:
save 900 1: 1次更改,900秒存一次
save 300 10: 10次更改,300秒存一次
save 60 10000:10000次更改,60秒存一次
优点:
性能略高一些
缺点:
可能会丢失数据,不够安全
(二)AOF模式-append only file
每次对Redis进行变更操作时,Redis都会把执行的命令保存到文件中。当Redis重启时,会自动读取这个文件,重新执行文件里的所有命令,重构数据库。
AOF需要手动开启,可以通过redis.conf更改配置:
appendonly yes #默认是no,未开启AOF。设置为yes表示开启AOF模式。
appendfilename “appendonly.aof” #默认生成的AOF文件名称
AOF持久化有三种配置方式:
appendfsync always #总是保存。执行的每一次数据变更命令,都会被保存到文件中
appendfsync everysec #每秒保存一次
appendfsync no #不保存
优点:
数据比较安全,丢失数据的可能性比较低
缺点:
性能低
可能保存很多无用的操作命令