缓存之Redis学习(二)

1.安装好了redis之后,我们就可以开始在linux操作redis了。
启动停止redis
在redis bin目录下面 :
./redis-server …/redis.conf
./redis-cli shutdown
后台进程启动的话:
我们可以通过先开启服务之后
通过 ./redis-cli 连接
如果连接远程的redis服务 可以通过:
./redis-cli -h 192.168.1.4 -p 6379(6379是redis对外开放的访问端口)
但是我们通过这个方法却连接不上,我们可以先通过:
./redis-cli -h 127.0.0.1 -p 6379 的方式来连接。上面那个问题之后记录其他内容的时候再补充。
2.redis的数据库:
在这里插入图片描述
可以通过redis.conf的配置看到 默认有16个数据库;默认使用的是 DB 0。可以通过 select 命令切换数据库.可以理解为一个命名空间。跟关系型数据库有一点不一样:
1、redis不支持自定义数据库名词
2、每个数据库不能单独设置授权
3、每个数据库之间并不算完全隔离的。可以通过flushall命令清空redis实例面的所有数据库的数据。
三、对于redis的命令操作
1.获得一个符合匹配规则的键名列表
keys pattern
查找所有符合给定模式 pattern 的 key 。
? 匹配一个字符
* 匹配任意个(包括0个)字符
[] 匹配括号间的任一个字符,可以使用 “-” 符号表示一个范围,如 a[b-d] 可以匹配 “ab”,“ac”,“ad”
\x 匹配字符x,用于转义符号,如果要匹配 “?” 就需要使用 ?

KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,你最好还是用 Redis 的集合结构(set)来代替。
keys模糊匹配,请大家在实际运用的时候忽略掉。因为Keys会引发Redis锁,并且增加Redis的CPU占用,情况是很恶劣的

实际应用中有时候会出现需要遍历redis中的所有键值的需求,比如清理没用的键等等。但是keys这个命令性能真的很差,redis官方文档是这么说的:
Warning: consider KEYS as a command that should only be used in production environments with extreme care. It may ruin performance when it is executed against large databases. This command is intended for debugging and special operations, such as changing your keyspace layout. Don’t use KEYS in your regular application code. If you’re looking for a way to find keys in a subset of your keyspace, consider using SCAN or sets.
由于执行keys命令,redis会锁定,如果数据庞大的话可能需要几秒或更长,对于生产服务器上锁定几秒这绝对是灾难了

如果有这种需求的话可以自己对键值做索引,比如把各种键值存到不同的set里面,分类建立索引,这样就可以很快的得到数据,但是这样也存在一个明显的缺点,就是浪费宝贵的空间,要知道这可是内存空间啊,所以还是要合理考虑,当然也可以想办法,比如对于有规律的键值,可以存储他们的始末值等等。
使用redis的时候要注意很多细节,虽然redis只提供了五种类型,但是用起来不一定就只有五种,比如string类型,你可以存储任何你自己定义的类型,所以思想不能局限,灵活的设定数据结构。还有就是虽然redis存取很快,但是正常生产环境,redis服务器肯定和web服务器不是在一起,有时候甚至是在不同的地区,所以网络通信延迟就很重要了,所以要减少存取次数,一次存取完成更多的工作,否则你会发现做同样的事redis还没有关系型数据库快,所以redis存的时候一定要有技巧,尽可能减少存取次数。

2、 判断一个键值是否存在
exists key
如果存在,返回整数类型 1 ,否则返回 0
3、 获得键值的数据类型
type key
返回值可能是 string(字符串类型)、 hash(散列类型) 、list(列表类型) 、set(集合类型)、 zset(有序集合类型)
四、各种数据结构的使用:
1、字符类型 string :
set get 一个字符类型的key默认存储的最大容量是512M,但是我们一般不可能存这么大的数据到一个key里面。因为数据一大,网络传输以及性能都会受到影响。
递增数字:incr key(会判断存的是否是数字,不是会报错。)
而且incr 是原子操作。
incrby key increment 递增指定的整数
decr key 原子递减
append key value 向指定的key 追加value
strlen key 获得指定key的value的长度
mget key key key 同时获得多个key的value(在生产环境比较建议使用,可以减少网络传输)
mset key value key value key value
key的设计是一个很讲究的事情,建议对key进行分类。
可以实现短信重发机制:sms:limit:mobile 60秒内只发送一次。
2、列表类型 list :
可以存储一个有序的字符串列表。
lpush/rpush:从左边或者右边push数据
lpush/rpush key value value…
lpop/rpop:从列表的左边或者右边移除一个数据并返回。
(可以实现分布式队列)
llen key 获得列表的长度
lrange key start stop; 索引可以是负数,-1表示最右边的第一个元素。
获得列表的某一段区间的value
lrem key count value 从左边删除count个数的指定的value值
lset key index value 改变某一个索引的值
3、散列类型
hash key value 不支持数据类型的嵌套
比较适合存储对象
hset key field value
hget key filed
hmset key field value filed value…
hmget key field field field…
hgetall key 获得hash的所有信息,包括key 和value
hexists key field 判断字段是否存在 存在返回1 不存在返回0;
hincrby 原子递增
hdel key field field … 删除一个或者多个字段
4、集合类型
set(集合) 和list(列表)不一样的地方:
集合类型不能存放重复的数据,而且是无序的。
sadd key member member…增加数据(存在的直接忽略并且返回的是成功加入的元素数量)
srem key member 删除元素
smembers key 可以获得所有数据
sdiff 对多个集合执行差集运算 前者减后者
sunion 对多个集合执行并集操作
sinter 对多个集合执行交集操作

     5、有序集合
    zadd key score member  [score member]..... 增加元素 score 是分数 决定顺序
    zrange key start stop 获得某一段元素 根据分数升序
    zrange key start stop withscores 获得元素和分数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值