参考

1.redis的数据结构

redis存储的是key-value格式的数据,其中key都是字符串类型,value主要有5种不同的数据结构,如下所示:

  1. 字符串类型:string
  2. 哈希类型:hash
  3. 列表类型:list
  4. 集合类型:set
  5. 有序集合类型:sortedset

2.redis中的数据库

redis默认有16个数据库(0号到15号),初始默认使用的是0号数据库。

  1. 数据库的切换
# select index
select 8表示使用8号数据库
  1. 清空当前库
flushdb
  1. 清空全部数据库
flushall

3.对key的一些操作

1. 提示
#如果对某个命令的使用生疏,则help 命令名
127.0.0.1:6379> help set
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
summary: Set the string value of a key
since: 1.0.0
group: string
2.删除key
del 'key_name'
# 或者
del key_name
3.序列化给定的key,返回被序列化的值
dump 'key_name'
4.判断给定的key是否存在
exists 'key_name'
5.给一个key设定过期时间
expire key seconds
expire 'key_name'  1
6.key的查询
keys '*'
7.将当前数据库的key移动到数据库db中
move 'key_name'  db
8.返回给定key剩余的过期时间,毫秒为单位(-1表示永远不过期,-2表示已经过期)
pttl 'key_name'
9.返回给定key的剩余生存时间 ,秒为单位
# -1表示永不过期,-2表示已经过期
TTL 'key_name'
10.从数据库随机返回一个key
randomkey
11.修改key的名称
#只有当newkey这个键不存在时,才能修改
renamenx key newkey
#而rename命令,即使在newkey已经存在,也会用newkey替换key,不安全
12.查看key的类型
type key
13.移除 key 的过期时间,持久化key(永不过期)
persist key
14.获取当前数据库的键总数
dbsize

4.string类型的值的操作

1.string的特点
  1. 一个key对应一个value。
  2. 底层都是字节数组存储,只不过编码方式不同。 根据字符串的格式不同,可以分为三类:
    1. string:普通字符串,可以做拼接操作
    2. int:整数类型,可以做自增自减操作
    3. float:浮点类型,可以做自增自减操作
2.string的常用操作
  1. 设定key的值,key的值允许被覆盖
#set key value [EX seconds] [PX milliseconds] [NX|XX]
#nx:如果key不存在则建立,可以直接使用setnx命令
#xx:如果key存在则修改其值。
#EX:键的超时秒数,可以直接使用setex命令
#PX:键的超时毫秒数
set key mydata
  1. 获取key的值
get key
  1. 获取key所对应的值中索引0到2的字符串
getrange key 0 2
  1. 获取旧值,设置新值。如果先前不存在给定的键,则设置。
getset key newdata
  1. 可以获取多个键的值
mget key1 key2
  1. 设定key的值并且设定过期时间
setex key seconds values
  1. 只有在key不存在时才设定key的值
setnx key  value
  1. 返回key存储的value的长度
strlen key
  1. 同时设定多个键值对
mset key value key value
  1. 给key存储的数值(值为整型)加一/减一
incr key/decr key
  1. 给key存储的数值(值为整型)减去给定的值
#decrby key decrement
decrby key 2
  1. 在原有的key值(值为字符串)上添加字符串
append key value

5.Hash类型的值的操作

1.hash类型的特点
  1. Redis hash 是一个键值对集合,键用field表示,值用value表示。
  2. hash特别适合用于存储对象。
  3. 类似于Java中的HashMap结构
2.hash类型的操作
  1. 设定key:
#hmset key field value [field value...]
#a:10, b: wujq 
hmset key_name a 10 b wujq
  1. 删除key中字段a的值
# hdel key field
hdel key_name a
  1. 获取key中的所有字段和其对应的值
hgetall key
  1. 获取key中某个字段的值
# hget key field 
hget key a
  1. key值中字段a是否存在
hexists key a
  1. 删除key的值
del key
  1. 获取key所有的字段
hkeys key
  1. 获取key所有的字段的value
hvals  key
  1. 设置key中a的值
#设置指定键的hash字段和对应的值
hset key a 13
#设置指定键的多个hash字段和对应的值
hmset key field value [field value...]
#当field不存在才设置指定键的hash字段和对应的值
hsetnx key field value
  1. a自增1
# hincrby key field increment
hincrby key a 1

6.list操作

1.list特点:
  1. 有序:元素的插入顺序和遍历顺序可一样
  2. 元素可以重复
  3. 插入和删除快,查询慢
2.list操作:
  1. 遍历所有的值
lrange key start stop
#遍历列表中的所有值,则通常这样写
lrange key_name 0 -1
  1. 移除出列表(第一个/最后一个)并获取这个值:
// B:block的缩写
BLPOP key timeout (没有元素会阻塞直到timeout)
BRPOP key timeout (没有元素会阻塞直到timeout)
  1. 移除出第一个元素并返回
LPOP key
  1. 移除出最后一个元素并返回
RPOP key
  1. 获取列表长度
LLEN key
  1. 移除列表多个相同value的纪录(从头开始)
LREM key count value
  1. 保留一定范围内的数据其它的都删除:数据修剪
LTRIM key start_index stop_index
  1. 弹出列表a最后一个元素,添加到另一个b列表中去,并返回这个值
