600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > redis介绍 redis安装 redis持久化 redis数据类型

redis介绍 redis安装 redis持久化 redis数据类型

时间:2021-07-16 11:10:05

相关推荐

redis介绍  redis安装  redis持久化  redis数据类型

redis介绍

Redis和Memcached类似,也属于k-v数据存储Redis官网redis.io, 当前最新稳定版4.0.1 支持更多value类型,除了和string外,还支持hash、lists(链表)、sets(集合)和sorted sets(有序集合)redis使用了两种文件格式:全量数据(RDB)和增量请求(aof)。

全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载。

增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,这种类似于mysql binlog。redis的存储分为内存存储、磁盘存储和log文件三部分

redis安装

安装

[root@draft src]# wget http://download.redis.io/releases/redis-4.0.1.tar.gz -c[root@draft src]# tar zxf redis-4.0.1.tar.gz [root@draft src]# mv redis-4.0.1 redis4[root@draft src]# cd redis4[root@draft redis4]# make && make install #不用configure;

默认配置文件和修改项目;

bind 127.0.0.1 #监听的IP;protected-mode yes #保护模式;port 6379tcp-backlog 511timeout 0tcp-keepalive 300daemonize no#要改成yes;后台运行;supervised nopidfile /var/run/redis_6379.pidloglevel notice #日志等级;logfile ""#创建目录,如 "/var/log/redis.log"databases 16 #默认有0-16个数据库;always-show-logo yessave 900 1#保存在DB的规则;save 300 10save 60 10000stop-writes-on-bgsave-error yes #错误时停止写;rdbcompression yes#压缩;rdbchecksum yesdbfilename dump.rdb #储存文件名;dir ./ #路径,设置成 /data/redisslave-serve-stale-data yes #从机与主机断开时,继续应答请求;slave-read-only yes#主读,防止从机被写入;repl-diskless-sync norepl-diskless-sync-delay 5repl-disable-tcp-nodelay noslave-priority 100 #从机优先级;lazyfree-lazy-eviction nolazyfree-lazy-expire nolazyfree-lazy-server-del noslave-lazy-flush noappendonly no #改成yes开启aof;appendfilename "appendonly.aof" #文件名;appendfsync everysec #每秒同步一次;no-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbaof-load-truncated yesaof-use-rdb-preamble nolua-time-limit 5000slowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0notify-keyspace-events ""hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64hll-sparse-max-bytes 3000activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10aof-rewrite-incremental-fsync yes

启动redis

[root@draft redis4]# mkdir -p /data/redis[root@draft redis4]# cp redis.conf /etc/redis.conf #把修改后的配置文件,放到/etc里;[root@draft redis4]# redis-server /etc/redis.conf#启动[root@draft redis4]# ps aux |grep redisroot13866 0.3 0.2 145304 2092 ? Ssl 13:47 0:00 redis-server 127.0.0.1:6379root13871 0.0 0.0 112728 972 pts/0 S+ 13:48 0:00 grep --color=auto redis[root@draft redis4]# netstat -lntp |grep redistcp 00 127.0.0.1:63790.0.0.0:*LISTEN13866/redis-server

启动后的日志

13866:M 12 Dec 13:47:53.832 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.13866:M 12 Dec 13:47:53.832 # Server initialized13866:M 12 Dec 13:47:53.833 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.13866:M 12 Dec 13:47:53.841 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.13866:M 12 Dec 13:47:53.841 * Ready to accept connections

处理以上两个警告

[root@draft redis4]# sysctl vm.overcommit_memory=1vm.overcommit_memory = 1[root@draft redis4]# echo never > /sys/kernel/mm/transparent_hugepage/enabled [root@draft redis4]# tail -2 /etc/rc.local #添加两个命令到rc.local里,开机运行;sysctl vm.overcommit_memory=1echo never > /sys/kernel/mm/transparent_hugepage/enabled[root@draft redis4]# ls -la /data/redis/ #文件以root权限创建;总用量 0drwxr-xr-x. 2 root root 28 12月 12 13:47 .drwxr-xr-x. 4 root root 32 12月 12 13:46 ..-rw-r--r--. 1 root root 0 12月 12 13:47 appendonly.aof[root@draft redis4]# ll /var/log/redis.log -rw-r--r--. 1 root root 2451 12月 12 13:47 /var/log/redis.log

Redis持久化

Redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上。AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。如果你没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache一样。

Redis持久化相关参数

