NoSQL技术
-
内存数据库 Redis(NoSQL、非关系型数据库)
读写快、适合做缓存
-
文档数据库 MongoDB(NoSQL、非关系型数据库)
扩展性好、适合集群扩展、存储大量非核心数据
-
Oracle、MySQL、DB2(SQL、关系型数据库)
安全性、完整性好、存储核心业务数据
-
关系型和非关系型区别?
关系型是以表结构作为存储,表之间采用主外键约束表示。 非关系型是以Key-Value键值对结构存储
Redis命令
Redis中Value值类型有:字符串、哈希、列表、集合、有序集合
-
字符串操作(重点)
-
存入
set key value
-
取值
get key
-
获取值长度
strlen key
-
递增或递减
incr keyincrby key ndecr keydecrby key n
-
追加,字符串拼接
append key value
-
-
key操作(重点)
-
查看所有key
keys *
-
删除key
del key
-
修改key名
rename key newkey
-
指定过期时间
expire key 秒
-
-
哈希操作(HashMap)
value结构: 字段名1 值1、字段名2 值2
-
存入值
hset key 字段名1 值1 hmset key字段名1 值1、字段名2 值2
-
取值
hget key 字段名 hmget key 字段名1 字段名2
-
字段个数
hlen key
-
查看所有字段名
hkeys key
-
删除某个字段
hdel key 字段名
-
-
列表操作(List)(重点)
-
存入值
lpush key value //放头部 rpush key value //放尾部
-
取值
lrange key 0 -1 //取所有lindex key index //按索引取某一个
-
更新
lset key index newvalue
-
删除
lrem key count value //删除count个等于value的元素 lpop key //删除第一个元素 rpop key //删除最后一个元素
-
获取长度
llen key
-
-
集合操作(Set)
-
存入值
sadd key value value
-
取值
smembers key
-
删除元素
srem key value
-
获取长度
scard key
-
获取随机元素
srandmember key count
-
运算
交:sinter key1 key2 并:sunion key1 key2 差:sdiff key1 key2
A = {1 3 5 7}
B = {3 5 8 2}
交集:A和B都有的元素 {3 5} 并集:A加B元素 {1 2 3 5 7 8} 差集:A差B {1 7} B差A {2 8}
-
-
有序集合
-
存入值
zadd key score value score value
-
取值
zrange key 0 -1 //取所有值,由小到大zrevrange key 0 -1 //取所有值,由大到小
-
统计
zcount key min max//统计分数在min和max之间的元素数量 zcard key //获取元素总数
-
删除
zrem key value
-
获取排名
zrank key value //由小到大,获取元素排名索引值 zrevrank key value //由大到小,获取元素排名索引值
-
Java对Redis操作
-
引入jedis.jar工具包
-
建立连接
Jedis jedis = new Jedis();//默认连接本机Jedis jedis = new Jedis(host,port);//连接其他机器
-
数据操作
jedis.get/jedis.set等方法做字符串、哈希、列表、集合、有序集合操作
Jedis jedis = new Jedis();//连接本机Redis //获取字符串信息 String v1 = jedis.get("java10");// get java10 System.out.println("java10存储的值为"+v1); //获取List列表信息lrange list1 0 -1 List<String> list = jedis.lrange("list1", 0, -1); for(String s:list){ System.out.println(s); } jedis.close();
Redis缓存应用
Spring+Redis集合
Spring框架和Redis结合,需要使用Spring-DATA框架功能。
-
准备工作
引入spring-data-redis.jar
-
在Spring中配置下面组件
-
JedisPoolConfig
<bean id="redisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="100"></property> <property name="minIdle" value="5"></property> </bean>
-
JedisConnectionFactory
<bean id="redisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="localhost"></property> <property name="port" value="6379"></property> <property name="poolConfig" ref="redisPoolConfig"></property> </bean>
-
RedisTemplate
<bean id="template"
class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="redisConnectionFactory"></property> </bean>
-
-
编写RedisDao
可以将RedisTemplate注入进来,使用Template做写入和取值操作。
@Repository("redisDao")//扫描Dao public class RedisDaoImpl implements RedisDao{ @Resource//注入Template private RedisTemplate template; @Override public Object getObject(String key) { //利用template对象操作 } }
Redis持久化
Redis支持RDB和AOF两种持久化机制。
-
RDB 快照机制
RDB持久化频率比较低,丢失数据量会较大。快照机制如下:
save 900 1 //900秒修改1次 save 300 10 //300秒修改10次 save 60 10000 //60秒修改10000次
按频率调用save命令,生成dump.rdb.
-
AOF 日志机制
利用appendonly.aof日志文件,将操作命令记录下来。