redis
该篇应该是抄袭其他地方的,链接当时没记
redis数据支持的值类型: 键都是字符串
- 字符串类型(掌握) 95%
- 散列类型(了解)— hash
- 列表类型(了解)— list
- 集合类型(了解)— set
- 有序集合类型(了解)–sortedset
注意命名:
key的常用的写法: 项目名_子模块_key名称
字符串类型:
设置
set key value
获取
get key
删除
del key
自增 +1
incr key
自减 -1
decr key
扩展的命令:
getset key value:先获取再设置
incrby key count:指定增加数量
decrby key count:指定减少数量
append key value:追加
若有指定的key 则追加
若无,则设置一个
hash (存储对象的属性值)
把值看成map集合
设置
hset key subkey1 subvalue1 :设置一个键值对
hmset key subkey1 subvalue1 subkey2 subvalue2 ...:设置多个键值对
获取
hget key subkey:获取一个子键的值
hmget key subkey1 subkey2...:获取多个子键的值
hgetall key:获取所有的键值对
del user1
删除-子键
hdel key subkey1 subkey2 ...
hdel user2 age
列表类型(了解) -list
两端的插入:
lpush key member1 member2… : 往左边开始插入
lpush l1 a b c d
d,c,b,a
rpush key member1 member2… :往右边开始插入
e f g h
rpush l1 e f g h
e,f,g,h
l1=e f g h || l1=d c b a e f g h
lrange key startindex endindex
lrange key 0 -1 :查看所有
lrange key 0 2
查看:(视图化工具) RedisDesktopManager
两端的删除:
lpop key :左边弹出一个
lpop l1
rpop key :右边弹出一个
rpop l1
扩展:
llen key :获取key对应的元素数量
lrem key count member :在key中移除指定个数的成员 l2 = a b c d a b c d a b c d
count > 0 :从左往右移除指定个数 lrem l2 2 a l2 =b c d b c d a b c d
count < 0 :从右往左移除指定个数 lrem l2 -2 d l2 = b c d b c a b c
count = 0 :清空list中指定元素 lrem l2 0 c l2 = b d b a b
lrem l2 3 c-->lrem l2 -3 c
del key : 全删
集合类型–set类型
特点:无序唯一
添加
sadd key member1 member2
移除
srem key member1 member2
查看
smembers key :查看
扩展:
sismember key member :判断一个set中是否有指定的成员
有:1
无:0
聚合运算 sa2=a b c d sa3=b c d e
sdiff key1 key2 :我有你没有
sunion key1 key2:我有加你有 a b c d b c d e == a b c d e
sinter key1 key2:我有你也有 b c d
sdiffstore key1 key2 key3:将key2有的key3没有的差异部分插入key1
sunionstore key1 key2 key3:将key2和key3并集部分插入key1
sinterstore key1 key2 key3:将key2和key3交集部分插入key1
sa1=a b c d
sa2=b c d e
sinterstore sa3 sa1 sa2
del key : 全删
sortedset类型(排行榜)
必须要有一个数值来与之关联,因为要通过这个数值来排序
添加
zadd key score1 member1 score2 member2...: 添加
获取
zscore key member :获取成员的得分
删除
zrem key member1 member2... :删除指定成员
获取元素长度
zcard key :展示元素的长度
展示所有的元素:
zrange key startindex endindex [withscores] 升序
zrevrange key 0 -1 withscores [withscores] 降序
del key : key中值全删
redis通用的操作(掌握)
- keys *:查询所有的key
- exists key:判断是否有指定的key 若有返回1,否则返回0
- ttl key:展示指定key的存活时间
若返回值为 -1:永不过期
若返回值为 -2:已过期或者不存在
* expire key 秒数:设置这个key在缓存中的存活时间
- del key:删除指定key
- rename key 新key:重命名
- type key:判断一个key的类型
redis的特性–和数据库相关的命令操作
1 多数据库(掌握)
select index:切换库
move key 指定数据库: 将当前库的数据移动到指定库中
dbsize: 返回当前库中有多少个key
flushdb:清空当前数据库数据
flushall:清空当前实例下所有的数据库数据
2 消息的订阅和发布(了解
发布信息:publish 频道 消息内容
订阅单个信息: subscribe 频道1
订阅多个信息: psubscribe channel 频道1 频道2...
小A --在redis中订阅java
小B --在redis中订阅java和js
3 redis的事务(面试题)
关系型数据库和非关系型数据库的事务区别: 关系型数据库的事物:
事务执行期间,按照顺序依次执行每一条程序,直到全部执行完毕才提交
事务执行期间,如果遇到了异常,将会回滚,下面任何程序都不会执行了
非关系型数据库的事务:
事务执行期间,所有的任何程序全部处于等待不会执行,直到提交事务的时候才会按照顺序依次执行
事务执行期间,如果遇到了异常,将会被忽略继续往下执行程序
注意:工作中在程序中使用的是关系型数据库的事务
redis的持久化(了解):
持久化: 就是将数据从内存保存到磁盘
1 rdb
(快照方式)
默认开启的
bin/redis.conf 查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
2 aof
(配置文件命令方式)
默认不开启
若要开启,必须修改配置文件bin/redis.conf 搜appendonly
appendonly yes
保存策略:
appendfsync always 每次都写入
appendfsync everysec 每秒写入
appendfsync no 不写入
java代码操作redis数据库数据(重点)
java代码-->jdbc-->mysql
java代码-->jsdis-->redies
jedis:相当于jdbc
使用步骤:
- 导入jar包
- 创建jedis对象
new Jedis("192.168.17.136", 6379)
- 通过jedis操作redis数据库
- 释放资源
使用连接池优化:
创建数据源的配置对象
JedisPoolConfig config = new JedisPoolConfig();
配置初始化连接
config.setMaxTotal(1000);
配置空闲时期的最大连接
config.setMaxIdle(5);
.......
创建一个连接池
JedisPool pool = new JedisPool(config, "192.168.2.132",6379);
获取jedis对象
Jedis jedis = pool.getResource();