save 900 1 #表示每15分钟且至少有1个key改变,就触发一次持久化save 300 10 #表示每5分钟且至少有10个key改变,就触发一次持久化save 60 10000 #表示每60秒至少有10000个key改变,就触发一次持久save “” #这样可以禁用rdb持久化appendonly yes #如果是yes,则开启aof持久化appendfilename “appendonly.aof” # 指定aof文件名字appendfsync everysec #指定fsync()调用模式,有三种no(不调用fsync),always(每次写都会调用fsync),everysec(每秒钟调用一次fsync)。第一种最快,第二种数据最安全,但性能会差一些,第三种为这种方案,默认为第三种。

Redis数据类型

string数据类型

string为最简单的类型,与Memcached一样的类型,一个key对应一个value,其支持的操作与Memcached的操作类似,它的功能更丰富。设置可以存二进制的对象。

[root@draft redis4]# redis-cli 127.0.0.1:6379> set k1 123OK127.0.0.1:6379> set k2 234OK127.0.0.1:6379> set k3 456OK127.0.0.1:6379> get k1"123"127.0.0.1:6379> get k2"234"127.0.0.1:6379> get k3"456"127.0.0.1:6379> MSET k1 12 k2 23 k3 34 #一次设置多个键;OK127.0.0.1:6379> MGET k1 k2 k3 #一次读取多个键;1) "12"2) "23"3) "34"

list 数据类型

list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。

使用 list 结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的 TimeLine )。list 的另一个应用就是消息队列,可以利用 list 的 push操作,将任务存在 list 中,然后工作线程再用pop操作将任务取出进行执行。

127.0.0.1:6379> LPUSH l1 1 #放进元素;(integer) 1127.0.0.1:6379> LPUSH l1 5(integer) 2127.0.0.1:6379> LPUSH l1 588(integer) 3127.0.0.1:6379> LRANGE l1 0 -1 #读取最新的到最后一个;先进后出;1) "588"2) "5"3) "1"127.0.0.1:6379> LRANGE l1 0 -21) "588"2) "5"127.0.0.1:6379> LPOP l1 #拿出最后个元素;"588"127.0.0.1:6379> LRANGE l1 0 -1 #拿出后消息;1) "5"2) "1"

set 数据类型

set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。

比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。

127.0.0.1:6379> SADD s1 1 3 5 7 9 #设置一个集合;(integer) 5127.0.0.1:6379> SADD s2 2 4 6 8 10 1 3 5 7 9 #设置第二个集合;(integer) 10127.0.0.1:6379> SMEMBERS s1 #读取一个集合;1) "1"2) "3"3) "5"4) "7"5) "9"127.0.0.1:6379> SMEMBERS s2 1) "1"2) "2"3) "3"4) "4"5) "5"6) "6"7) "7"8) "8"9) "9"10) "10"127.0.0.1:6379> SREM s2 1 3 5 #删除集合中的元素;(integer) 3127.0.0.1:6379> SMEMBERS s21) "2"2) "4"3) "6"4) "7"5) "8"6) "9"7) "10"127.0.0.1:6379> SINTER s1 s2 #两个集合的交集;1) "7"2) "9"127.0.0.1:6379> SUNION s1 s2 #两个集合的并集;1) "1"2) "2"3) "3"4) "4"5) "5"6) "6"7) "7"8) "8"9) "9"10) "10"127.0.0.1:6379> SDIFF s1 s2 #两个集合的差集;1) "1"2) "3"3) "5"

sorted set 数据类型

sorted set是有序集合,它比set多了一个权重参数score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。

127.0.0.1:6379> ZADD z1 1 abc #sorted set的一个元素,必须是一个数字加一个值;(integer) 1127.0.0.1:6379> ZADD z1 3 klkl(integer) 1127.0.0.1:6379> ZADD z1 4 oiio(integer) 1127.0.0.1:6379> ZADD z1 39 lll(integer) 1127.0.0.1:6379> ZADD z1 02 lll(integer) 0127.0.0.1:6379> ZRANGE z1 0 -1 #读取第一个到倒数第一个元素,按元素的数字排序;1) "abc"2) "lll"3) "klkl"4) "oiio"127.0.0.1:6379> ZREVRANGE z1 0 -1 #倒序;1) "oiio"2) "klkl"3) "lll"4) "abc"

hash 数据类型

在 Memcached 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(一般是 JSON 格式),比如用户的昵称、年龄、性别、积分等。

127.0.0.1:6379> hset h1 name t #一个hash数据,包含多对键和值;设置一个键值;(integer) 1127.0.0.1:6379> hset h1 age 33(integer) 1127.0.0.1:6379> hset h1 job it(integer) 1127.0.0.1:6379> hset h1 heigh 170(integer) 1127.0.0.1:6379> HGET h1 job #读取其中一个键;"it"127.0.0.1:6379> HGETALL h1 #读取所有键;1) "name"2) "t"3) "age"4) "33"5) "job"6) "it"7) "heigh"8) "170"

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。