Redis入门
1 Redis介绍
1)基本概念
使用c语言开发的高性能键值数据库。键值类型:
String字符类型、map散列类型、list列表类型、set集合类型、sortedset有序集合类型
2)应用场景
缓存、分布式集群session分离、聊天室在线好友列表、任务队列、应用排行榜、访问统计、数据过期处理。
2 Redis配置和启动
-
前端启动
启动命令*./redis-server*
ctrl+c或者*./redis-cli shutdown*
-
后端启动
将/root/redis-3.0.0/redis/conf下的redis.conf文件拷贝至bin目录下
vim redis.conf修改redis.conf文件,daemonize改为yes
使用配置文件启动*./redis-server redis.conf*
3 REDIS数据类型
String类型
redis的字符串为动态字符串,采用预分配冗余的方式减少内存频繁分配,所以capacity大于len.
字符串长度小于1M时,扩容加倍现有空间。超过1M,扩容增加1M,最大长度512M。
- 赋值 set key value
127.0.0.1:6379> set test 123
OK
- 取值get key
127.0.0.1:6379> get test
"123"
- 取值并赋值 getset key value
127.0.0.1:6379> getset test 321
"123"
127.0.0.1:6379> get test
"321"
- 批量取值并赋值mset key value [key value…] mget key [key…]
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2
1) "v1"
2) "v2"
- 删除del key
127.0.0.1:6379> del test
(integer) 1
- 递增数值、增加指定整数、递减数值、减少指定数值
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> incr num
(integer) 4
127.0.0.1:6379> incrby num 2
(integer) 8
127.0.0.1:6379> incrby num 2
(integer) 1
127.0.0.1:6379> decr num
(integer) 9
127.0.0.1:6379> decr num
(integer) 8
- 追加字符
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> append str "world"
(integer) 10
127.0.0.1:6379> get str
"helloworld"
- 获取长度
应用: 商品编号、订单号为string的递增数字生成、常见用途是缓存序列化后的信息,如将用户个人信息序列化为JSON字符串存入redis中,取出信息时进行反序列化。
Hash类型
hash提供了字段和字段值的映射,字段值只能是字符串类型,不支持其他类型。使用HashMap作为底层数据结构,可以扩容和缩容。
-
设置单个字段
HSET keyfield value
-
设置多个字段值
-
不存在时赋值
-
取单个字段值
HGET key field
-
获取多个字段值
-
获取所有字段值
-
删除字段
-
增加数字
-
判断字段是否存在
HEXISTS key field
-
获取字段名或字段值
-
获取字段数量
HLEN key
应用:
存储部分对象信息,不同于字符串一次性全部序列化整个对象,hash可对对象结构的每个字段单独存储。比较节省网络流量和机器内存。
List类型
Linkedlist采用双向链表存储数据,特点:增删快、查询慢。可以当作队列/栈使用
-
列表左边增加元素
LPUSH key value [value ...]
-
列表右边增加元素
RPUSH key value [value ...]
-
列表切片
LTRIM key start stop
-
弹出列表左边元素
LPOP key
-
弹出列表右边元素
RPOP key
-
获取列表元素个数
LLEN key
-
删除列表元素
LREM key count value
-
获取指定索引元素值
LINDEX key index
-
设置指定索引元素值
LSET key index value
-
插入元素
-
列表转移
-
阻塞弹出
BLPOP key [key ...] timeout
应用:
异步队列,将需要延后处理的任务结构体序列化为字符串塞入Redis的列表,另一个线程从此列表中轮询数据进行处理。
Set类型
它内部的键值对是无序唯一的,相当于一个特殊的字典,字典的所有value都是为NULL。内部使用hash结构,底层数据结构也为HashMap。
基本命令
-
增加元素
sadd ket meber1 [meber2]
-
弹出随机元素
spop key
-
删除元素
srem key member
-
获取集合中的所有元素数量
scard key
-
判断元素是否在集合中
sismemeber key member
集合运算命令
-
差运算 sdiff key [key…]
-
交运算 sinter key [key…]
sinterstore destination key [key…]
-
并运算 sunion key [key…]
sunionstrore destination key [key…]
ZSET
有序集合和集合一样,可以包含任意数量、各不相同的元素,不同于集合,有序集合的每个元素关联着浮点数格式分支,按分值对元素进行排序。
-
添加元素
ZADD key score element [[score element] [score element] ...]
-
移除元素
ZREM key element [element ...]
-
返回分数分值
ZSCORE key element
-
增加元素分值
ZINCRBY key increment element
-
返回集合元素数量
ZCARD key 返回有序集合包含的元素数量
-
获取指定分值范围内升序元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
-
计算指定分数范围内元素数量
ZCOUNT key min max
4 Keys命令
-
keys pattern 返回满足给定pattern的所有keys
keys * 查询数据库中所有keys
-
exists key 确认一个key是否存在
-
del key 删除一个key
-
rename key 重命名key
-
type key 判断值的类型
5 Redis持久化方式
Rdb方式(默认)
redis非法关闭时丢失最后一次持久化之后的数据,可以在redis.conf中设置持久化快照条件和持久化文件的存储目录,redis主要有三种创建RDB文件的方式:
- 执行SAVE命令 手动 阻塞 快
- 执行BGSAVE命令 手动 不阻塞 慢
- 配置save选项的自动保存条件被满足 自动 不阻塞 慢
注:BGSAVE命令会使服务器fork创建一个子进程,主进程负责处理客户端的命令请求,子进程负责创建RDB文件,当子进程创建完RDB文件并退出时,通知父进程创建完毕。
Aof方式
操作一次redis数据库,将操作记录存储到aof持久化文件中。
将redis.conf中的appendonly改为yes,开启持久化方案,也可以设置Aof文件存储的目录和名称
若redis重启,数据从aof文件加载
6 Redis应用场景
- 存储用户时间线
- 缓存和消息分发、任务调度
- 计数器、排行榜、用户关系