缓存数据库-redis数据类型和操作(string)
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
一:String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
redis中的String在在内存中按照一个name对应一个value来存储。如图

-------------------------------------------------------------------------------------
1)set(name,value,ex=None,px=None,nx=False,xx=False)
在Redis中设置值,默认不存在则创建,存在则修改
ex:过期时间(秒)
px:过期时间(毫秒)
nx:如果设置为True,则只有name不存在时,当前set操作才执行
xx:如果设置为True,则只有name存在时,岗前set操作才执行
2)setnx(name,value)
设置值,只有name不存在时,执行设置操作(添加)
= set(name value,nx=True)
3)setex(name,value,time)
# time,过期时间(数字秒 或 timedelta对象
=set(name,value,ex=time)
4)psetex(name, time_ms, value)
# time_ms,过期时间(数字毫秒 或 timedelta对象
=set(name,value,px=time)
5)mset(*args, **kwargs)
批量设置值
如:mset(k1="v1",k2="v2")
-----------------------------------------------------------------------------------
6)get(name) 获取值
7)mget(keys,*args) 批量获取
mget(k1,k2)
8)getset(name,value) 设置新值并获取原来的值
9)getrange(key,start,end) 获取子序列(根据字节获取,非字符)
# name,Redis 的 name
# start,起始位置(字节)
#end,结束位置(字节)
比如:“中国” 0-3表示“中”
10)setranage(name,offset,value) 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
11) setbit(name,offset,value) 对name对应值的二进制表示的位进行操作
# 对name对应值的二进制表示的位进行操作 # 参数:
# name,redis的name
# offset,位的索引(将值变换成二进制后再进行索引)
# value,值只能是 1 或 0 # 注:如果在Redis中有一个对应: n1 = "foo",
那么字符串foo的二进制表示为:01100110 01101111 01101111
所以,如果执行 setbit('n1', 7, 1),则就会将第7位设置为1,
那么最终二进制则变成 01100111 01101111 01101111,即:"goo" # 扩展,转换二进制表示: # source = "武沛齐"
source = "foo" for i in source:
num = ord(i)
print bin(num).replace('b','') 特别的,如果source是汉字 "武沛齐"怎么办?
答:对于utf-8,每一个汉字占 3 个字节,那么 "武沛齐" 则有 9个字节
对于汉字,for循环时候会按照 字节 迭代,那么在迭代时,将每一个字节转换 十进制数,然后再将十进制数转换成二进制
11100110 10101101 10100110 11100110 10110010 10011011 11101001 10111101 10010000
-------------------------- ----------------------------- -----------------------------
武 沛 齐
*用途举例,用最省空间的方式,存储在线用户数及分别是哪些用户在线 每个用户都用个ID,用户ID号是多少,就设置第多少位为1,通过bitcount()统计1的个数,就代表有了多少个在线用户
优点统计速度快,点用空间少:1亿用户只需要占用100M空间 1M=1024*1024
12)getbit(name,offset) 获取name对应的值的二进制表示中的某位的值 (0或1)
13) bitcount(key, start=None, end=None) 获取name对应的值的二进制表示中 1 的个数
14)strlen(name) 返回name对应值的字节长度(一个汉字3个字节)
15)incr(self, name, amount=1)自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
16)incrbyfloat(self, name, amount=1.0) 增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
17)decr(self, name, amount=1)自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。
18)append(key, value) 在redis name对应的值后面追加内容
练习查看
# -*- coding:utf-8 -*-
__author__ = 'shisanjun'
[BEGIN] 2017/7/29 15:51:31
[root@kvm2 ~]# redis-cli
127.0.0.1:6379> set name1 shi #设置个key-value
OK
127.0.0.1:6379> set name2 san
OK
127.0.0.1:6379> set name3 jun ex 3 #设置name3过期时间为3秒
OK
127.0.0.1:6379> get name3
(nil)
127.0.0.1:6379> KEYS * #查看所有key
1) "name1"
2) "name2"
3) "foo"
127.0.0.1:6379> set name2 jun nx #不存在则创建,存在则不创建
(nil)
127.0.0.1:6379> set name3 jun nx #不存在则创建,存在则不创建
OK
127.0.0.1:6379> set name1 111 xx #存在则创建,不存在不创建
OK
127.0.0.1:6379> set name4 111 xx #存在则创建,不存在不创建
(nil)
127.0.0.1:6379> SETNX name5 222 #不存在则创建,存在则不创建
(integer) 1
127.0.0.1:6379> SETNX name5 222
(integer) 0
""
127.0.0.1:6379> SETEX name6 3 333 #设置过期时间为3秒 setex key time value
OK
127.0.0.1:6379> get name6
(nil)
127.0.0.1:6379> PSETEX name7 1 777 #设置过期时间为1毫秒 setex key time value
OK
127.0.0.1:6379> MSET k1 "v1" k2 "v2" #批量设置
OK
127.0.0.1:6379> keys *
1) "name1"
2) "k1"
3) "name5"
4) "k2"
5) "name2"
6) "name3"
7) "foo"
127.0.0.1:6379> mget k1 k2 #批量查看
1) "v1"
2) "v2"
127.0.0.1:6379> GETSET k1 "v3" #设置新值还回旧值
"v1"
127.0.0.1:6379> get k1
"v3"
127.0.0.1:6379> set k3 "中国"
OK
127.0.0.1:6379> GETRANGE k3 0 3 #从那个字节获取,一个中文3个字节
"\xe4\xb8\xad\xe5"
127.0.0.1:6379> SETRANGE k3 6 1111 #从那个字节设置
(integer) 10
127.0.0.1:6379> get k3
"\xe4\xb8\xad\xe5\x9b\xbd1111"
127.0.0.1:6379> set n1 "foo"
OK
127.0.0.1:6379> setbit n1 7 1 #从左到右第7位设置1
(integer) 0
127.0.0.1:6379> get n1
"goo"
127.0.0.1:6379> getbit n1 7 #获取第7位是1还是0
(integer) 1
127.0.0.1:6379> BITCOUNT n1 0 3 #获取从0-3个字节中转二进制1的个数
(integer) 17
127.0.0.1:6379> STRLEN k3 #统计字节个数
(integer) 10
127.0.0.1:6379> set n2 1
OK
127.0.0.1:6379> INCR n2 #自增
(integer) 2
127.0.0.1:6379> INCR n2
(integer) 3
127.0.0.1:6379> INCR n2
(integer) 4
127.0.0.1:6379> DECR n2 #自减
(integer) 3
127.0.0.1:6379> DECR n2
(integer) 2
127.0.0.1:6379> INCRBYFLOAT n2 1.0 #按浮点数自增
""
127.0.0.1:6379> INCRBYFLOAT n2 1.0
""
127.0.0.1:6379> set n3 4.0
127.0.0.1:6379> INCRBYFLOAT n3 2.1
"6.1"
127.0.0.1:6379> APPEND n3 2222 #追加
(integer) 7
127.0.0.1:6379> get n3
"6.12222" [END] 2017/7/29 16:05:41
缓存数据库-redis数据类型和操作(string)的更多相关文章
- 缓存数据库-redis数据类型和操作(list)
转: 狼来的日子里! 奋发博取 缓存数据库-redis数据类型和操作(list) 一:Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素导列表的头部( ...
- 缓存数据库-redis数据类型和操作(set)
一:Redis 集合(Set) Redis的Set是string类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复 ...
- 缓存数据库-redis数据类型和操作(hash)
一:Redis 哈希(Hash) Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. Redis 中每个 hash 可以存储 232 - 1 ...
- 缓存数据库-redis数据类型和操作(sorted set)
一:Redis 有序集合(sorted set) Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.redis正是 ...
- 缓存数据库redis
什么是Redis? Redis是一个TCP服务器,支持请求/响应协议. 在Redis中,请求通过以下步骤完成: 客户端向服务器发送查询,并从套接字读取,通常以阻塞的方式,用于服务器响应. 服务器处理命 ...
- Redis数据类型及其操作
redis数据类型即操作 1. 字符串 set 设置字符串 格式: set key value 例子: set name kainhuck get 获取字符串的值 格式: get key 例子: ge ...
- Linux+Redis实战教程_day02_3、redis数据类型_4、String命令_5、hash命令_6、java操作redis数据库技术
3. redis数据类型[重点] redis 使用的是键值对保存数据.(map) key:全部都是字符串 value:有五种数据类型 Key名:自定义,key名不要过长,否则影响使用效率 Key名不要 ...
- Redis数据类型和操作
<"Java技术员"成长手册>,包含框架.存储.搜索.优化.分布式等必备知识,都收集在GitHub JavaEgg ,N线互联网开发必备技能兵器谱,欢迎指导 Redis ...
- python【第十一篇】消息队列RabbitMQ、缓存数据库Redis
大纲 1.RabbitMQ 2.Redis 1.RabbitMQ消息队列 1.1 RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议 ...
随机推荐
- 关于Powershell对抗安全软件(转)
Windows PowerShell的强大,并且内置,在渗透过程中,也让渗透变得更加有趣.而安全软件的对抗查杀也逐渐开始针对powershell的一切行为.在https://technet.micro ...
- HDU.1796 How many integers can you find ( 组合数学 容斥原理 二进制枚举)
HDU.1796 How many integers can you find ( 组合数学 容斥原理 二进制枚举) 题意分析 求在[1,n-1]中,m个整数的倍数共有多少个 与 UVA.10325 ...
- spark 性能调优(一) 性能调优的本质、spark资源使用原理、调优要点分析
转载:http://www.cnblogs.com/jcchoiling/p/6440709.html 一.大数据性能调优的本质 编程的时候发现一个惊人的规律,软件是不存在的!所有编程高手级别的人无论 ...
- 轻量高效的开源JavaScript插件和库 【转】
图片 布局 轮播图 弹出层 音频视频 编辑器 字符串 表单 存储 动画 时间 其它 加载器 构建工具 测试 包管理器 CDN 图片 baguetteBox.js - 是一个简单易用的响应式图像灯箱效果 ...
- Rstdio快捷键总结
Rstdio常用快捷键总结 在R语言里面输入了一个不完整的指令以后 左下方的console pane一直有加号+,不管输入什么都是加号,只用推出重新打开Rstudio才行,后来google了下,按左上 ...
- Python【第三方模块&标准模块】
模块: 模块其实就是一个python文件 1.标准模块.标准包 #python自带的这些模块,直接import就能用的 import string,random,datetime,os,json 2. ...
- HTML常用标签-<head>内常用标签
HTML常用标签-<head>内常用标签 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HTML是什么 1>.超文本标记语言(Hypertext Ma ...
- 转:Launch Screen在iOS7/8中的实现
目前项目中需要解决的问题是: 兼容iOS7和iOS8,之前的版本不需要支持了 实现兼容3.5.4.4.7和5.5寸屏幕,竖屏的Lauch Screen 创建所需的PNG图片 有关iPhone6/6+相 ...
- linux之top命令详解
top:动态查看进程变化,监控linux的系统状况. top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. 下面详细介绍它的使用方法 ...
- pandas基础整理
用jupyter写好,直接放到GitHub上面了→_→ 博客链接:https://douzujun.github.io/page/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%9 ...