1. redis课程内容

1
2
3
4
5
6
7
8
9
1.概念

2.下载安装

3.命令行操作

4.redis的持久化操作。

5.java来操作redis.

[TOC]

2. redis概念

1
2
3
4
5
redis是key-value结构的数据存储的系统。是一款高性能的nosq1数据库。
关系型数据库: mysql,Oracle,db2
结构化数据
非关系型数据库: redis,memorycache ,echcache.
非结构化的数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.什么是nosq1 ? 
1.not only sq1 ,不仅仅是sq1语句,这是一一个新的数据库里面,非关系型数据库。

2. nosq1数据库和传统数据库的比较:

优点:
1.成本: nosq1数据库是开源的,免费,部署简单方便。传统数据库。
2.查询效率: nosq1数据库存在于内存中,关系型数据库的数据存储在硬盘上. nosq1数据库快。
3.扩展性能:关系型数据库支持joi n这样的关联查询。直接限制了关系型数据库的发展。

缺点:
1.维护的工具有限。
2不提供的sq1的支持。
3.不存在事务管理。

3. redis的具体使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
redis的具体使用:
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-value数据库,并提供多种语言的API.
它通常被称为数据结构服务器, 因为值(value) 可以是字符串(String),哈希(Hash),列表(list), 集台
(sets)和有序集合(sorted sets)等类型。

redis中有5中数据美型:
1.string
2.hash
3.1ist
4.set
5.sorted sets


redis的使用场景:

1.缓存。

2.在线好友列表。

3.任务队列。(秒杀)

4.排行榜(音乐排行榜)

5.网站的访问统计。

6.数据过期处理(验证码)

1.String类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//查看所有
127.0.0.1:6379> keys *
(empty list or set)、

//存储数据:set 键 值
127.0.0.1:6379> set username mm
OK

//获取数据 get 键
127.0.0.1:6379> get username
"mm"

127.0.0.1:6379> set password 971021
OK
127.0.0.1:6379> get password
"971021"

//删除的语法 del password
127.0.0.1:6379> del password
(integer) 1
//查看所有
127.0.0.1:6379> keys *
1) "username"

2.hash类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//储存数据:hset 大key 小key value 
127.0.0.1:6379> hset user username mm
(integer) 1
127.0.0.1:6379> hset user password 971021
(integer) 1

//获取数据: hset 大key 小key
127.0.0.1:6379> hget user username
"mm"
127.0.0.1:6379> hget user password
"971021"
//获取所有的键值对
127.0.0.1:6379> hgetall user
1) "username"
2) "mm"
3) "password"
4) "971021"

//删除数据 hdel 大key 小key
127.0.0.1:6379> hdel user password
(integer) 1
127.0.0.1:6379> hgetall user
1) "username"
2) "mm"

3.list

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//可以添加一个元素到列表的头部(左)(右)
//从集合的左侧添加数据
127.0.0.1:6379> lpush mylist a
(integer) 1
127.0.0.1:6379> lpush mylist b
(integer) 2
127.0.0.1:6379> lpush mylist c
(integer) 3

//获取数据,第一个参数是开始的位置,第二个参数是结束的位置。
127.0.0.1:6379> lrange mylist 0 2
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> lrange mylist 0 1
1) "c"
2) "b"
127.0.0.1:6379> lrange mylist 0 0
1) "c"
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"

//从集合的右侧开始添加数据
127.0.0.1:6379> rpush mylist d
(integer) 4
127.0.0.1:6379> rpush mylist e
(integer) 5
127.0.0.1:6379> rpush mylist f
(integer) 6

127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
4) "d"
5) "e"
6) "f"


//输出元素
//删除左边的
127.0.0.1:6379> lpop mylist
"c"
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "a"
3) "d"
4) "e"
5) "f"
//删除右边的
127.0.0.1:6379> rpop mylist
"f"
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "a"
3) "d"
4) "e"

4. set 无序不允许重复的元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//添加的操作,sadd key value
127.0.0.1:6379> sadd myset a
(integer) 1
127.0.0.1:6379> sadd myset b
(integer) 1
127.0.0.1:6379> sadd myset e
(integer) 1
//添加失败,因为set集合不可以重复
127.0.0.1:6379> sadd myset a
(integer) 0

//删除元素
127.0.0.1:6379> srem myset e
(integer) 1
//查看元素
127.0.0.1:6379> smembers myset
1) "b"
2) "a"

5.sortedset,不允许重复,但是元素有序。每个元素都会关联一个得分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//sortedset  zadd 大key 分数 小key
127.0.0.1:6379> zadd student 100 math
(integer) 1
127.0.0.1:6379> zadd student 90 english
(integer) 1
127.0.0.1:6379> zadd student 80 Chinese
(integer) 1
127.0.0.1:6379> zrange student 0 -1
1) "Chinese"
2) "english"
3) "math"

//删除元素 zrem 大key 小key
127.0.0.1:6379> zrem student english
(integer) 1
//查看所有的元素
127.0.0.1:6379> zrange student 0 -1
1) "Chinese"
2) "math"

6.通用命令

1
2
3
4
5
6
//获取所有的key的信息
keys *
//获取指定的key的类型
type key
//删除指定的key
del key

4. redis 持久化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1.redis数据储存在内存中,一旦关闭,数据就会丢失,为了防止数据丢失,使用redis的持久化。

//redis的持久化方案有两种:
1.RDB:默认的持久方式

# after 900 sec (15 min) if at least 1 key changed
save 900 1

# after 300 sec (5 min) if at least 10 keys changed
save 300 10

# after 60 sec if at least 10000 keys changed
save 60 10000

2.AOF:
appendonly no(关闭AOF模式)
appendonly yes(开启AOF模式)
# appendfsync always //每次操作都进行一次持久化
appendfsync everysec
# appendfsync no

5.jedis的详细配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//最大活动对象数     
redis.pool.maxTotal=1000

//最大能够保持idel状态的对象数
redis.pool.maxIdle=100

//最小能够保持idel状态的对象数
redis.pool.minIdle=50

//当池内没有返回对象时,最大等待时间
redis.pool.maxWaitMillis=10000

//当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true

//当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true \

//“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
redis.pool.timeBetweenEvictionRunsMillis=30000

//向调用者输出“链接”对象时,是否检测它的空闲超时;
redis.pool.testWhileIdle=true

//对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
redis.pool.numTestsPerEvictionRun=50

//redis服务器的IP
redis.ip=xxxxxx

//redis服务器的Port
redis1.port=6379