redis关系型数据库
mysql oracle sql… db2 特点:数据在硬盘上
非关系型数据库 redis 持久化 缓冲 特点 内存中 读写性能高 保存数据的时候那些数据:1 经常查询的数据 2 不经常修改的数据
解决问题 : 高并发 高可用(主机宕机,备机顶上) 扩展性
redis数据支持的值类型: 键都是字符串
1 字符串类型(掌握) 95%以上使用它
2 散列类型(了解)— hash
3 列表类型(了解)— list
4 集合类型(了解)— set
5 有序集合类型(了解)–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集合
需求比如: key:user1 value: username jack
age 18
key:user1 value: username rose
age 16
sex man
设置
hset key subkey1 subvalue1 :设置一个键值对
hmset key subkey1 subvalue1 subkey2 subvalue2 ...:设置多个键值对
获取
hget key subkey:获取一个子键的值
hmget key subkey1 subkey2...:获取多个子键的值
hgetall key:获取所有的键值对
删除-子键
hdel key subkey1 subkey2 ...
二,列表类型
两端的插入:
lpush key member1 member2.. :往左边开始插入
lpush l1 a b c d e f g h---> h,g,f,e,d,c,b,a
rpush key member1 member2.. :往右边开始插入
rpush l1 a b c d e f g h a,b,c,d,e,f,g,h
两端的删除: d c b a e f g h
lpop key :左边弹出一个
lpop l2 --->c,b,a,e,f,g,h
rpop key :右边弹出一个
rpop l2-->c,b,a,e,f,g
查看:
lrange key startindex endindex
lrange key 0 -1 :查看所有
扩展:
llen key :获取key对应的元素数量
lrem key count member :在key中移除指定个数的成员 a b c d a b c d a b c d
count > 0 :从左往右移除指定个数
count < 0 :从右往左移除指定个数
count = 0 :清空list中指定元素
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:我有加你有
sinter key1 key2:我有你也有
sdiffstore key1 key2 key3:将key2有的key3没有的差异部分插入key1
sunionstore key1 key2 key3:将key2和key3并集部分插入key1
sinterstore key1 key2 key3:将key2和key3交集部分插入key1
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 降序
del key : 全删`
redis通用的操作
1 keys *:查询所有的key
2 exists key:判断是否有指定的key 若有返回1,否则返回0
3 ttl key:展示指定key的存活时间
若返回值为 -1:永不过期
若返回值为 -2:已过期或者不存在
expire key 秒数:设置这个key在缓存中的存活时间
4 del key:删除指定key
5 rename key 新key:重命名
6 type key:判断一个key的类型
redis的特性
多数据库
select index:切换库
move key 指定数据库: 将当前库的数据移动到指定库中
dbsize: 返回当前库中有多少个key
flushdb:清空当前数据库数据
flushall:清空当前实例下所有的数据库数据
消息的订阅和发布(了解)
发布信息:publish 频道 消息内容
小A--java 小B--java,js
订阅单个信息: subscribe java1
订阅多个信息: psubscribe channel java1 js1
redis的事物(了解)
非关系数据库和关系型数据库事务的区别:
1 关系型数据库在事务中处理数据如果发生了异常,下面的所有数据不执行
2 非关系数据库在事务中处理数据如果发生了异常,下面的数据继续执行
总结 非关系数据库在事务中处理数据,所有要处理的数据都需要排队等待,只有事务提交之后,才会按
排队的顺序依次处理,处理到异常数据,继续往下执行
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
使用步骤:
1.导入jar包
2.创建jedis对象 new jedis(“”,“”)
new Jedis("192.168.17.136", 6379)
3.通过jedis操作redis数据库
4.释放资源
使用连接池优化:
// 创建数据源的配置对象
JedisPoolConfig config = new JedisPoolConfig();
// 创建一个连接池
JedisPool pool = new JedisPool(config, "192.168.19.128",6379);
// 获取jedis对象
Jedis jedis = pool.getResource();