Redis入门
-
什么是Redis
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,其可以用作数据库、缓存和中间件。它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) bitmaps, hyperloglogs 和 地理空间(geospatial) 等十大数据结构。
官网:redis.io
中文网:http://www.redis.cn/ -
Why Redis?
(1)redis支持数据持久化,可以把内存中等数据保存在磁盘上。
(2)redis支持多种的数据结构
(3)redis支持数据备份 -
Redis的优势
(1)redis性能极高,Redis能读的速度是110000次/s,写的速度是81000次/s 。
(2)丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
(3)redisd的操作是原子性的,要不成功执行,要不就失败。
(4)具有丰富等特性,例如可以设置key过期等。 -
Redis的基本使用
(1)Redis 有16个数据库(0~15),默认使用第0个,用select可以切换数据库
select 0-15
(2)查看数据库大小—dbsize,dbsize返回当前数据库中有多少个key
(3)查看所有的key(当前库)—**keys ***
(4) 清除当前库和清除所有等库–flushdb && flushall
(5)判断key是否存在, exists key
(6)移除key
move key 1 // 1表示当前数据库
del key // 删除当前数据库的key(可以多个)
(7) 设置key的过期时间
expire key 时间 // 单位时间为s
ttl key // 查看剩余存活时间
(8)查看当前key的类型 type key
(9)字符串追加
(10)获取字符串长度
strlen key
(11)字符串i++操作(可用于阅读量实现)(String)
减法为:decr key
incrby key 步长
decrby key 步长
(12)字符串替换----setrange key index replaceString
127.0.0.1:6379[1]> set k2 handsomebo
OK
127.0.0.1:6379[1]> setrange k2 1 hand
(integer) 10
127.0.0.1:6379[1]> get k2
"hhandomebo"
(13) 设置过期时间
127.0.0.1:6379[1]> setex k3 10 value3
OK
127.0.0.1:6379[1]> get k3
"value3"
127.0.0.1:6379[1]> ttl k3
(integer) 2
127.0.0.1:6379[1]>
(14)如果不存在则创建
127.0.0.1:6379[1]> set k3 v3
OK
127.0.0.1:6379[1]> setnx k3 v3
(integer) 0
127.0.0.1:6379[1]> del k3
(integer) 1
127.0.0.1:6379[1]> setnx k3 v3
(integer) 1
(15) 批量设置、批量获取(原子性操作) (String)
127.0.0.1:6379[1]> mset k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7
OK
127.0.0.1:6379[1]> mget k1 k2 k3 k4 k5 k6 k7
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
6) "v6"
7) "v7"
(16) getset key value 先get再set,如果不存在,先返回nil,再设置值,如果存在,就返回原值,再设置新值
127.0.0.1:6379[1]> getset k10 vvvvvvvvvvvvvvv
(nil)
127.0.0.1:6379[1]> get k10
"vvvvvvvvvvvvvvv"
127.0.0.1:6379[1]> getset k10 mmmmmmmmmmmmmmmm
"vvvvvvvvvvvvvvv"
127.0.0.1:6379[1]> get k10
"mmmmmmmmmmmmmmmm"
(17) 重命名key
127.0.0.1:6379[1]> rename k10 k1010
OK
127.0.0.1:6379[1]> get k10
(nil)
127.0.0.1:6379[1]> get k1010
"mmmmmmmmmmmmmmmm"
(18)手动持久化操作
save:save指令会阻塞主进程,直到保存完为止。在阻塞期间,服务端不能响应客户端等各种请求。
bgsave:该指令会fork一个进程,用于调用rdbSave,子进程用于去保存数据,主进程不会被阻塞,可以一直响应客户端请求。
- String类型
- List类型
(1)lpush
127.0.0.1:6379> lpush k1 1
(integer) 1
127.0.0.1:6379> lpush k1 2
(integer) 2
127.0.0.1:6379> lpush k1 3
(integer) 3
127.0.0.1:6379> lpush k1 5
(integer) 4
127.0.0.1:6379> lrange k1 0 -1
1) "5"
2) "3"
3) "2"
4) "1"
(2)rpush
127.0.0.1:6379> rpush k2 1
(integer) 1
127.0.0.1:6379> rpush k2 2
(integer) 2
127.0.0.1:6379> rpush k2 3
(integer) 3
127.0.0.1:6379> rpush k2 4
(integer) 4
127.0.0.1:6379> rpush k2 5
(integer) 5
127.0.0.1:6379> lrange k2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
(3)从头部/尾部移除数据(lpop/rpop)
127.0.0.1:6379> lrange k1 0 -1
1) "5"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> lrange k2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> lpop k1 1
1) "5"
127.0.0.1:6379> lrange k1 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lpop k2 1
1) "1"
127.0.0.1:6379> lrange k2 0 -1
1) "2"
2) "3"
3) "4"
4) "5"
127.0.0.1:6379> rpop k1 1
1) "1"
127.0.0.1:6379> lrange k1 0 -1
1) "3"
2) "2"
127.0.0.1:6379> rpop k2 1
1) "5"
127.0.0.1:6379> lrange k2 0 -1
1) "2"
2) "3"
3) "4"
(4)获取长度(llen)
127.0.0.1:6379> lrange k2 0 -1
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> llen k2
(integer) 3
(5)获取指定索引的元素
127.0.0.1:6379> lrange k2 0 -1
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> llen k2
(integer) 3
127.0.0.1:6379> lindex k2 1
"3"
(6)删除元素
在删除的时候需要指定删除元素等个数,以及要删除等元素内容,返回的是已经删除等元素个数
127.0.0.1:6379> rpush k3 one three three two one
(integer) 5
127.0.0.1:6379> lrem k3 1 one
(integer) 1
127.0.0.1:6379> lrange k3 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem k3 2 one
(integer) 1
127.0.0.1:6379> lrange k3 0 -1
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> lrem k3 2 one1
(integer) 0
(7)列表修剪:就是截取部分元素来充当新等字串
127.0.0.1:6379> rpush k4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
(integer) 16
127.0.0.1:6379> lrange k4 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
10) "10"
11) "11"
12) "12"
13) "13"
14) "14"
15) "15"
16) "16"
127.0.0.1:6379> ltrim k4 3 8
OK
127.0.0.1:6379> lrange k4 0 -1
1) "4"
2) "5"
3) "6"
4) "7"
5) "8"
6) "9"
(8)修改指定元素的值:lset
127.0.0.1:6379> rpush k5 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> lrange k5 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
127.0.0.1:6379> lset k5 0 111111
OK
127.0.0.1:6379> lrange k5 0 -1
1) "111111"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
但是,lset在使用的时候需要保证key是存在的,不然会报错。
127.0.0.1:6379> lset k6 0 -1
(error) ERR no such key
(9) 插入指定的值–linsert
linsert key before|after pivot(那个单词后) value //在pivot之前/之后插入value
127.0.0.1:6379> linsert k5 before 4 1000
(integer) 8
127.0.0.1:6379> lrange k5 0 -1
1) "111111"
2) "2"
3) "3"
4) "1000"
5) "4"
6) "5"
7) "6"
8) "7"
(10)rpoplpush 用于将源列表中的最后一个元素插入到目标列表中
127.0.0.1:6379> lrange k5 0 -1
1) "111111"
2) "2"
3) "3"
4) "1000"
5) "4"
6) "5"
7) "6"
8) "7"
127.0.0.1:6379> rpoplpush k5 k6
"7"
127.0.0.1:6379> rpoplpush k5 k6
"6"
127.0.0.1:6379> lrange k5 0 -1
1) "111111"
2) "2"
3) "3"
4) "1000"
5) "4"
6) "5"
127.0.0.1:6379> lrange k6 0 -1
1) "6"
2) "7"
127.0.0.1:6379>
- Set
- Hash
- Zset