缓存数据库介绍
redis操作
1、缓存数据介绍
NoSQL(NoSQL = Not Only SQL),意即"不仅仅是SQL",泛指非关系型的数据库,随着互联网web的兴起,传统的关系数据库在应付web网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题
NoSQL数据库的四大类
NoSQL数据库的四大分类: 键值(Key-Value)存储数据库(Redis),列存储数据库,文档型数据库,图形(Graph)数据库,
- 分类:键值(key-value)
- 举例:Tokyo,Cabinet/Tyrant,Redis,Voldemort,Oracle BDB
- 典型应用场景:内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。
- 数据模型: Key指向Value的键值对,通常用hash
- 优点:查找速度快
- 缺点:数据无结构化,通常只被当作字符串或者二进制数据
redis介绍
为什么redis是键/值对的呢,因为k,v速度更快,k,v底层使用hash先转然后利用二分法2查找
redis是业界主流的key-value nosql数据库之一。和Memcached类似,它支持存储的value类型相对更对,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的(不可变的)。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中,区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步
Redis优点
- 异步快速:Redis是非常快的每秒可以执行大约110000设置操作,81000个/每秒的读取操作
- 支持丰富的数据类型:Redis支持最大多数开发人员已经知道列表,集合,可排序集合,哈希等数据类型
- 操作都是原子的:所有Resis的操作都是原子,从而确保当两个客户同时访问Redis服务器得到的是更新后的值(最新值)
- MultiUtility工具:Redis是一个多功能实用工具,可以在很多如:缓存,消息传递队列中使用(Redis原生支持发布/订阅),在应用程序中,如:Web应用程序会话,网站页面点击数等任何短暂的数据:
安装Redis环境
要在Ubuntu上安装Redis,打开终端,然后输入以下命令:
1.sudo apt-get update
- sudo apt-get install redis-server
安装了Redis启动Redis: redis-server
查看redis是否还在运行: redis-cli,这将打开一个Redis提示符,如下图: 127.0.0.1:6379> 在提示信息中:127.0.0.1是本机的IP地址,6379是Redis服务器运行端口,现在输入PING命令,如下图所示: 127.0.0.1:6379> ping PONG 这说明现在你已经成功地在计算机上安装了Redis
sudo netstat -tulnp查看端口
df:查看磁盘使用量
操作
1、String操作
redis中的String在在内存中按照一个name对应一个value来存储
- set(name, value, ex=None, px=None, nx=False, xx=False)
set name1 2
在Redis中设置值,默认,不存在则创建,存在则修改
参数:
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行
xx,如果设置为True,则只有name存在时,岗前set操作才执行
- setnx(name, value)
127.0.0.1:6379> setnx name1 3
(integer) 0
127.0.0.1:6379> setnx name2 4
(integer) 1
设置值,只有name不存在时,执行设置操作(添加)
- setex(name, value, time)
127.0.0.1:6379> setex name3 3 3
OK
127.0.0.1:6379> get name3
(nil)
# 设置值
# 参数:
# time,过期时间(数字秒 或 timedelta对象)
- psetex(name, time_ms, value)
# 设置值
# 参数:
# time_ms,过期时间(数字毫秒 或 timedelta对象)
- mset(*args, **kwargs)
批量设置值
127.0.0.1:6379> mset k 2 k1 3
OK
- get(name)
获取值
127.0.0.1:6379> get k
"2"
- mget(keys, *args)
批量获取
127.0.0.1:6379> mget k k1
1) "2"
2) "3"
获取所有的key:
127.0.0.1:6379> Keys *
1) "name2"
2) "k"
3) "k1"
4) "name1"
- getrange(key, start, end)
# 获取子序列(根据字节获取,非字符)
# 参数:
# name,Redis 的 name
# start,起始位置(字节)
# end,结束位置(字节)
127.0.0.1:6379> set name4 keke
OK
127.0.0.1:6379> getrange name4 0 2
"kek"
127.0.0.1:6379>
- setrange(name, offset, value)
# 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
# 参数:
# offset,字符串的索引,字节(一个汉字三个字节)
# value,要设置的值
127.0.0.1:6379> setrange name4 2 yu
(integer) 4
127.0.0.1:6379> get name4
"keyu"
- setbit(name, offset, value)
# 对name对应值的二进制表示的位进行操作
# 参数:
# name,redis的name
# offset,位的索引(将值变换成二进制后再进行索引)
# value,值只能是 1 或 0
找出50乙登陆的用户:
用一个key=LOGIN_USERS存储用户登陆,从位数0开始,
setbit Login_USERS 10 1 ,10是一个用户的唯一usei当作位数,值1表示登陆,用bitcount LOGIN_USERS所有为1(登陆的总数),
用getbit LOGIN_USERS 10 :找出userid为10的用户是否是登陆的
- getbit(name, offset)
# 获取name对应的值的二进制表示中的某位的值 (0或1)
- bitcount(key, start=None, end=None)
# 获取name对应的值的二进制表示中 1 的个数
# 参数:
# key,Redis的name
# start,位起始位置
# end,位结束位置
- strlen(name)
# 返回name对应值的字节长度(一个汉字3个字节)
- incr(self, name, amount=1)
# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
# 参数:
# name,Redis的name
# amount,自增数(必须是整数)
# 注:同incrby
- incrbyfloat(self, name, amount=1.0)
# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
# 参数:
# name,Redis的name
# amount,自增数(浮点型)
- decr(self, name, amount=1)
# 自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。
# 参数:
# name,Redis的name
# amount,自减数(整数)
- append(key, value)
# 在redis name对应的值后面追加内容
# 参数:
key, redis的name
value, 要追加的字符串
https://www.cnblogs.com/alex3714/articles/6217453.html