redis的特点与使用

redis的特点

  1. 速度快 :写速度能达到:80000次/S,读速度100000次/秒,基于内存的。使用C语言编写。
  2. 支持的数据结构丰富 :string字符串,hash(key-value),set(集合),zset(有序集合),list(列表)。
  3. 支持主从复制(集群) :redis集群的基础就是主从复制,10G/s
  4. 支持数据的持久化 :memecached基于内存的nosql(not only sql)数据库,不能够持久化。redis支持数据的持久化(AOF,到期时间,RDB)
    cd /etc/yum.repos.d/
  5. 支持的开发语言丰富

在这里插入图片描述

安装redis和使用

yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
打开 , 状态 , 关闭
systemctl start redis
systemctl redis status
systemctl redis stop

cmd命令输入:telnet 192.168.186.10 6379----连接(先打开Telent Client)

      vim redis.conf
          daemonize yes   //222行

127.0.0.1 192.168.186.10 //69

         :wq
         ./redis-server redis.conf

重启
systemctl restart redis

进入redis命令控制
redis-cli -h 192.168.186.10 -p 6379

set key value 设值
get key 获取redis的key值
dbsize 查看当前redis有多少个key
keys * 查看所有的key
flushall 清空所有的key 慎用
client list 查看当前所有的客户端连接
client kill ip:port 端开某个客户端连接
client kill 192.168.186.10 干掉对应的连接
MONITOR:进入监控模式,可以实时监控所有客户端的操作。

set mytime 200 ex 10 ------mytime 10 秒后过期

数据结构

String(字符串)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

每个 hash 可以存储 232 -1 键值对(40多亿)。

List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
将aaa保存到list中,list的名称叫作mylist
192.168.186.10:6379> rpush mylist aaa
(integer) 1
192.168.186.10:6379> rpush mylist bbb
(integer) 2
192.168.186.10:6379> rpush mylist ccc
(integer) 3
获取list中下标为0的值
192.168.186.10:6379> LINDEX mylist 0
“aaa”
192.168.186.10:6379> LINDEX mylist 1
“bbb”
192.168.186.10:6379> LINDEX mylist 2
“ccc”
192.168.186.10:6379> LINDEX mylist 3
(nil)
获取list中所有的值
192.168.186.10:6379> LRANGE mylist 0 -1

  1. “aaa”
  2. “bbb”
  3. “ccc”
    192.168.186.10:6379> LRANGE mylist 0 2
  4. “aaa”
  5. “bbb”
  6. “ccc”
    192.168.186.10:6379> LINDEX mylist -1
    “ccc”
    LPUSH在list左边追加
    192.168.186.10:6379> LPUSH mylist ddd
    (integer) 4
    192.168.186.10:6379> LRANGE mylist 0 -1
  7. “ddd”
  8. “aaa”
  9. “bbb”
  10. “ccc”
    192.168.186.10:6379>

list 排序

比如微博的关注列表,粉丝列表,消息列表等功能都可以用Redis的 list 结构来实现

示例中的qy93hash是hash的key名称,classname为属性名,qy93为name属性值。

set(集合)

Redis的Set是string类型的无序集合。
set中添加值 sadd “set的key”“set 的值”
查看所有的值:smembers setName
删除某个值:srem valuename
获取集合中的元素个数:

