Redis的使用

redis缓存服务器笔记
redis是一个高性能的key-value存储系统,能够作为缓存框架和队列
但是由于他是一个内存系统,这些数据还是要存储到数据库中

作为缓存框架:
create/updae/delete---同时存到redis和数据库
query--先从redis查,没有记录才从数据库查,并把从数据库查的结果也放一份到redis

作为缓存队列:
重要的数据:先存到数据库,然后存到redis
要求响应速度很高的的数据:先写缓存,然后通过消息队列再写入数据库

用户密码以及登录
一、密码管理
查询密码
redis 127.0.0.1:6379> config get requirepass
设置密码
redis 127.0.0.1:6379> config set requirepass 123456
认证密码(设置密码后需要认证,不然使用不了密码)
redis 127.0.0.1:6379> auth test123
查询密码
redis 127.0.0.1:6379> config get requirepass
二、登录
1、使用密码登录
[root@localhost redis-3.0.3]# ./src/redis-cli -p 6379 -a 123456
2、先登录
[root@localhost redis-3.0.3]# ./src/redis-cli -p 6379
虽然登录了,但是不能做任何操作,只有认证密码后,才能使用
redis 127.0.0.1:6379> auth 123456

基本操作
插入
redis 127.0.0.1:6379> set name wwl
查询
redis 127.0.0.1:6379> get name
删除
redis 127.0.0.1:6379> del name
验证键是否存在
redis 127.0.0.1:6379> exists name

一、string
语法:set[get] key value;一次可以定义多个参数,互相没有关联
使用场景:
1,获取字符串长度  
2,往字符串append内容  
3,设置和获取字符串的某一段内容  
4,设置及获取字符串的某一位(bit)  
5,批量设置一系列字符串的内容 
原子计数器
操作:
插入单个
redis 127.0.0.1:6379> set name HongWan
插入多个
redis 127.0.0.1:6379> mset key1 HongWan1 key2 HongWan2
若已存在name,则不覆盖值,nx=>not exists
redis 127.0.0.1:6379> setnx name HongWan_new
有效期10秒,10秒时删除键
redis 127.0.0.1:6379> setex haircolor 10 red

二、hash
语法:hset[hget] 对象名 key value;hash类似于定义一个对象,对象中有N个字段
使用场景:
1,存储、读取、修改用户属性
操作:
插入单个
redis 127.0.0.1:6379> hset myhash field1 Hello
插入多个参数
redis 127.0.0.1:6379> hmset myhash field1 Hello field2 World
若已存在myhash或者field1,则返回0
redis 127.0.0.1:6379> hsetnx myhash field1 Hello
查询单个
redis 127.0.0.1:6379> hget myhash field1
查询多个
redis 127.0.0.1:6379> hmget myhash field1 field2 field
返回指定hash的field数量
redis 127.0.0.1:6379> hlen myhash
返回hash的所有field
redis 127.0.0.1:6379> hkeys myhash
返回hash的所有value
redis 127.0.0.1:6379> hvals myhash
返回某个hash中全部的filed及value。
hgetall myhash

三、list
语法:lpush/rpush[lrange] key value;list相当于一个双向链表,可以进行前插、后插以及特定位置插入
使用场景:
1,关注列表, 最新列表
2,消息队列
操作:
从尾部添加(后插)
redis 127.0.0.1:6379> rpush mylist2 "hello"
从头部添加(前插)
redis 127.0.0.1:6379> lpush mylist2 "world"
特定位置之前或之后添加字符串元素
语法:linsert key before value newvalue
redis 127.0.0.1:6379> linsert mylist3 before "hello" "world"
指定下标设置值(下标从0开始)
语法:lset key 下标 value
redis 127.0.0.1:6379> lset mylist4 0 "four"
从list头部删除数据
redis 127.0.0.1:6379> lpop mylist4
从list尾部删除数据
redis 127.0.0.1:6379> rpop mylist4
删除count个和value相同的元素
语法:lrem key count value
redis 127.0.0.1:6379> lrem mylist7 0 "hello"
按索引返回值
lindex mylist5 0
按范围返回
语法:lrange key 起始下标 结束下标(-1则为最后)
redis 127.0.0.1:6379> lrange mylist5 0 1
返回key对应list的长度
redis 127.0.0.1:6379> llen mylist5

