redis安装与使用
数据库类型
1、关系型数据库
- 使用sql语句进行操作
- 数据存储在磁盘
诸如mysql、oracle、sqlserver、sqlite
2、非关系型数据库
- 不依赖sql语句
- 数据存储在内存(存储格式是键值对)
- 数据可以持久化(存储到磁盘中)
诸如redis(线性工作,工作速度快是由于内部维护了一个队列)、memcached
redis安装
$ wget http://download.redis.io/releases/redis-6.0.6.tar.gz
$ tar xzf redis-6.0.6.tar.gz
$ cd redis-6.0.6
$ make
$ sudo make install
redis启动
启动server:
- redis-server(使用默认配置文件,绑定本地IP和6379端口)
- redis-server ./redis.conf(将配置文件拷贝出来修改,在启动时带上配置文件即可,常用于远程访问)
启动client:
-
redis-cli
-
redis-cli -h ip -p port(常用于远程访问)
-
发送ping,回复pong;发送ping nihao,回复nihao
关闭服务器:
- shutdown(前提是客户端已经连接上服务器了)
redis配置文件
文件位置:/home/lzy/Documents/diskPro/redis-6.0.6/redis.conf(拷贝出来修改)
设置允许远程访问:
-
bind 127.0.0.1(注释掉绑定的本地ip)
-
protected-mode on(设置远程访问)
port 6379
daemonize no(不是守护进程,默认阻塞,yes启动守护进程,则会在某个目录生成pid文件,里面只有一个pid,即server对应的进程id)
pidfile /var/run/redis.pid(redis以守护进程方式运行时,pid的存放位置)
logfile "./redis.log"(log文件位置,什么都不写则重定向到/dev/null,即垃圾回收站)
dbfilename dump.rdb(数据库镜像备份文件名,还有相应进行数据库镜像的频率)
dir ./(数据库镜像备份文件的路径)
将持久化方式改为aof:
-
appendonly no
-
appendfilename "appendonly.aof"
-
appendfsync everysec
database 16(默认是16个数据库)
redis持久化操作
-
rdb形式(默认方式,在redis启动的目录中生成dump.rdb)
- 特点:存储的是内存的数据(快照的方式,按照某种频率(见配置文件)做数据存储)
- 缺点:存储的频率太高,存储效率低;频率太低,同步不及时
- 优点:数据恢复快
-
aof形式
- 特点:存储的是命令
- 缺点:数据恢复用时比较长
- 优点:数据存储到磁盘效率高,占用磁盘空间小
redis客户端及常用API
http://www.redis.cn/clients.html#c 里面包含语言的客户端,这里选用c的hiredis
下载安装
git clone https://github.com/redis/hiredis.git
make
sudo make install
常用API
见hiredis.h文件中的接口
见examples/example.c文件中借鉴函数用法
- redisConnect:连接数据库/返回redisContext结构体指针
- redisCommand:发送请求命令/返回redisReply类型的指针
- freeReplyObject
- redisFree
redis数据类型
redis中所有的数据都是键值对(key-value)
-
key:字符串
-
value:字符串/hash/list/set/sortedset类型zset
针对key的操作
- keys *(列出所有的键key)
- keys str*
- key的生存时间
- expire key seconds(秒)
- ttl key(查看剩余生存时间)
- persist key(清除生存时间)
- pexpire key milliseconds(毫秒)
- del key1(删除key)
- rename key newkey
- type key(获取key的数据类型)
下述均是针对value值进行的操作
string类型常见操作
- set str1 hello
- get str1
- mset str2 233 str3 45
- keys *
- mget str1 str2 str3
- incr str2(自增命令,针对整型字符串)
- decr str3(自减命令)
- apend str1 world(字符串拼接)
List类型常见操作
操作过程中,既可以按照队列(先进先出)操作也可以按照栈(先进后出)操作
队列:队头出数据lpop,对尾进数据rpush
栈:只能操作栈顶(rpush/rpop或者lpush/lpop)
可以看作string数组,用作新闻门户网站的新闻标题,同时设置key的生存周期
- lpush ls1 aaa bbb ccc ddd ee 123
- lrange ls1 0 -1(0是第一个元素,-1是最后一个元素,-2是倒数第二个元素)
- rpush ls1 9 8 7 6 5
- lpop ls1
- rpop ls1
- llen ls1(求长度)
Set类型常见操作
无序集合,key对应的value不能重复,常用于求交集并集
-
sadd set1 1 2 3 4 5 5 5 5
-
smembers set1(列出集合中所有元素,1 2 3 4 5,元素值不允许重复)
-
srem set1 1 2 3(从集合中删除)
-
sadd set2 4 5 6 7 8
sdiff set1 set2(set1-set2)
sdiff set2 set1(set2-set1)
-
sinter set1 set2(交集)
-
sunion set1 set2(并集)
SortSet类型常见操作
有序集合, (分数-字符串) 结构,按照分数给字符串排序
- zadd zset1 6 hello 1 world 8 abc
- zrange zset1 0 -1
- zrange zset1 0 -1 withscores(升序)
- zrevrange zset1 0 -1(降序)
Hash类型常见操作
哈希集合,(key:value)结构,能用map的地方就可以用hash
-
hset usr username zhang3
-
hset usr age 32
-
hset usr passwd 123456
-
hget usr username
-
hmset zhang3 sex nan age 32 disp gay
-
hmget zhang3 sex age disp
-
hgetall usr

浙公网安备 33010602011771号