RPOPLPUSH source destination
  1. 通过索引获取列表中的值
LINDEX key index
  1. 通过索引设置列表key下标为index的值
LSET key index value
  1. 向已存的列表追加值
#往list的左边或者右边中追加一个或者多个值
#lpush key value [value...]
#rpush key value [value...]

#只有当列表存在时才追加value
rpushx key value
lpushx key value
  1. 往列表中的某个元素前面或者后面插入一个元素
#linsert key before|after  value newvalue

7.set集合操作

1.set集合的特点
  1. 集合是无序集合,存入和取出的顺序不能保证一致
  2. 成员是唯一的,不允许元素重复。
  3. 支持交集、并集、差集等功能。
  4. 类似于Java中的HashSet
2.set的常用操作
  1. 添加集合
sadd  key member[member...]
  1. 获取集合中的所有元素
smembers  key
  1. 返回两个集合的差集
# key1中有,key2中没有
sdiff  key1 [key2]
  1. 返回两个集合的交集
sinter  key1 [key2]
  1. 判断集合是否包含a
sismember key a
  1. 移除集合中一个随机元素并返回
spop key
  1. 返回集合中count个随机数
srandmember key count
  1. 移除指定的多个成员
srem key mem1 mem2
  1. 两个集合并集
sunion key1 key2
  1. 两个集合并集存储到新的集合中
sunionstore destination key1 key2
  1. 获取集合大小
scard yu
  1. 迭代一个集合:根据匹配规则遍历集合
sscan key cursor [MATCH pattern] [COUNT count]  
eg: sscan key 0 match h*
  1. 把集合中一个值从一个集合移动到另一个集合
smove source destination value

8.有序集合SortedSet操作

1. SortedSet的特点
  1. Redis中的zset和set一样也是string类型元素的集合,不允许重复元素
  2. 集合中的元素有顺序
    1. 有序的实现: 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
  3. 底层实现跳表加哈希表
2.SortedSet的常用操作
  1. 将一个或者多个member元素及其score值加入到有序集key当中
zadd key score1 value1 score2 value2
  1. 返回有序集key中下标在[start,end]之间的元素
zrange key start end [withscores]
  1. 返回有序集中所有score值在[min,max]之间的成员。有序集成员按照score值从小到大排列。
zrangebyscore key min max [withscores]
  1. 返回有序集中所有score值在[min,max]之间的成员。有序集成员按照score值从大到小排列。
zrevrangebyscore key max min [withscores]
  1. 删除有序集合中指定值的元素
zrem key value
  1. 为有序集key中的指定元素加上增量
zincrby key increment member
  1. 统计有序集合中指定分数区间内的元素个数
# 分数区间[min,max]
zcount key min max
  1. 返回指定值在有序集合中的排名,排名从0开始
zrank key value

9.Bitmaps

redis提供Bitmaps数据类型,可以实现对位的操作。该数据结构的示例:可以将是否访问过网站的独立用户存放在Bitmaps中,用偏移量作为用户的id,将访问过的用户记作1,没有访问过的用户记作0。

  1. 设置Bitmaps中某个偏移量的值,值只有两个,0或者1
# offset表示偏移量,从0开始。value值为0或者1
setbit key offset value
  1. 获取Bitmaps中某个偏移量的值
getbit key offset
  1. 统计字符串中被设置为1的bit个数。可用于统计访问过网站的用户数量。
# start和end代表起始和结束字节数
bitcount key [start end]
  1. bitop:bitop是一个复合操作,它可以将多个 Bitmaps 的 and(交集) 、 or(并集) 、 not(非) 、 xor(异或) 操作并将结果保存在 destkey 中。

10.redis配置文件

redis.conf 配置项说明:参考

11.redis的持久化

  1. 概念:redis是一个内存数据库,当redis服务器重启后,或者电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中
  2. redis的持久化机制
1. RDB:默认方式,不需要配置,默认使用这种方式
    在指定的间隔时间中,检测key的变化情况,然后持久化数据。
    
2. AOF:日志记录的方式,可以记录每一条写命令的操作,每一次写命令操作后持久化数据。
1.RDB持久化方式(redis database)
  1. 编辑redis.conf文件
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
save 900 1
save 300 10
save 60 10000
  1. 重新启动redis服务器,并指定配置文件名称
redis-server redis.conf文件位置 

数据将默认保存在dump.rdb文件中
3. rdb的备份与恢复
1. 备份:将*.rdb文件拷贝到别的地方
2. 恢复:将备份的文件拷贝回原来的目录,文件名需要和redis.conf中的dbfilename属性值一致,默认为dump.rdb

2.AOF持久化方式(append of file )
  1. 编辑redis.conf文件
appendonly no(默认值no表示关闭AOF持久化方式)
// 开启AOF持久化方式
// AOF 和 RDB 同时开启,系统默认取 AOF 的数据
appendonly yes  

appendfsync always:每一次操作都持久化
appendfsync everysec:每隔一秒都进行持久化
appendfsync no:不主动进行持久化,将同步时机交给操作系统。

  1. 重新启动redis服务器,并指定配置文件名称
redis-server redis.conf 

数据将保存在appendonly.aof文件中
3. aof的备份与恢复与rdb类似