zset(sorted set: 有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score

地理空间

http://news.cntrades.com/show-186844.html

添加4个城市:
geoadd china 116.41667 39.91667 bj 121.43333 34.50000 sh 117.20000 39.13333 tj 113.65000 34.76667 zz 114.06667 22.61667 sz
返回两个城市的直线距离(默认单位为米,可以使用km)
geodist china zz sz
返回113.65 34.76经纬度为中心,800公里之内的城市
georadius china 113.65 34.76 800 km
返回指定城市的经纬度
geopos china sz zz
示例中的myzset为set的key名,0 到1000指的是score在0到1000之间的值

HyperLogLog

统计基数,相当于数据库中的distinct。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
什么是基数?

比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。

redis的使用场景

常规计数:微博数,粉丝数,点赞数,验证码,

点赞数

点赞
INCR praise
get praise
incr praise
incr praise
get praise
decr praise
INCR praise

取消点赞
decr praise

分布式锁(setnx expire)

在多线程同时执行一个业务时修改某一个变量时,保证同一时刻只有一个线程执行,叫做锁
当业务使用集群技术,让同一个业务放在不同的服务器上,每个服务器上都多个线程,保证所有服务器同一个时刻,只有一个线程执行业务,叫分布式锁
redis如何实现分布式锁(重要面试题setnx expire del
1,使用setnx 在key不存在时设置值,实现加锁,其他线程无法在创建该key的锁
2,设置成功的,就等于拿到了锁,执行业务
3,执行业务之后,使用del删除锁
4,为了防止执行业务过程中出现异常,第3步没有执行,第1步执行完毕时, 使用expire 设置过期时间,防止出现死锁等现象,让多个请求等待)

热搜榜

1、将新闻放入到zset集合中
2、新闻只要被搜索打开一次,就给分数加1
3、使用zset的排序功能显示热搜榜

redis的配置文件详解:

基本配置

port 6379 # 监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。

daemonize no #是否以后台进程启动

databases 16 #创建database的数量(默认选中的是database 0)

save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化。
save 300 10 #必须是300秒之后至少10个关键字发生变化。
save 60 10000 #必须是60秒之后至少10000个关键字发生变化。

stop-writes-on-bgsave-error yes #后台存储错误停止写。
rdbcompression yes #使用LZF压缩rdb文件。
rdbchecksum yes #存储和加载rdb文件时校验。
dbfilename dump.rdb #设置rdb文件名。
dir ./ #设置工作目录,rdb文件会写入该目录。

主从配置

slaveof 设为某台机器的从服务器
masterauth 连接主服务器的密码
slave-serve-stale-data yes # 当主从断开或正在复制中,从服务器是否应答
slave-read-only yes #从服务器只读
repl-ping-slave-period 10 #从ping主的时间间隔,秒为单位
repl-timeout 60 #主从超时时间(超时认为断线了),要比period大
slave-priority 100 #如果master不能再正常工作,那么会在多个slave中,选择优先值最小的一个slave提升为master,优先值为0表示不能提升为master。

repl-disable-tcp-nodelay no #主端是否合并数据,大块发送给slave
slave-priority 100 从服务器的优先级,当主服挂了,会自动挑slave priority最小的为主服

安全

requirepass foobared # 需要密码
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 #如果公共环境,可以重命名部分敏感命令 如config

限制

maxclients 10000 #最大连接数
maxmemory #最大使用内存

maxmemory-policy volatile-lru #内存到极限后的处理
volatile-lru -> LRU算法删除过期key
allkeys-lru -> LRU算法删除key(不区分过不过期)
volatile-random -> 随机删除过期key
allkeys-random -> 随机删除key(不区分过不过期)
volatile-ttl -> 删除快过期的key
noeviction -> 不删除,返回错误信息

#解释 LRU ttl都是近似算法,可以选N个,再比较最适宜T踢出的数据
maxmemory-samples 3

日志模式

appendonly no #是否仅要日志
appendfsync no # 系统缓冲,统一写,速度快
appendfsync always # 系统不缓冲,直接写,慢,丢失数据少
appendfsync everysec #折衷,每秒写1次

no-appendfsync-on-rewrite no #为yes,则其他线程的数据放内存里,合并写入(速度快,容易丢失的多)
auto-AOF-rewrite-percentage 100 当前aof文件是上次重写是大N%时重写
auto-AOF-rewrite-min-size 64mb aof重写至少要达到的大小

慢查询

slowlog-log-slower-than 10000 #记录响应时间大于10000微秒的慢查询
slowlog-max-len 128 # 最多记录128条

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值