Redis
说明:redis是一个高效的键值对存储的nosql数据库(非关系型数据库)
特点:读取效率高 常用于作mysql数据库的缓存 来减轻MySQL数据库的压力
一 前期准备
打开Windows的配置文件
redis.windows.conf
387行 requirepass 密码
455行 maxheap 1024000000 设置最大数据堆的大小
port 端口号 6379
二 开启redis服务
(1) cd C:\redis64-2.8.2101
>redis-server.exe redis.windows.conf #执行redis服务的命令 并加载Windows的配置文件
(2) 新建一个终端
cd C:\redis64-2.8.2101
>Redis-cli.exe #.exe 可以省略
>auth “123456” #输入密码 就是你在Windows.conf里面设置的那个
三 Redis 值的类型
字符串 String
哈希 Hash
列表 List
集合 Set
有序集合 Zset
Redis命令的网址(必备):http://redis.cn/commands.html
四 String字符串
存储形式 :key value
String类型 是Redis最基本的数据类型 一个键最大能存储512mb
(1) 设置键值
1.设置键值对
set key value
set name "zhangsan"
2. 设置键值及过期时间(秒单位)
setex key seconds value
setex age 10 20
3. 查看过期时间
ttl key
ttl age
4. 设置多个键值
mset key value [key value]
mset name 'zhangsan' age 18 sex 'w'
(2) key 的操作
A 根据key 获取 value
get key
get name
B 根据多个key 获取多个值
mget key [key…]
mget name age sex
(3) 运算
要求:字符串的值 必须是 字符串类型的数字
A 将对应的 key 加1
incr key
incr age
B 将对应的值减1
decr key
decr age
C 将key对应的值 加 整数
incrby key num
incrby age 10
D 将key对应的值减整数
decrby key num
decrby age 10
(4) 其它操作
A 追加值
append key value
append age 20
B 获取值的长度
strlen key
strlen name
五 key的操作
A 查找所有符合pattern(正则表达式) 的key
keys * 查看所有的key
keys n??? 查找以n为开头长度为4个的key
keys *n* 查找 包含 n 的所有的key
支持的正则表达式:
h?llo
匹配第二位为任意的字符h*llo
匹配第二位为任意字符 0个 或多个h[ab]llo
匹配第二位为 a或者b的字符的keyh[^e]llo
匹配第二位除了e字符以外的任意的keyh[a-z]llo
匹配第二位为a-z的小写字母的key
B 判断key是否存在
exists key(存在返回1 不在返回0)
exists name
C 查看key对应的value的类型
type key
type name
D 删除key及 value
del key [key…]
E 设置key的过期时间
expire key seconds
expire name 10 #设置name键 过期时间为 10秒
F 以毫秒为单位 返回过期时间
pttl key
pttl name
G 移除key的过期时间
persist key
persist name
H 删除所有的key
flushdb 只删除当前库里面的所有key
flushall 删除所有ku的key
I 修改key的名称(如果新的key的名字存在 则会把存在的key的值 覆盖掉)
rename key newkey
rename name newname
J 将key移动到其它的数据库里
move key db
move name 1 #将name的键值对 移动到 1库里 那么 原来的库该key不存在
K 随机返回一个 key
randomkey
五 HASH类型
存储形式
key = {
name:”zs”,
age:18
}
hash是一个字符串String类型的field 和 value 的映射表(键值对)
key ->field=>value
1 设置
A.设置 hash 的单个值
hset key field value
hset hash name 'zs'
B 设置多个值
hmset key field value [field value]
hmset hash name 'zs' age 18 sex 'w'
C 为hash 中指定字段的整数值上 增量 increment
hincrby key field increment
hincrby hash age 10
D 为hash 中指定字段的浮点数值上 增量 increment
hincrbyfloat key field increment
hincrbyfloat hash money 0.4
E 当field 字段不存在时 设置hash字段的值
hsetnx key field value
hsetnx hash money 10 #如果hash 键 里每天money字段 那么就会添加money字段 否则不修改
2 获取
A 获取一个值
hget key field
hget hash name
B 获取多个 字段的值
hmget key field
hmget hash name age sex
C 获取hash 所有的字段和值
hgetall key
hgetall hash
D 获取所有的字段
hkeys key
hkeys hash
E 获取所有的字段的值
hvals key
hvals hash
F 获取当前哈希key的数据的个数
hlen key
hlen hash
3 其它
A 判断当前的字段是否存在在(在返回1 否则返回0)
hexists key field
hexists hash name
B 删除字段和值
hdel key field [field]
hdel hash name age sex
C 后去哈希key里面field字段值的长度
hstrlen key field(版本之间存在区别)
六 LIST 列表
概述:列表是简单的字符串列表 按照插入顺序排序 你可以把一个元素 添加到它的左边(头部) 或者是右边(尾部)
[1,2,3,4]
1 设置
A 在头部插入数据
lpush key value [value]
lpush list 1 2 3 4 5
在列表头部插入数据 只有当前列表存在 才会插入数据
lpushx key value
lpushx list 2
B 在尾部插入数据
rpush key value [value]
rpush list 7 8
在列表尾部插入数据(列表存在则写入数据成功)
rpushx key value
rpushx mylist 2
C 在一个元素的前后 插入 数据
linsert key before|after value value
linsert mylist before 'hello' 'world'
linsert mylist after 'hello' 'world'
D 设置指定索引的元素的值
lset key index value
lset mylist 0 'hello' #把索引为0的值 设置为 hello
lset mylist -1 'hello' #把索引为0的值 设置为 hello
注意:
index 索引的值 从0开始
index 的值可以为 负数 -1代表 最后一个
2 获取值
A 从左侧将值移除并返回
lpop key
lpop mylist
B 从右侧将值移除并返回
rpop key
rpop mylist
C 从存于 key 的列表里移除前 count 次出现的值为 value 的元素
LREM key count value
- count > 0: 从头往尾移除值为 value 的元素。
- count < 0: 从尾往头移除值为 value 的元素。
- count = 0: 移除所有值为 value 的元素。
lrem mylist 1 3 #从左往右 删除1个3
lrem mylist -1 2 #从右往左 删除 1个2
D 返回 存储在key的列表中 的指定范围的元素
lrange key start end
lrange mylist 0 -1 #取出全部数据
lrange mylist 2 5 #从索引值为2取到索引值为5的数据
lrange mylist -3 5
lrange mylist -3 -1
E 裁剪列表
ltrim key start stop
ltrime mylist -3 -1 #从倒数第三个-倒数第一个 裁剪出来保留 以外的全部删除
F 返回当前key列表的长度
llen key
llen mylist
G 返回列表中 索引所对应的值
lindex key index
lindex mylist 0 #获取索引值为0 的值
七 set 集合
概述:无序集合 元素类型为String,元素具有唯一性 不重复
{‘a’,’b’}
1 设置
A 添加元素
sadd key member
sadd set 'a' 'b' 'c'
2 获取
A 返回集合中所有的key的元素
smembers key
smembers set
B 返回集合元素的个数
scard key
scard set
C 移除集合中随机的一个元素 并返回
spop key
spop set
D 返回集合中一个或多个随机数
srandmember key count
srandmember set
srandmember set 2
E 移除集合中 一个或者 多个 成员
srem key member1 [member2]
srem set 'a' 'b'
3 其它操作
A 求多个集合的交集
sinter key [key…]
sinter set set1
B 求多个集合的差集 (注意比较顺序)
sdiff key [key…]
sdiff set set1
C 求 多个集合的合计
sunion key [key….]
sunion set set1
D 判断元素是否在集合中 存在返回1 不在返回0
sismember key member
sismember set 'a'
八 zset 有序集合
概述:
有序集合 元素为 String类型 元素具有唯一性 (不重复)
每个元素 都会关联一个score (分数)权重 通过权重来排序 score的值可以相同
1. 设置
A 添加
zadd key score member [score member]
zadd zset 1 'a' 3 'c' 2 'b'
B 有序集合中 对指定的成员增量 increment
zincrby key increment member
zincrby zset 2 'a' #给有序集合zset 元素‘a' 加上权重2
2. 获取
A 返回指定范围的元素
zrange key start end
zrange zset 0 -1 #显示全部
B 返回元素的个数
zcard key
zcard zset
C 返回有序集合中 score 在 min 和 max之间的元素的个数
zcount key min max
zcount zset 1 3
D 返回有序集合中 member(元素) 的权重(score)
zscore key member
zscore zset 'a'
E 返回当前key中 所有的权重(score)和元素(member)
zrange key start end withscores
zrange zset 0 -1 withscores #查看当前有序集合中 所有的元素和权重
九 数据库的切换
概述:redis的数据库 从开始 递增 自动带有数据库 不需要手动创建
进入 redis以后 默认在 0 数据库
select num 切换到 哪个数据库
select 1