Redis学习
一、redis的五种数据类型
- 字符串(String)
- 哈希(hash)
- 字符串列表(list)
- 字符串集合(set)
- 有序字符串集合
二、存储String(最长不能超过256m)
.key不能过长(消耗的内存,影像查询效率)
.最好有统一的命名规范
.nil 表示没有value
- 赋值 set key value set name tom
- 取值 get key get name
- 取值并赋值 getset key getset name jack
- 删除 del key del name
- 自增1 incr key incr age
- 自减1 decr key decr age
- incrby key number incrby age 5
三、 存储Hash(相当于字符串为key,字符串为value的hashmap容器)
- 赋值 hset key field vaule,… hset hash_key username jack
- 取值 hget key field hget hash_key username –> “jack”
- 取值 hmget key field1,field2,.. hmget hash_key username age –> “jack” “10”
- 取值 hgetall hash_key hgetall hash_key username “jack” age “10”
- 删除 hdel hash_key field1,field2,.. hdel hash_key username age
- 删除 del hash_key del hash_key 删除所有集合
- 自增 hincrby hash_key field number hincrby hash_key age 5 age字段加5
- 是否存在 hexists hash_key field hexists hash_key username 判断username字段是存在
- 长度 hlen hash_key 返回hash容器的属性个数
- 字段 hkeys hash_key 返回hash容器中所有field的名
- 值 hvals hash_key 返回hash容器所有的值
四、存储List(相当于字符串链表)
数组形式的list 插入,删除慢,取值快
双向链表形式的list 插入,删除快,取值慢
- 左端添加 lpush mylist a b c 没有就创建,有则继续添加
- 右段添加 rpush mylist a b c 没有就创建,有则继续添加
- 查看列表 lrange mylist start end 查看list
- lpop mylist 弹出最左边的元素
- rpop mylist 弹出最右边的元素
- llen mylist 返回list长度
- lrem mylist count vaule 删除mylist中count个值;
- lset
- linsert mylist before|after pivot value 在pivot之前或者之后插入元素
- rpoplpush list1 list2 将list1弹出压入list2中
五、存储Set
没有排序的字符串的集合
不允许有重复值
- sadd myset a b c 向myset中添加元素
- srem myset 1 2 删除myset中1,2元素
- smembers myset 返回myset所有元素
- sismember myset a 判断myset中是否存在a元素
- sinter set1 set2 返回set1和set2中交集
- sunion set1 set2 返回set1和set2中并集
- sdiff set1 set2 返回set1中不同于set2中的元素
- scard myset 返回set中的元素个数
- srandmember myset 随机返回myset中的元素
- sdiffstore set1 set2 set3 将set2中不存在于set3中的元素存入set1中
- sinterstore set1 set2 set3 将set2和set3中的元素的交集存入set1中
- sunionstore set1 set2 set3 将set2和set3中的元素并集存入set1中
六、排序Set(sorted-set)
sorted-sort 中存在分数的概念,根据分数来排名,分数是可以重复的
- zadd mysort 70 zhangshang 80 lisi 添加:zhangshang分数为70,lisi分数为80,如果存在则覆盖
- zscore mysort zhangshang 获取zhangshang的分数
- zcard mysort 获取元素个数
- zrem mysort zhangshang 删除zhangshang
- zrange mysort 0 -1 获取0到-1位置的元素 排序由小到大
- zrevrange mysort 0 -1 withscores 获取0到-1位置的元素 排序由大到小
- zremrangebyrank mysort 0 4 删除0 4的元素
- zremrangebyscore mysort 80 100 删除分数在80到100的元素
- zrangebyscore mysort 0 100 withscores 获取分数在0到100的元素
- zrangebyrscore mysort 0 100 withscore limit 0 2 获取分数在0到100的元素只获取两条
- zcount mysort 80 90 获取mysort中分数为80到90中元素的个数
七、Keys通用操作
- keys * 获取redis所有的key
- keys my? 获取以my开头的key
- del my1 删除key为my1的数据
- exists my1 返回0和1 1表示存在,0表示不存在
- rename oldkey newkey 重命名key
- expire key 1000 设置可以的有效时间单位秒
- ttl key 获取key剩余有效时间
- type key 获取key的数据结构类型
- flushall 清空数据库
八、Redis特性
- Redis是多数据库的结构
- 一个redis实例可以包涵多个数据库
- 客户端可以指定连接那个数据库
- 一个redis实例可以提供16个数据
- 默认连接0号数据库
- 使用select选择数据库 select 0 选择0号数据库。
- move myset 1 将本数据库中的myset移动到1号数据库
- Redis事务
使用multi,exec,discard命令
- multi 开启事务,之后的所有命令都会存入队列中
- 使用exec命令后执行(相当于commit)。
- discard(相当于回滚)
九、Redis的持久化
- RDB方式(指定时间将内存中快照的数据保存在文件中
- RDB如果出现服务器宕机,数据不能完证保存
- RDB配置(默认配置)
- save 900 1 每900秒当有一个key发生变化就持久化一次
- save 300 10 每300秒至少有10个key发生变化就持久化一次
- save 60 10000 每60秒至少有10000个key发生变化就持久化一次
- dbfilename dump.rdb 数据库文件
- ./ 当前路径生成保存
- AOF方法(使用日志的方法记录每个一个操作)
- AOF方式 数据安全性
- AOF配置
- appendonly no 修改为 yes
- 默认生成appendonly.aof 文件
- 同步策略
- appendfsync always 每修改一次同步到磁盘中
- appendfsync everysec 每秒同步一次到磁盘中
- appendfsync no 不同步
- 无持久化(不持久化 相当于缓存)