1 安装和配置(linux环境)
安装
apt-get install redis-server
安装目录:/etc/redis/redis.conf
配置
sudo vim /etc/redis/redis.conf
-
绑定ip:如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip
bind 127.0.0.1
-
端⼝,默认为6379
port 6379
-
是否以守护进程运⾏[这里的配置主要是linux和mac下面需要配置的]
- 如果以守护进程运⾏,则不会在命令⾏阻塞,类似于服务
- 如果以⾮守护进程运⾏,则当前终端被阻塞
- 设置为yes表示守护进程,设置为no表示⾮守护进程
- 推荐设置为yes
daemonize yes
-
数据⽂件
dbfilename dump.rdb
-
数据⽂件存储路径
dir .
-
⽇志⽂件
logfile “C:/tool/redis/redis-server.log”
-
数据库,默认有16个
database 16
-
主从复制,类似于双机备份。
slaveof
启动
redis-cli
3.2.2 Redis的使用
Redis 是一个高性能的key-value数据格式的内存缓存,NoSQL数据库。
NOSQL:not only sql,泛指非关系型数据库。
关系型数据库: (mysql, oracle, sql server, db2 ,postgre,sqlite)
1. 数据存放在表中,表之间有关系。
2. 通用的SQL操作语言。
3. 大部分支持事务、连表操作。
非关系型数据库[ redis,hadoop,mangoDB]:
1. 没有数据表的概念,不同的nosql数据库存放数据位置不同。
2. nosql数据库没有通用的操作语言。
3. 基本不支持事务。 redis支持简单事务
redis:
内存型(数据存放在内存中)的非关系型(nosql)key-value(键值存储)数据库,
支持数据的持久化(注: 数据持久化时将数据存放到文件中,每次启动redis之后会先将文
件中数据加载到内存),经常用来做缓存(用来缓存一些经常用到的数据,提高读写速度)。
redis是一款基于CS架构的数据库,所以redis有客户端,也有服务端。
其中,客户端可以使用python等编程语言,也可以终端命令行工具
redis客户端连接服务器:
redis-cli -h `redis服务器ip` -p `redis服务器port`
3.3 redis数据类型
1. string类型:
字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,也就是byte类型
最大容量是512M。
2. hash类型:
hash用于存储对象,对象的结构为属性、值,值的类型为string。
key:{
域:值[这里的值只能是字符串],
域:值,
域:值,
域:值,
...
}
3. list类型:
列表的元素类型为string。
key:[ 值1,值2,值3..... ]
4. set类型:
无序集合,元素为string类型,元素唯一不重复,没有修改操作。
{值1,值4,值3,值5}
5. zset类型:
有序集合,元素为string类型,元素唯一不重复,没有修改操作。
3.4 string
如果设置的键不存在则为添加,如果设置的键已经存在则修改
-
设置键值
set key value
-
例1:设置键为
name
值为xiaoming
的数据127.0.0.1:6379> get naem
“xiaoming” -
设置键值及过期时间,以秒为单位
setex key seconds value
-
例2:设置键为
aa
值为aa
过期时间为3秒的数据127.0.0.1:6379> setex name 5 xiaohei
OK
关于设置保存数据的有效期
# setex 添加保存数据到redis,同时设置有效期
格式:
setex key time value
# expire 给已有的数据重新设置有效期
格式:
expire key time
-
设置多个键值
mset key1 value1 key2 value2 …
-
例3:设置键为
a1
值为python
、键为a2
值为java
、键为a3
值为c
127.0.0.1:6379> mset a1 python a2 java a3 c++
OK -
追加值[字符串拼接]
append key value
-
例4:向键为
a1
中追加值haha
127.0.0.1:6379> append a1 3.7
(integer) 9
127.0.0.1:6379> get a1
“python3.7” -
获取:根据键获取值,如果不存在此键则返回
nil
get key
-
例5:获取键
name
的值127.0.0.1:6379> get name
“xiaoming” -
根据多个键获取多个值
mget key1 key2 …
-
例6:获取键
a1、a2、a3
的值127.0.0.1:6379> mget a1 a2 a3
- “python3.7”
- “java”
- “c++”
3.5 键操作
-
查找键,参数⽀持正则表达式
keys pattern
-
例1:查看所有键
keys *
-
例2:查看名称中包含
a
的键127.0.0.1:6379> keys *
- “a2”
- “a1”
- “a3”
- “name”
- “age”
-
判断键是否存在,如果存在返回
1
,不存在返回0
exists key1
-
例3:判断键
a1
是否存在127.0.0.1:6379> exists name
(integer) 1 -
查看键对应的
value
的类型type key
-
例4:查看键
a1
的值类型,为redis⽀持的五种类型中的⼀种127.0.0.1:6379> type a1
string -
删除键及对应的值
del key1 key2 …
-
例5:删除键
a2、a3
127.0.0.1:6379> del a2 a3
(integer) 2 -
查看有效时间,以秒为单位(ttl -> time to live)
ttl key
-
例7:查看键
bb
的有效时间127.0.0.1:6379> setex weather 600 sunny
OK127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> ttl weather
(integer) 591
3.6 hash
结构:
键key:{
域field:值value
}
-
设置单个属性
hset key field value
例1:
127.0.0.1:6379> hset user name peng
(integer) 1 -
设置多个属性
hmset key field1 value1 field2 value2 …
例2:
127.0.0.1:6379> hset user age 26 sex female
(integer) 2 -
获取指定键所有的属性
hkeys key
例3:
127.0.0.1:6379> hkeys user
- “name”
- “age”
- “sex”
-
获取⼀个属性的值
hget key field
例4:
127.0.0.1:6379> hget user sex
“female” -
获取多个属性的值
hmget key field1 field2 …
-
例5:
127.0.0.1:6379> hmget user name sex
- “peng”
- “female”
-
获取所有属性的值
hvals key
例6:
127.0.0.1:6379> hvals user
- “peng”
- “26”
- “female”
-
删除属性,属性对应的值会被⼀起删除
hdel key field1 field2 …
例7:
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hkeys user- “name”
- “sex”
3.7 list
列表的元素类型为string
按照插⼊顺序排序
-
在左侧插⼊数据
lpush key value1 value2 …
例1:
127.0.0.1:6379> lpush group qiu
(integer) 1
127.0.0.1:6379> lpush group rong peng
(integer) 3 -
在右侧插⼊数据
rpush key value1 value2 …
例2:
127.0.0.1:6379> rpush group tian wei
(integer) 5127.0.0.1:6379> lrange group 0 -1
- “peng”
- “rong”
- “qiu”
- “tian”
- “wei”
-
在指定元素的前或后插⼊新元素
linsert key before或after 现有元素 新元素
例3:
127.0.0.1:6379> linsert group before tian hua
(integer) 6
127.0.0.1:6379> linsert group after tian zhou
(integer) 7
127.0.0.1:6379> lrange group 0 -1- “peng”
- “rong”
- “qiu”
- “hua”
- “tian”
- “zhou”
- “wei”
设置指定索引位置的元素值
-
索引从左侧开始,第⼀个元素为0
-
索引可以是负数,表示尾部开始计数,如
-1
表示最后⼀个元素lset key index value
例5:
127.0.0.1:6379> lset group 1 junrong
OK
127.0.0.1:6379> lset group -3 ertian
OK
127.0.0.1:6379> lrange group 0 -1- “peng”
- “junrong”
- “qiu”
- “hua”
- “ertian”
- “zhou”
- “wei”
-
删除指定元素
- 将列表中前
count
次出现的值为value
的元素移除 - count > 0: 从头往尾移除
- count < 0: 从尾往头移除
- count = 0: 移除所有
lrem key count value
- 将列表中前
-
例6.2:
127.0.0.1:6379> lrange group 0 -1
- “peng”
- “a”
- “a”
- “junrong”
- “a”
- “qiu”
- “a”
- “a”
- “hua”
- “ertian”
- “zhou”
- “a”
- “wei”
127.0.0.1:6379> lrem group -2 a
(integer) 2
127.0.0.1:6379> lrange group 0 -1 - “peng”
- “a”
- “a”
- “junrong”
- “a”
- “qiu”
- “a”
- “hua”
- “ertian”
- “zhou”
- “wei”
127.0.0.1:6379> lrem group 2 a
(integer) 2
127.0.0.1:6379> lrange group 0 -1- “peng”
- “junrong”
- “a”
- “qiu”
- “a”
- “hua”
- “ertian”
- “zhou”
- “wei”
127.0.0.1:6379> lrem group 0 a
(integer) 2
127.0.0.1:6379> lrange group 0 -1- “peng”
- “junrong”
- “qiu”
- “hua”
- “ertian”
- “zhou”
- “wei”
3.8 set类型
-
添加元素
sadd key member1 member2 …
例1:
127.0.0.1:6379> sadd boys xiaoming xiaohei xiaolv
(integer) 3 -
返回所有的元素
smembers key
例2:
127.0.0.1:6379> smembers boys
- “xiaolv”
- “xiaohei”
- “xiaoming”
127.0.0.1:6379>
-
删除指定元素
srem key value
例3:
127.0.0.1:6379> srem boys xiaolv
(integer) 1
127.0.0.1:6379> smembers boys- “xiaohei”
- “xiaoming”
127.0.0.1:6379>
-
set类型自动去重
127.0.0.1:6379> sadd boys xiaoming xiaotian
(integer) 1
127.0.0.1:6379> smembers boys- “xiaotian”
- “xiaohei”
- “xiaoming”
3.9 redis的几个站点地址
中文官网: http://www.redis.cn/
英文官网:https://redis.io
参考命令:http://doc.redisfans.com/
针对redis中的内容扩展
flushall 清空数据库中的所有数据
针对各种数据类型它们的特性,使用场景如下:
字符串string: 用于保存一些项目中的普通数据,只要键值对的都可以保存,例如,保存 session,定时记录状态
哈希hash:用于保存项目中的一些字典数据,但是不能保存多维的字典,例如,商城的购物车
列表list:用于保存项目中的列表数据,但是也不能保存多维的列表,例如,队列,秒杀,医院的挂号
无序集合set:用于保存项目中的一些不能重复的数据,可以用于过滤,例如,投票海选的时候,过滤候选人
有序集合zset:用于保存项目中一些不能重复,但是需要进行排序的数据,分数排行榜.