redis数据结构
- 字符串strings
- 字符串列表lists
- 字符串集合sets
- 有序字符串集合sorted sets
- 哈希hashes
- redis数据结构-strings
eg:
set mystring “2”
get mystring
incr mystring复制代码由于INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的效果。(业务统计时使用)
- redis数据结构-lists
redis中的lists在底层实现上并不是数组,而是链表。
lists的常用操作包括LPUSH、RPUSH、LRANGE等。
eg:
lpush mylist "1"
//返回当前mylist数据个数
lrange mylist 0 -1 //列出mylist中从编号0到倒数第一个元素
复制代码- redis数据结构-集合sets
无需集合,没先后顺序
sadd myset “oneset”
smembers myset
sismember myset “oneset”
sunion myset theotherset
复制代码- redis数据结构-有序集合sorted sets
很多时候,我们都将redis中的有序集合叫做zsets
zadd myzset 1 baidu.com
//向myzset中新增一个元素360.com,赋予它的序号是3
zadd myzset 3 360.com
zrange myzset 0 -1 with scores
zrange myzset 0 -1
复制代码- redis数据结构-哈希hashes
HMSET user:001 username antirez password P1pp0 age 34
HGETALL user:001
HSET user:001 password 12345 //修改部分数据
HGETALL user:001
复制代码redis持久化
RDB--Redis DataBase
类似每五分钟保存下数据,到磁盘。但如果 崩溃,会有丢失
AOF--Append Only File
- 事物处理
- MULTI用来组装一个事务;
- EXEC用来执行一个事务;
- DISCARD用来取消一个事务;
- WATCH用来监视一些key,一旦这些key在事务执行之前被改变,则取消事务的执行。
MULTI //标记事务开始
OK
INCR user_id //多条命令按顺序入队
QUEUED //QUEUED成功缓存 (数据类型为错也可能)
INCR user_id
QUEUED
INCR user_id
QUEUED
PING
QUEUED
EXEC //执行
1) (integer) 1
2) (integer) 2
3) (integer) 3
4) PONG复制代码watch------类似乐观锁,支持监视多个key,只要还没触发事务,一旦修改key,exec时就返回nil,表示事务无法触发
set age 23
OK
watch age //开始监视age
OK
set age 24 //在EXEC之前,age的值被修改了
OK
multi
OK
set age 25
QUEUED
get age
QUEUED
127.0.0.1:6379> exec //触发EXEC
(nil) //事务无法被执行复制代码配置---redis.conf
redis的默认服务端口是6379
redis还支持通过unix socket方式来接收请求
当一个redis-client一直没有请求发向server端,那么server端有权主动关闭这个连接,可以通过timeout来设置“空闲超时时限”,0表示永不关闭。
timeout 0复制代码TCP连接保活策略,可以通过tcp-keepalive配置项来进行设置,单位为秒,假如设置为60秒,则server端会每60秒向连接空闲的客户端发起一次ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接。所以关闭一个连接最长需要120秒的时间。如果设置为0,则不会进行保活检测。
tcp-keepalive 0复制代码配置---限制
设置redis同时可以与多少个客户端进行连接。默认情况下为10000个客户端。
maxclients 10000复制代码redis提供了多达6种的移除规则
1.volatile-lru:使用LRU算法移除过期集合中的key
2.allkeys-lru:使用LRU算法移除key
3.volatile-random:在过期集合中移除随机的key
4.allkeys-random:移除随机的key
5.volatile-ttl:移除那些TTL值最小的key,即那些最近才过期的key。
6.noeviction:不进行移除。针对写操作,只是返回错误信息。
配置---追加模式
appendonly no复制代码redis支持三种不同的模式:
1.no:不调用fsync()。而是让操作系统自行决定sync的时间。这种模式下,redis的性能会最快。
2.always:在每次写请求后都调用fsync()。这种模式下,redis会相对较慢,但数据最安全。
3.everysec:每秒钟调用一次fsync()。这是性能和安全的折衷。