四、sets
语法:sadd[smembers] key value
使用场景:
1,共同好友、二度好友
2,利用唯一性,可以统计访问网站的所有独立 IP
3,好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐
操作:
Set集合中不允许出现重复的元素,如果插入相同值,将返回0,而string,hash类型会覆盖
添加元素
redis 127.0.0.1:6379> sadd myset "hello"
删除
redis 127.0.0.1:6379> srem myset "four"
查询
redis 127.0.0.1:6379> sismember myset two
查询是否存在元素
redis 127.0.0.1:6379> smembers myset
返回元素个数
redis 127.0.0.1:6379> scard myset
返回所有给定key与第一个key的差集
redis 127.0.0.1:6379> sdiff myset2 myset3
返回所有给定key与第一个key的差集,并将结果存为另一个key
语法:sdiffstore 新key 第一个key 比较key
redis 127.0.0.1:6379> sdiffstore myset4 myset2 myset3
redis 127.0.0.1:6379> smembers myset4
所有给定key的交集:
redis 127.0.0.1:6379> sinter myset2 myset3
返回所有给定key的交集,并将结果存为另一个key
redis 127.0.0.1:6379> sinterstore myset5 myset2 myset3
redis 127.0.0.1:6379> smembers myset5
所有给定key的并集:
redis 127.0.0.1:6379> sunion myset2 myset3
返回所有给定key的并集,并将结果存为另一个key
redis 127.0.0.1:6379> sunionstore myset6 myset2 myset3
redis 127.0.0.1:6379> smembers myset6

五、sorted sets
sorted sets和Set集合一样不允许出现重复的元素,如果插入相同值,那么更新该元素的score
使用场景:
1,带有权重的元素,比如一个游戏的用户得分排行榜
2,比较复杂的数据结构,一般用到的场景不算太多
操作:
添加元素
redis 127.0.0.1:6379> zadd myzset 1 "one"
redis 127.0.0.1:6379> zadd myzset 2 "two"
增加元素score(给该元素的值加score,不存在则创建)
redis 127.0.0.1:6379> zincrby myzset2 2 "one"
删除元素
redis 127.0.0.1:6379> zrem myzset "two"
查询(不带score)
redis 127.0.0.1:6379> zrange myzset 0 1
查询(带score)
redis 127.0.0.1:6379> zrange myzset 0 1 withscores
返回名称为key的zset中member元素的排名(按score从大到小排序)即下标
redis 127.0.0.1:6379>  zrank myzset3 "two"
返回名称为key的zset中member元素的排名(按score从大到小排序)即下标
redis 127.0.0.1:6379>  zrevrank myzset3 "two"
返回名称为key的zset(按score从大到小排序)中的index从start到end的所有元素
redis 127.0.0.1:6379>  zrevrange myzset3 0 1 withscores
返回集合中score在给定区间的数量
redis 127.0.0.1:6379> zcount myzset3 2 3
返回集合中元素个数
redis 127.0.0.1:6379> zcard myzset3

结合应用
1,最新问题列表
数据读写、存放:mysql用来写数据,redis用来读数据,mysql存储所有问题的数据,redis存放最新的50条问题列表,
业务流程: 应用需要取得50条最新问题,先从redis里面取得数据,如果没有,则从mysql取得数据(这里会有个问题,redis没有数据,会有两种原因,第一,数据库没数据,第二,redis重启过;那么可以在启动时执行一次sql查询并将数据插入到reids的列表,避免应用在第一次查询延时);redis缓存的50条最新数据,需要实时更新,两个办法,第一,通过工具之类的把mysql的数据更新到redis;第二,在最新问题插入mysql时,同时给redis插入新数据,并删掉最早的数据,保证50条数据是最新的,这样就做到两边同时更新。关于redis列表使用的数据类型,可以是hash,也可以是list。

更多redis资料,参考http://www.runoob.com/redis/redis-commands.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值